cxf-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ningji...@apache.org
Subject svn commit: r751576 - in /cxf/trunk/rt: databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/ frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/
Date Mon, 09 Mar 2009 02:48:03 GMT
Author: ningjiang
Date: Mon Mar  9 02:48:02 2009
New Revision: 751576

URL: http://svn.apache.org/viewvc?rev=751576&view=rev
Log:
CXF-2076 get CXF work with the XMLBeans wrapper objects

Modified:
    cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/DataReaderImpl.java
    cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/DataWriterImpl.java
    cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperHelper.java

Modified: cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/DataReaderImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/DataReaderImpl.java?rev=751576&r1=751575&r2=751576&view=diff
==============================================================================
--- cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/DataReaderImpl.java
(original)
+++ cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/DataReaderImpl.java
Mon Mar  9 02:48:02 2009
@@ -70,7 +70,7 @@
                 try {
                     SchemaType st = (SchemaType)part.getProperty(SchemaType.class.getName());
                     XmlOptions options = new XmlOptions();
-                    if (!st.isDocumentType() && !isOutClass) {
+                    if (st != null && !st.isDocumentType() && !isOutClass)
{
                         options.setLoadReplaceDocumentElement(null);
                     }
                     Method meth = c.getMethod("parse", XMLStreamReader.class, XmlOptions.class);
@@ -124,7 +124,7 @@
         return obj;
     }
 
-    public Object read(QName name, XMLStreamReader input, Class type) {
+    public Object read(QName name, XMLStreamReader input, Class type) {        
         return null;
     }
 

Modified: cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/DataWriterImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/DataWriterImpl.java?rev=751576&r1=751575&r2=751576&view=diff
==============================================================================
--- cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/DataWriterImpl.java
(original)
+++ cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/DataWriterImpl.java
Mon Mar  9 02:48:02 2009
@@ -94,7 +94,7 @@
                 }
                 SchemaType st = (SchemaType)part.getProperty(SchemaType.class.getName());
 
-                if (!st.isDocumentType()) {
+                if (st != null && !st.isDocumentType()) {
                     if (StringUtils.isEmpty(part.getConcreteName().getNamespaceURI())) {
                         output.writeStartElement(part.getConcreteName().getLocalPart());
                         

Modified: cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperHelper.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperHelper.java?rev=751576&r1=751575&r2=751576&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperHelper.java
(original)
+++ cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperHelper.java
Mon Mar  9 02:48:02 2009
@@ -45,10 +45,48 @@
 
     public abstract String getSignature();
     
+    private static Class<?> getXMLBeansValueType(Class<?> wrapperType)  {
+        Class<?> result = wrapperType;
+        for (Method method : wrapperType.getMethods()) {
+            if (method.getName().startsWith("addNew")) {                
+                result = method.getReturnType();
+                break;
+            }
+        }
+        return result;
+    }
+    
+    private static Object createXMLBeansValueObject(Class<?> wrapperType) 
+        throws SecurityException, NoSuchMethodException, IllegalArgumentException,
+            IllegalAccessException, InvocationTargetException {
+        
+        Class<?> cls[] = wrapperType.getDeclaredClasses();
+        Method newType = null;
+        for (Method method : wrapperType.getMethods()) {
+            if (method.getName().startsWith("addNew")) {
+                newType = method;                            
+            }
+        }                     
+        Object obj = null;
+        for (Class<?> c : cls) {                        
+            if ("Factory".equals(c.getSimpleName())) {                            
+                Method method = c.getMethod("newInstance", NO_PARAMS); 
+                // create the instance of document type
+                obj = method.invoke(null, NO_PARAMS);
+                // create the value object
+                obj = newType.invoke(obj, NO_PARAMS);
+                break;
+            }
+        }
+        
+        return obj;
+    }
+       
     public static 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());
@@ -78,7 +116,7 @@
         }
         
         for (int x = 0; x < partNames.size(); x++) {
-            String partName = partNames.get(x);
+            String partName = partNames.get(x);            
             if (partName == null) {
                 getMethods.add(null);
                 setMethods.add(null);
@@ -93,13 +131,18 @@
             String setAccessor = JAXBUtils.nameToIdentifier(partName, JAXBUtils.IdentifierType.SETTER);
             Method getMethod = null;
             Method setMethod = null;
-            try {
-                getMethod = wrapperType.getMethod(getAccessor, NO_PARAMS); 
+            Class<?> valueClass = wrapperType;
+            try {               
+                if (wrapperType.isInterface()) {
+                    valueClass = getXMLBeansValueType(wrapperType);
+                    allMethods = valueClass.getMethods();
+                }
+                getMethod = valueClass.getMethod(getAccessor, NO_PARAMS); 
             } catch (NoSuchMethodException ex) {
                 //ignore for now
             }
 
-            Field elField = getElField(partName, wrapperType);
+            Field elField = getElField(partName, valueClass);
             if (getMethod == null
                 && elementType != null
                 && "boolean".equals(elementType.toLowerCase())
@@ -118,10 +161,10 @@
                 && "return".equals(partName)) {
                 //RI generated code uses this
                 try {
-                    getMethod = wrapperType.getMethod("get_return", NO_PARAMS);
+                    getMethod = valueClass.getMethod("get_return", NO_PARAMS);
                 } catch (NoSuchMethodException ex) {
                     try {
-                        getMethod = wrapperType.getMethod("is_return",
+                        getMethod = valueClass.getMethod("is_return",
                                                           new Class[0]);
                     } catch (NoSuchMethodException ex2) {
                         //ignore for now
@@ -204,7 +247,7 @@
         if ("javax.xml.bind.JAXBElement".equals(method.getReturnType().getCanonicalName()))
{
             JAXBElement je = (JAXBElement)method.invoke(in);
             return je == null ? je : je.getValue();
-        } else {
+        } else {            
             return method.invoke(in);
         }
     }
@@ -272,10 +315,13 @@
         }
         public Object createWrapperObject(List<?> lst) 
             throws Fault {
-            
             try {
-                Object ret = wrapperType.newInstance();
-
+                Object value = null;
+                if (wrapperType.isInterface()) {
+                    value = createXMLBeansValueObject(wrapperType);
+                } else {
+                    value = wrapperType.newInstance();
+                }
                 for (int x = 0; x < setMethods.length; x++) {
                     if (getMethods[x] == null
                         && setMethods[x] == null 
@@ -289,38 +335,46 @@
                         o = jaxbObjectMethods[x].invoke(objectFactory, o);
                     }
                     if (o instanceof List) {
-                        List<Object> col = CastUtils.cast((List)getMethods[x].invoke(ret));
+                        List<Object> col = CastUtils.cast((List)getMethods[x].invoke(value));
                         if (col == null) {
                             //broken generated java wrappers
                             if (setMethods[x] != null) {
-                                setMethods[x].invoke(ret, o);
+                                setMethods[x].invoke(value, o);
                             } else {
-                                fields[x].set(ret, lst.get(x));
+                                fields[x].set(value, lst.get(x));
                             }
                         } else {
                             List<Object> olst = CastUtils.cast((List)o);
                             col.addAll(olst);
                         }
-                    } else if (setMethods[x] != null) {
-                        setMethods[x].invoke(ret, o);
+                    } else if (setMethods[x] != null) {                        
+                        setMethods[x].invoke(value, o);
                     } else if (fields[x] != null) {
-                        fields[x].set(ret, lst.get(x));
+                        fields[x].set(value, lst.get(x));
                     }
                 }
-                return ret;
+                return value;
             } catch (Exception ex) {
                 throw new Fault(ex);
             }
         }
         
         public List<Object> getWrapperParts(Object o) throws Fault {
+            Object valueObject = o;
             try {
+                if (wrapperType.isInterface()) {                    
+                    Class<?> valueClass = getXMLBeansValueType(wrapperType);
+                    // we need get the real Object first
+                    Method method = wrapperType.getMethod("get" + valueClass.getSimpleName(),
NO_PARAMS);
+                    valueObject = method.invoke(o, NO_PARAMS);
+                }
+            
                 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], o));
+                        ret.add(getValue(getMethods[x], valueObject));                  
     
                     } else if (fields[x] != null) {
-                        ret.add(fields[x].get(o));
+                        ret.add(fields[x].get(valueObject));
                     } else {
                         //placeholder
                         ret.add(null);



Mime
View raw message