You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by ni...@apache.org on 2009/03/17 09:47:07 UTC

svn commit: r755153 - in /cxf/trunk: api/src/main/java/org/apache/cxf/databinding/ rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/ rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/ rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbea...

Author: ningjiang
Date: Tue Mar 17 08:47:06 2009
New Revision: 755153

URL: http://svn.apache.org/viewvc?rev=755153&view=rev
Log:
CXF-2116, CXF-2099 Refactoring of the WrapperHelper

Added:
    cxf/trunk/api/src/main/java/org/apache/cxf/databinding/AbstractWrapperHelper.java   (with props)
    cxf/trunk/api/src/main/java/org/apache/cxf/databinding/WrapperCapableDatabinding.java   (with props)
    cxf/trunk/api/src/main/java/org/apache/cxf/databinding/WrapperHelper.java   (with props)
    cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBWrapperHelper.java   (with props)
    cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/WrapperHelperCompiler.java   (contents, props changed)
      - copied, changed from r755069, cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperHelperCompiler.java
    cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBWrapperHelperTest.java   (contents, props changed)
      - copied, changed from r755069, cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/WrapperHelperTest.java
    cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/XmlBeansWrapperHelper.java   (with props)
Removed:
    cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperHelper.java
    cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperHelperCompiler.java
    cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/WrapperHelperTest.java
Modified:
    cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java
    cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/XmlBeansDataBinding.java
    cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassInInterceptor.java
    cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassOutInterceptor.java
    cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/WrapperClassGeneratorTest.java

Added: cxf/trunk/api/src/main/java/org/apache/cxf/databinding/AbstractWrapperHelper.java
URL: http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/databinding/AbstractWrapperHelper.java?rev=755153&view=auto
==============================================================================
--- cxf/trunk/api/src/main/java/org/apache/cxf/databinding/AbstractWrapperHelper.java (added)
+++ cxf/trunk/api/src/main/java/org/apache/cxf/databinding/AbstractWrapperHelper.java Tue Mar 17 08:47:06 2009
@@ -0,0 +1,135 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.cxf.databinding;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.cxf.helpers.CastUtils;
+import org.apache.cxf.interceptor.Fault;
+
+/**
+ *  This wrapper helper will use reflection to handle the wrapped message
+ */
+public abstract class AbstractWrapperHelper implements WrapperHelper {
+    
+    public static final Class NO_CLASSES[] = new Class[0];
+    public static final Object NO_PARAMS[] = new Object[0];
+        
+    protected final Class<?> wrapperType;
+    protected final Method setMethods[];
+    protected final Method getMethods[];    
+    protected final Field fields[];   
+                 
+    protected AbstractWrapperHelper(Class<?> wt,
+                  Method sets[],
+                  Method gets[],                  
+                  Field f[]) {
+        setMethods = sets;
+        getMethods = gets;
+        fields = f;        
+        wrapperType = wt;        
+    }
+    
+    public String getSignature() {
+        return "" + System.identityHashCode(this);
+    }
+    
+    protected abstract Object createWrapperObject(Class typeClass) throws Exception;
+    
+    protected abstract Object getWrapperObject(Object object) throws Exception;
+    
+    protected Object getPartObject(int index, Object object) throws Exception {
+        return object;
+    }
+    
+    protected Object getValue(Method method, Object in) throws IllegalAccessException,
+    InvocationTargetException {        
+        return method.invoke(in);    
+    }
+    
+    public Object createWrapperObject(List<?> lst) 
+        throws Fault {
+        try {
+            Object wrapperObject = createWrapperObject(wrapperType);
+            
+            for (int x = 0; x < setMethods.length; x++) {
+                if (getMethods[x] == null
+                    && setMethods[x] == null 
+                    && fields[x] == null) {
+                    //this part is a header or something
+                    //that is not part of the wrapper.
+                    continue;
+                }
+                Object o = lst.get(x);
+                o = getPartObject(x, o);                
+                if (o instanceof List) {
+                    List<Object> col = CastUtils.cast((List)getMethods[x].invoke(wrapperObject));
+                    if (col == null) {
+                        //broken generated java wrappers
+                        if (setMethods[x] != null) {
+                            setMethods[x].invoke(wrapperObject, o);
+                        } else {
+                            fields[x].set(wrapperObject, lst.get(x));
+                        }
+                    } else {
+                        List<Object> olst = CastUtils.cast((List)o);
+                        col.addAll(olst);
+                    }
+                } else if (setMethods[x] != null) {                        
+                    setMethods[x].invoke(wrapperObject, o);
+                } else if (fields[x] != null) {
+                    fields[x].set(wrapperObject, lst.get(x));
+                }
+            }
+            return wrapperObject;
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new Fault(ex.getCause());
+        }
+    }
+    
+    public List<Object> getWrapperParts(Object o) throws Fault {
+        try {
+            Object wrapperObject = getWrapperObject(o);                          
+            List<Object> ret = new ArrayList<Object>(getMethods.length);
+            for (int x = 0; x < getMethods.length; x++) {
+                if (getMethods[x] != null) {
+                    ret.add(getValue(getMethods[x], wrapperObject));                        
+                } else if (fields[x] != null) {
+                    ret.add(fields[x].get(wrapperObject));
+                } else {
+                    //placeholder
+                    ret.add(null);
+                }
+            }
+            
+            return ret;
+        } catch (Exception ex) {
+            throw new Fault(ex.getCause());
+        }
+    }
+    
+   
+}
+
+

Propchange: cxf/trunk/api/src/main/java/org/apache/cxf/databinding/AbstractWrapperHelper.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/api/src/main/java/org/apache/cxf/databinding/AbstractWrapperHelper.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: cxf/trunk/api/src/main/java/org/apache/cxf/databinding/WrapperCapableDatabinding.java
URL: http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/databinding/WrapperCapableDatabinding.java?rev=755153&view=auto
==============================================================================
--- cxf/trunk/api/src/main/java/org/apache/cxf/databinding/WrapperCapableDatabinding.java (added)
+++ cxf/trunk/api/src/main/java/org/apache/cxf/databinding/WrapperCapableDatabinding.java Tue Mar 17 08:47:06 2009
@@ -0,0 +1,33 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.cxf.databinding;
+
+import java.util.List;
+
+/**
+ *  To create the WrapperHelper instance for the wrapper capable data binding
+ */
+public interface WrapperCapableDatabinding {
+        
+    WrapperHelper createWrapperHelper(Class<?> wrapperType,
+                                      List<String> partNames,
+                                      List<String> elTypeNames,
+                                      List<Class<?>> partClasses);
+
+}

Propchange: cxf/trunk/api/src/main/java/org/apache/cxf/databinding/WrapperCapableDatabinding.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/api/src/main/java/org/apache/cxf/databinding/WrapperCapableDatabinding.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: cxf/trunk/api/src/main/java/org/apache/cxf/databinding/WrapperHelper.java
URL: http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/databinding/WrapperHelper.java?rev=755153&view=auto
==============================================================================
--- cxf/trunk/api/src/main/java/org/apache/cxf/databinding/WrapperHelper.java (added)
+++ cxf/trunk/api/src/main/java/org/apache/cxf/databinding/WrapperHelper.java Tue Mar 17 08:47:06 2009
@@ -0,0 +1,39 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.databinding;
+
+import java.util.List;
+
+import org.apache.cxf.interceptor.Fault;
+
+/**
+ *  This wrapper helper will help to create a wrapper object with part elements or 
+ *  get a list of part elements from a wrapper object.
+ */
+public interface WrapperHelper {    
+    
+    Object createWrapperObject(List<?> lst) throws Fault;
+    
+    List<Object> getWrapperParts(Object o) throws Fault;
+
+    String getSignature();
+    
+
+}

Propchange: cxf/trunk/api/src/main/java/org/apache/cxf/databinding/WrapperHelper.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/api/src/main/java/org/apache/cxf/databinding/WrapperHelper.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java?rev=755153&r1=755152&r2=755153&view=diff
==============================================================================
--- cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java (original)
+++ cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBDataBinding.java Tue Mar 17 08:47:06 2009
@@ -25,6 +25,7 @@
 import java.io.InputStreamReader;
 import java.io.OutputStream;
 import java.lang.ref.WeakReference;
+import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -41,11 +42,13 @@
 import java.util.regex.Pattern;
 
 import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBElement;
 import javax.xml.bind.JAXBException;
 import javax.xml.bind.Marshaller;
 import javax.xml.bind.SchemaOutputResolver;
 import javax.xml.bind.Unmarshaller;
 import javax.xml.bind.ValidationEventHandler;
+import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlElementDecl;
 import javax.xml.stream.XMLEventReader;
 import javax.xml.stream.XMLEventWriter;
@@ -65,8 +68,11 @@
 import org.apache.cxf.common.util.StringUtils;
 import org.apache.cxf.common.xmlschema.SchemaCollection;
 import org.apache.cxf.databinding.AbstractDataBinding;
+import org.apache.cxf.databinding.AbstractWrapperHelper;
 import org.apache.cxf.databinding.DataReader;
 import org.apache.cxf.databinding.DataWriter;
+import org.apache.cxf.databinding.WrapperCapableDatabinding;
+import org.apache.cxf.databinding.WrapperHelper;
 import org.apache.cxf.jaxb.io.DataReaderImpl;
 import org.apache.cxf.jaxb.io.DataWriterImpl;
 import org.apache.cxf.service.Service;
@@ -74,7 +80,7 @@
 import org.apache.cxf.service.model.ServiceInfo;
 import org.apache.cxf.ws.addressing.ObjectFactory;
 
-public class JAXBDataBinding extends AbstractDataBinding {
+public class JAXBDataBinding extends AbstractDataBinding  implements WrapperCapableDatabinding {
     public static final String SCHEMA_RESOURCE = "SCHEMRESOURCE";
     public static final String MTOM_THRESHOLD = "org.apache.cxf.jaxb.mtomThreshold";
 
@@ -718,4 +724,187 @@
         }
     }
 
+    public WrapperHelper createWrapperHelper(Class<?> wrapperType, List<String> partNames,
+                                             List<String> elTypeNames, List<Class<?>> partClasses) {
+        List<Method> getMethods = new ArrayList<Method>(partNames.size());
+        List<Method> setMethods = new ArrayList<Method>(partNames.size());
+        List<Method> jaxbMethods = new ArrayList<Method>(partNames.size());
+        List<Field> fields = new ArrayList<Field>(partNames.size());
+        
+        Method allMethods[] = wrapperType.getMethods();
+        String packageName = PackageUtils.getPackageName(wrapperType);
+        
+        //if wrappertype class is generated by ASM,getPackage() always return null
+        if (wrapperType.getPackage() != null) {
+            packageName = wrapperType.getPackage().getName();
+        }
+        
+        String objectFactoryClassName = packageName + ".ObjectFactory";
+
+        Object objectFactory = null;
+        try {
+            objectFactory = wrapperType.getClassLoader().loadClass(objectFactoryClassName).newInstance();
+        } catch (Exception e) {
+            //ignore, probably won't need it
+        }
+        Method allOFMethods[];
+        if (objectFactory != null) {
+            allOFMethods = objectFactory.getClass().getMethods(); 
+        } else {
+            allOFMethods = new Method[0];
+        }
+        
+        for (int x = 0; x < partNames.size(); x++) {
+            String partName = partNames.get(x);            
+            if (partName == null) {
+                getMethods.add(null);
+                setMethods.add(null);
+                fields.add(null);
+                jaxbMethods.add(null);
+                continue;
+            }
+            
+            String elementType = elTypeNames.get(x);
+            
+            String getAccessor = JAXBUtils.nameToIdentifier(partName, JAXBUtils.IdentifierType.GETTER);
+            String setAccessor = JAXBUtils.nameToIdentifier(partName, JAXBUtils.IdentifierType.SETTER);
+            Method getMethod = null;
+            Method setMethod = null;
+            Class<?> valueClass = wrapperType;
+            
+            try {               
+                getMethod = valueClass.getMethod(getAccessor, AbstractWrapperHelper.NO_CLASSES); 
+            } catch (NoSuchMethodException ex) {
+                //ignore for now
+            }
+            
+            Field elField = getElField(partName, valueClass);
+            if (getMethod == null
+                && elementType != null
+                && "boolean".equals(elementType.toLowerCase())
+                && (elField == null
+                    || (!Collection.class.isAssignableFrom(elField.getType())
+                    && !elField.getType().isArray()))) {
+        
+                try {
+                    String newAcc = getAccessor.replaceFirst("get", "is");
+                    getMethod = wrapperType.getMethod(newAcc, AbstractWrapperHelper.NO_CLASSES); 
+                } catch (NoSuchMethodException ex) {
+                    //ignore for now
+                }            
+            }                        
+            if (getMethod == null 
+                && "return".equals(partName)) {
+                //RI generated code uses this
+                try {
+                    getMethod = valueClass.getMethod("get_return", AbstractWrapperHelper.NO_CLASSES);
+                } catch (NoSuchMethodException ex) {
+                    try {
+                        getMethod = valueClass.getMethod("is_return",
+                                                          new Class[0]);
+                    } catch (NoSuchMethodException ex2) {
+                        //ignore for now
+                    } 
+                }                
+            }
+            String setAccessor2 = setAccessor;
+            if ("return".equals(partName)) {
+                //some versions of jaxb map "return" to "set_return" instead of "setReturn"
+                setAccessor2 = "set_return";
+            }
+
+            for (Method method : allMethods) {
+                if (method.getParameterTypes() != null && method.getParameterTypes().length == 1
+                    && (setAccessor.equals(method.getName())
+                        || setAccessor2.equals(method.getName()))) {
+                    setMethod = method;
+                    break;
+                }
+            }
+            
+            getMethods.add(getMethod);
+            setMethods.add(setMethod);
+            if (setMethod != null
+                && JAXBElement.class.isAssignableFrom(setMethod.getParameterTypes()[0])) {
+                
+                String methodName = "create" + wrapperType.getSimpleName()
+                    + setMethod.getName().substring(3);
+
+                for (Method m : allOFMethods) {
+                    if (m.getName().equals(methodName)) {
+                        jaxbMethods.add(m);
+                    }
+                }
+            } else {
+                jaxbMethods.add(null);
+            }
+            
+            if (elField != null) {
+                // JAXB Type get XmlElement Annotation
+                XmlElement el = elField.getAnnotation(XmlElement.class);
+                if (el != null
+                    && partName.equals(el.name())) {
+                    elField.setAccessible(true);
+                    fields.add(elField);
+                } else {
+                    fields.add(null);
+                } 
+            } else {
+                fields.add(null);
+            }
+            
+        }
+        
+        return createWrapperHelper(wrapperType,
+                                 setMethods.toArray(new Method[setMethods.size()]),
+                                 getMethods.toArray(new Method[getMethods.size()]),
+                                 jaxbMethods.toArray(new Method[jaxbMethods.size()]),
+                                 fields.toArray(new Field[fields.size()]),
+                                 objectFactory);
+    }
+    
+    private static Field getElField(String partName, Class<?> wrapperType) {
+        String fieldName = JAXBUtils.nameToIdentifier(partName, JAXBUtils.IdentifierType.VARIABLE);
+        for (Field field : wrapperType.getDeclaredFields()) {
+            XmlElement el = field.getAnnotation(XmlElement.class);
+            if (el != null
+                && partName.equals(el.name())) {
+                return field;
+            }
+            if (field.getName().equals(fieldName)) {
+                return field;
+            }
+        }        
+        return null;
+    }
+
+    
+    private static WrapperHelper createWrapperHelper(Class<?> wrapperType, Method setMethods[],
+                                                     Method getMethods[], Method jaxbMethods[],
+                                                     Field fields[], Object objectFactory) {
+
+        WrapperHelper wh = compileWrapperHelper(wrapperType, setMethods, getMethods, jaxbMethods, fields,
+                                                objectFactory);
+
+        if (wh == null) {
+            wh = new JAXBWrapperHelper(wrapperType, setMethods, getMethods, jaxbMethods, fields,
+                                       objectFactory);
+        }
+        return wh;
+    }
+
+    private static WrapperHelper compileWrapperHelper(Class<?> wrapperType, Method setMethods[],
+                                                      Method getMethods[], Method jaxbMethods[],
+                                                      Field fields[], Object objectFactory) {
+        try {
+            Class.forName("org.objectweb.asm.ClassWriter");
+            return WrapperHelperCompiler.compileWrapperHelper(wrapperType, setMethods, getMethods,
+                                                              jaxbMethods, fields, objectFactory);
+        } catch (ClassNotFoundException e) {
+            // ASM not found, just use reflection based stuff
+            e.printStackTrace();
+        }
+        return null;
+    }   
+
 }

Added: cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBWrapperHelper.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBWrapperHelper.java?rev=755153&view=auto
==============================================================================
--- cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBWrapperHelper.java (added)
+++ cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBWrapperHelper.java Tue Mar 17 08:47:06 2009
@@ -0,0 +1,73 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.jaxb;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+import javax.xml.bind.JAXBElement;
+
+import org.apache.cxf.databinding.AbstractWrapperHelper;
+
+/**
+ * 
+ */
+public class JAXBWrapperHelper extends AbstractWrapperHelper {
+    protected final Method jaxbObjectMethods[];    
+    protected final Object objectFactory;
+
+    protected JAXBWrapperHelper(Class<?> wt, Method[] sets, Method[] gets,
+                                Method jaxbs[], Field[] f, Object of) {
+        super(wt, sets, gets, f);
+        jaxbObjectMethods = jaxbs;
+        objectFactory = of;        
+    }
+
+    @Override
+    protected Object createWrapperObject(Class typeClass) throws Exception {       
+        return typeClass.newInstance();
+    }
+    
+    @Override
+    protected Object getWrapperObject(Object object) {
+        return object;
+    }
+    
+    @Override
+    protected Object getValue(Method method, Object in) throws IllegalAccessException,
+    InvocationTargetException {
+        if ("javax.xml.bind.JAXBElement".equals(method.getReturnType().getCanonicalName())) {
+            JAXBElement je = (JAXBElement)method.invoke(in);
+            return je == null ? je : je.getValue();
+        } else {            
+            return method.invoke(in);    
+        }
+    }
+    
+    @Override
+    protected Object getPartObject(int index, Object object) throws Exception {
+        Object result = object;
+        if (jaxbObjectMethods[index] != null) {
+            result = jaxbObjectMethods[index].invoke(objectFactory, object);
+        }
+        return result;
+    }
+}

Propchange: cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBWrapperHelper.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBWrapperHelper.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Copied: cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/WrapperHelperCompiler.java (from r755069, cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperHelperCompiler.java)
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/WrapperHelperCompiler.java?p2=cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/WrapperHelperCompiler.java&p1=cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperHelperCompiler.java&r1=755069&r2=755153&rev=755153&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperHelperCompiler.java (original)
+++ cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/WrapperHelperCompiler.java Tue Mar 17 08:47:06 2009
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.cxf.jaxws.interceptors;
+package org.apache.cxf.jaxb;
 
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
@@ -25,6 +25,7 @@
 import javax.xml.bind.JAXBElement;
 
 import org.apache.cxf.common.util.ASMHelper;
+import org.apache.cxf.databinding.WrapperHelper;
 import org.objectweb.asm.ClassWriter;
 import org.objectweb.asm.FieldVisitor;
 import org.objectweb.asm.Label;

Propchange: cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/WrapperHelperCompiler.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/WrapperHelperCompiler.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/WrapperHelperCompiler.java
------------------------------------------------------------------------------
    svn:mergeinfo = 

Copied: cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBWrapperHelperTest.java (from r755069, cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/WrapperHelperTest.java)
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBWrapperHelperTest.java?p2=cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBWrapperHelperTest.java&p1=cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/WrapperHelperTest.java&r1=755069&r2=755153&rev=755153&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/WrapperHelperTest.java (original)
+++ cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBWrapperHelperTest.java Tue Mar 17 08:47:06 2009
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.cxf.jaxws;
+package org.apache.cxf.jaxb;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -28,11 +28,11 @@
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
 
-import org.apache.cxf.jaxws.interceptors.WrapperHelper;
+import org.apache.cxf.databinding.WrapperHelper;
 import org.junit.Assert;
 import org.junit.Test;
 
-public class WrapperHelperTest extends Assert {
+public class JAXBWrapperHelperTest extends Assert {
 
 
     @Test
@@ -63,7 +63,7 @@
             List.class,
         });
         
-        WrapperHelper wh = WrapperHelper.createWrapperHelper(SetIsOK.class,
+        WrapperHelper wh = new JAXBDataBinding().createWrapperHelper(SetIsOK.class,
                                           partNames,
                                           elTypeNames,
                                           partClasses);

Propchange: cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBWrapperHelperTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBWrapperHelperTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBWrapperHelperTest.java
------------------------------------------------------------------------------
    svn:mergeinfo = 

Modified: cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/XmlBeansDataBinding.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/XmlBeansDataBinding.java?rev=755153&r1=755152&r2=755153&view=diff
==============================================================================
--- cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/XmlBeansDataBinding.java (original)
+++ cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/XmlBeansDataBinding.java Tue Mar 17 08:47:06 2009
@@ -19,6 +19,10 @@
 
 package org.apache.cxf.xmlbeans;
 
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -28,20 +32,25 @@
 
 import org.w3c.dom.Node;
 
-
 import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.common.xmlschema.SchemaCollection;
 import org.apache.cxf.databinding.AbstractDataBinding;
+import org.apache.cxf.databinding.AbstractWrapperHelper;
 import org.apache.cxf.databinding.DataReader;
 import org.apache.cxf.databinding.DataWriter;
+import org.apache.cxf.databinding.WrapperCapableDatabinding;
+import org.apache.cxf.databinding.WrapperHelper;
+import org.apache.cxf.jaxb.JAXBUtils;
 import org.apache.cxf.service.Service;
 import org.apache.cxf.service.model.ServiceInfo;
 
 
+
+
 /**
  * 
  */
-public class XmlBeansDataBinding extends AbstractDataBinding {
+public class XmlBeansDataBinding extends AbstractDataBinding implements WrapperCapableDatabinding {
     private static final Logger LOG = LogUtils.getLogger(XmlBeansDataBinding.class);
 
     private static final Class<?> SUPPORTED_READER_FORMATS[] = new Class<?>[] {XMLStreamReader.class};
@@ -103,4 +112,56 @@
         }
     }
 
+    public WrapperHelper createWrapperHelper(Class<?> wrapperType, List<String> partNames,
+                                             List<String> elTypeNames, List<Class<?>> partClasses) {
+        
+        List<Method> getMethods = new ArrayList<Method>(partNames.size());
+        List<Method> setMethods = new ArrayList<Method>(partNames.size());        
+        List<Field> fields = new ArrayList<Field>(partNames.size());
+        
+        Method allMethods[] = wrapperType.getMethods();
+                        
+        for (int x = 0; x < partNames.size(); x++) {
+            String partName = partNames.get(x);            
+            if (partName == null) {
+                getMethods.add(null);
+                setMethods.add(null);
+                fields.add(null);
+                continue;
+            }
+                                   
+            String getAccessor = JAXBUtils.nameToIdentifier(partName, JAXBUtils.IdentifierType.GETTER);
+            String setAccessor = JAXBUtils.nameToIdentifier(partName, JAXBUtils.IdentifierType.SETTER);
+            Method getMethod = null;
+            Method setMethod = null;
+            Class<?> valueClass = XmlBeansWrapperHelper.getXMLBeansValueType(wrapperType);
+            allMethods = valueClass.getMethods();
+            
+            try {
+                getMethod = valueClass.getMethod(getAccessor, AbstractWrapperHelper.NO_CLASSES);
+            } catch (NoSuchMethodException ex) {
+                //ignore for now
+            }
+                        
+            for (Method method : allMethods) {
+                if (method.getParameterTypes() != null && method.getParameterTypes().length == 1
+                    && (setAccessor.equals(method.getName()))) {                        
+                    setMethod = method;
+                    break;
+                }
+            }
+            
+            getMethods.add(getMethod);
+            setMethods.add(setMethod);
+            // There is no filed in the XMLBeans type class
+            fields.add(null);
+            
+        }
+        
+        return new XmlBeansWrapperHelper(wrapperType,
+                                 setMethods.toArray(new Method[setMethods.size()]),
+                                 getMethods.toArray(new Method[getMethods.size()]),
+                                 fields.toArray(new Field[fields.size()]));
+    }
+
 }

Added: cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/XmlBeansWrapperHelper.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/XmlBeansWrapperHelper.java?rev=755153&view=auto
==============================================================================
--- cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/XmlBeansWrapperHelper.java (added)
+++ cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/XmlBeansWrapperHelper.java Tue Mar 17 08:47:06 2009
@@ -0,0 +1,98 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.xmlbeans;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+
+import org.apache.cxf.databinding.AbstractWrapperHelper;
+import org.apache.xmlbeans.XmlOptions;
+
+
+public class XmlBeansWrapperHelper extends AbstractWrapperHelper {
+    
+    private boolean validate;
+            
+    public XmlBeansWrapperHelper(Class<?> wt, Method[] sets, Method[] gets, Field[] f) {
+        super(wt, sets, gets, f);
+       
+    }
+    
+    public void setValidate(boolean v) {
+        validate = v;
+    }
+    
+    public boolean getValidate() {
+        return validate;
+    }
+
+    @Override
+    protected Object createWrapperObject(Class typeClass) throws Exception {
+        Class<?> cls[] = typeClass.getDeclaredClasses();
+        Method newType = null;
+        for (Method method : typeClass.getMethods()) {
+            if (method.getName().startsWith("addNew")) {
+                newType = method;
+                break;
+            }
+        }                     
+        Object obj = null;
+        for (Class<?> c : cls) {                        
+            if ("Factory".equals(c.getSimpleName())) {
+                if (validate) {
+                    // set the validation option here
+                    Method method = c.getMethod("newInstance", XmlOptions.class); 
+                    XmlOptions options = new XmlOptions();                    
+                    options.setValidateOnSet();                    
+                    obj = method.invoke(null, options);
+                } else {
+                    Method method = c.getMethod("newInstance", NO_CLASSES);
+                    obj = method.invoke(null, NO_PARAMS);                    
+                }
+                // create the value object
+                obj = newType.invoke(obj, NO_PARAMS);
+                break;
+            }
+        }
+        
+        return obj;
+    }
+
+    @Override
+    protected Object getWrapperObject(Object object) throws Exception {                            
+        Class<?> valueClass = getXMLBeansValueType(wrapperType);
+        // we need get the real Object first
+        Method method = wrapperType.getMethod("get" + valueClass.getSimpleName(), NO_CLASSES);
+        return method.invoke(object, NO_PARAMS);
+        
+    }
+    
+    public static Class<?> getXMLBeansValueType(Class<?> wrapperType)  {
+        Class<?> result = wrapperType;
+        for (Method method : wrapperType.getMethods()) {
+            if (method.getName().startsWith("addNew")) {                
+                result = method.getReturnType();
+                break;
+            }
+        }
+        return result;
+    }
+
+}

Propchange: cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/XmlBeansWrapperHelper.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/XmlBeansWrapperHelper.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassInInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassInInterceptor.java?rev=755153&r1=755152&r2=755153&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassInInterceptor.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassInInterceptor.java Tue Mar 17 08:47:06 2009
@@ -26,18 +26,23 @@
 import java.util.logging.Logger;
 
 import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.databinding.DataBinding;
+import org.apache.cxf.databinding.WrapperCapableDatabinding;
+import org.apache.cxf.databinding.WrapperHelper;
 import org.apache.cxf.interceptor.Fault;
 import org.apache.cxf.message.Exchange;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.message.MessageContentsList;
 import org.apache.cxf.phase.AbstractPhaseInterceptor;
 import org.apache.cxf.phase.Phase;
+import org.apache.cxf.service.Service;
 import org.apache.cxf.service.factory.ReflectionServiceFactoryBean;
 import org.apache.cxf.service.model.BindingMessageInfo;
 import org.apache.cxf.service.model.BindingOperationInfo;
 import org.apache.cxf.service.model.MessageInfo;
 import org.apache.cxf.service.model.MessagePartInfo;
 import org.apache.cxf.service.model.OperationInfo;
+import org.apache.cxf.service.model.ServiceModelUtil;
 
 public class WrapperClassInInterceptor extends AbstractPhaseInterceptor<Message> {
 
@@ -113,8 +118,15 @@
             
             WrapperHelper helper = wrapperPart.getProperty("WRAPPER_CLASS", WrapperHelper.class);
             if (helper == null) {
-                helper = createWrapperHelper(messageInfo, wrappedMessageInfo, wrapperClass);
-                wrapperPart.setProperty("WRAPPER_CLASS", helper);
+                Service service = ServiceModelUtil.getService(message.getExchange());
+                DataBinding dataBinding = service.getDataBinding();
+                if (dataBinding instanceof WrapperCapableDatabinding) {
+                    helper = createWrapperHelper((WrapperCapableDatabinding)dataBinding,
+                                                 messageInfo, wrappedMessageInfo, wrapperClass);
+                    wrapperPart.setProperty("WRAPPER_CLASS", helper);
+                } else {
+                    return;
+                }                
             }            
             
             MessageContentsList newParams;
@@ -150,7 +162,8 @@
         }
     }
     
-    private WrapperHelper createWrapperHelper(MessageInfo messageInfo,
+    private WrapperHelper createWrapperHelper(WrapperCapableDatabinding dataBinding, 
+                                              MessageInfo messageInfo,
                                               MessageInfo wrappedMessageInfo,
                                               Class<?> wrapperClass) {
         List<String> partNames = new ArrayList<String>();
@@ -184,7 +197,7 @@
                 partNames.set(idx, p.getName().getLocalPart());
             }
         }
-        return WrapperHelper.createWrapperHelper(wrapperClass,
+        return dataBinding.createWrapperHelper(wrapperClass,
                                                   partNames,
                                                   elTypeNames,
                                                   partClasses);

Modified: cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassOutInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassOutInterceptor.java?rev=755153&r1=755152&r2=755153&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassOutInterceptor.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassOutInterceptor.java Tue Mar 17 08:47:06 2009
@@ -19,21 +19,27 @@
 
 package org.apache.cxf.jaxws.interceptors;
 
+import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.cxf.databinding.DataBinding;
+import org.apache.cxf.databinding.WrapperCapableDatabinding;
+import org.apache.cxf.databinding.WrapperHelper;
 import org.apache.cxf.interceptor.Fault;
 import org.apache.cxf.message.Exchange;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.message.MessageContentsList;
 import org.apache.cxf.phase.AbstractPhaseInterceptor;
 import org.apache.cxf.phase.Phase;
+import org.apache.cxf.service.Service;
 import org.apache.cxf.service.factory.ReflectionServiceFactoryBean;
 import org.apache.cxf.service.model.BindingMessageInfo;
 import org.apache.cxf.service.model.BindingOperationInfo;
 import org.apache.cxf.service.model.MessageInfo;
 import org.apache.cxf.service.model.MessagePartInfo;
 import org.apache.cxf.service.model.OperationInfo;
+import org.apache.cxf.service.model.ServiceModelUtil;
 
 public class WrapperClassOutInterceptor extends AbstractPhaseInterceptor<Message> {
     public WrapperClassOutInterceptor() {
@@ -68,37 +74,32 @@
 
             WrapperHelper helper = parts.get(0).getProperty("WRAPPER_CLASS", WrapperHelper.class);
             if (helper == null) {
-                List<String> partNames = new ArrayList<String>();
-                List<String> elTypeNames = new ArrayList<String>();
-                List<Class<?>> partClasses = new ArrayList<Class<?>>();
-                
-                for (MessagePartInfo p : messageInfo.getMessageParts()) {
-                    ensureSize(partNames, p.getIndex());
-                    ensureSize(elTypeNames, p.getIndex());
-                    ensureSize(partClasses, p.getIndex());
-                    
-                    partNames.set(p.getIndex(), p.getName().getLocalPart());
-                    
-                    String elementType = null;
-                    if (p.getTypeQName() == null) {
-                        // handling anonymous complex type
-                        elementType = null;
-                    } else {
-                        elementType = p.getTypeQName().getLocalPart();
-                    }
-                    
-                    elTypeNames.set(p.getIndex(), elementType);
-                    partClasses.set(p.getIndex(), p.getTypeClass());
+                Service service = ServiceModelUtil.getService(message.getExchange());
+                DataBinding dataBinding = service.getDataBinding();
+                if (dataBinding instanceof WrapperCapableDatabinding) {
+                    helper = createWrapperHelper((WrapperCapableDatabinding)dataBinding,
+                                                 messageInfo, wrappedMsgInfo, wrapped);
+                    parts.get(0).setProperty("WRAPPER_CLASS", helper);
+                } else {
+                    return;
                 }
-                helper = WrapperHelper.createWrapperHelper(wrapped,
-                                                           partNames,
-                                                           elTypeNames,
-                                                           partClasses);
-
-                parts.get(0).setProperty("WRAPPER_CLASS", helper);
             }
             try {
-                MessageContentsList newObjs = new MessageContentsList(); 
+                MessageContentsList newObjs = new MessageContentsList();
+                Object en = message.getContextualProperty(Message.SCHEMA_VALIDATION_ENABLED);
+                // set the validate option for XMLBeans Wrapper Helper
+                if (Boolean.TRUE.equals(en) || "true".equals(en)) {
+                    try {                        
+                        Class xmlBeanWrapperHelperClass = 
+                            Class.forName("org.apache.cxf.xmlbeans.XmlBeansWrapperHelper");
+                        if (xmlBeanWrapperHelperClass.isInstance(helper)) {
+                            Method method = xmlBeanWrapperHelperClass.getMethod("setValidate", boolean.class);
+                            method.invoke(helper, true);
+                        }
+                    } catch (Exception exception) {
+                        // do nothing there
+                    }
+                }
                 Object o2 = helper.createWrapperObject(objs);
                 newObjs.put(parts.get(0), o2);
                 
@@ -113,6 +114,7 @@
 
                 message.setContent(List.class, newObjs);
             } catch (Exception e) {
+                e.printStackTrace();
                 throw new Fault(e);
             }
             
@@ -136,4 +138,36 @@
             lst.add(null);
         }
     }
+    
+    private WrapperHelper createWrapperHelper(WrapperCapableDatabinding dataBinding, 
+                                              MessageInfo messageInfo,
+                                              MessageInfo wrappedMessageInfo,
+                                              Class<?> wrapperClass) {
+        List<String> partNames = new ArrayList<String>();
+        List<String> elTypeNames = new ArrayList<String>();
+        List<Class<?>> partClasses = new ArrayList<Class<?>>();
+        
+        for (MessagePartInfo p : messageInfo.getMessageParts()) {
+            ensureSize(partNames, p.getIndex());
+            ensureSize(elTypeNames, p.getIndex());
+            ensureSize(partClasses, p.getIndex());
+            
+            partNames.set(p.getIndex(), p.getName().getLocalPart());
+            
+            String elementType = null;
+            if (p.getTypeQName() == null) {
+                // handling anonymous complex type
+                elementType = null;
+            } else {
+                elementType = p.getTypeQName().getLocalPart();
+            }
+            
+            elTypeNames.set(p.getIndex(), elementType);
+            partClasses.set(p.getIndex(), p.getTypeClass());
+        }
+        return dataBinding.createWrapperHelper(wrapperClass,
+                                                 partNames,
+                                                 elTypeNames,
+                                                 partClasses);
+    }
 }

Modified: cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/WrapperClassGeneratorTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/WrapperClassGeneratorTest.java?rev=755153&r1=755152&r2=755153&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/WrapperClassGeneratorTest.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/WrapperClassGeneratorTest.java Tue Mar 17 08:47:06 2009
@@ -27,7 +27,8 @@
 import javax.xml.bind.Marshaller;
 
 import org.apache.cxf.BusFactory;
-import org.apache.cxf.jaxws.interceptors.WrapperHelper;
+import org.apache.cxf.databinding.WrapperHelper;
+import org.apache.cxf.jaxb.JAXBDataBinding;
 import org.apache.cxf.jaxws.service.AddNumbersImpl;
 import org.apache.cxf.jaxws.support.JaxWsImplementorInfo;
 import org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean;
@@ -69,7 +70,7 @@
         String className = requestClass.getName();
         className = className.substring(0, className.lastIndexOf(".") + 1);
         
-        WrapperHelper wh = WrapperHelper.createWrapperHelper(requestClass,
+        WrapperHelper wh = new JAXBDataBinding().createWrapperHelper(requestClass,
                                                              partNames, elTypeNames, partClasses);        
         
         List<Object> paraList = new ArrayList<Object>();
@@ -88,7 +89,7 @@
         className = responseClass.getName();
         className = className.substring(0, className.lastIndexOf(".") + 1);
         
-        wh = WrapperHelper.createWrapperHelper(responseClass,
+        wh = new JAXBDataBinding().createWrapperHelper(responseClass,
                                                              partNames, elTypeNames, partClasses);        
         List<Object> resPara = new ArrayList<Object>();
         List<Integer> intValueList = new ArrayList<Integer>();