You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2007/05/11 00:18:30 UTC

svn commit: r537016 - in /incubator/cxf/trunk: common/common/src/main/java/org/apache/cxf/jaxb/WrapperHelper.java rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBEncoderDecoder.java

Author: dkulp
Date: Thu May 10 15:18:29 2007
New Revision: 537016

URL: http://svn.apache.org/viewvc?view=rev&rev=537016
Log:
Minor updates for boolean[] and for "list" types

Modified:
    incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/jaxb/WrapperHelper.java
    incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBEncoderDecoder.java

Modified: incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/jaxb/WrapperHelper.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/jaxb/WrapperHelper.java?view=diff&rev=537016&r1=537015&r2=537016
==============================================================================
--- incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/jaxb/WrapperHelper.java (original)
+++ incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/jaxb/WrapperHelper.java Thu May 10 15:18:29 2007
@@ -193,7 +193,9 @@
             accessor2 = "get_return";
         }
 
-        if (elementType != null && "boolean".equals(elementType.toLowerCase())) {
+        if (elementType != null 
+            && "boolean".equals(elementType.toLowerCase())
+            && !Collection.class.isAssignableFrom(elField.getType())) {
             // JAXB Exception to get the Boolean property
             accessor = accessor.replaceFirst("get", "is");
             accessor2 = accessor2.replaceFirst("get", "is");

Modified: incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBEncoderDecoder.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBEncoderDecoder.java?view=diff&rev=537016&r1=537015&r2=537016
==============================================================================
--- incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBEncoderDecoder.java (original)
+++ incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBEncoderDecoder.java Thu May 10 15:18:29 2007
@@ -23,7 +23,9 @@
 import java.lang.reflect.GenericArrayType;
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
+import java.util.Arrays;
 import java.util.Collection;
+import java.util.List;
 import java.util.ResourceBundle;
 
 import javax.xml.bind.JAXBContext;
@@ -47,6 +49,9 @@
 import org.apache.cxf.common.i18n.Message;
 import org.apache.cxf.interceptor.Fault;
 import org.apache.cxf.service.model.MessagePartInfo;
+import org.apache.ws.commons.schema.XmlSchemaElement;
+import org.apache.ws.commons.schema.XmlSchemaSimpleType;
+import org.apache.ws.commons.schema.XmlSchemaSimpleTypeList;
 
 /**
  * Utility functions for JAXB.
@@ -106,7 +111,19 @@
                 elName = part.getConcreteName();
             }
             
-            if (null != elName && !cls.isAnnotationPresent(XmlRootElement.class)) {
+            if (null != elName
+                && !cls.isAnnotationPresent(XmlRootElement.class)) {
+                
+                if (mObj.getClass().isArray()
+                    && part != null
+                    && part.getXmlSchema() instanceof XmlSchemaElement) {
+                    XmlSchemaElement el = (XmlSchemaElement)part.getXmlSchema();
+                    if (el.getSchemaType() instanceof XmlSchemaSimpleType
+                        && ((XmlSchemaSimpleType)el.getSchemaType()).getContent()
+                            instanceof XmlSchemaSimpleTypeList) {
+                        mObj = Arrays.asList((Object[])mObj);
+                    }
+                }
                 mObj = JAXBElement.class.getConstructor(new Class[] {QName.class, Class.class, Object.class})
                     .newInstance(elName, cls, mObj);
             }
@@ -165,6 +182,7 @@
         return unmarshall(context, schema, source, null, null, true);
     }
 
+    @SuppressWarnings("unchecked")
     public static Object unmarshall(JAXBContext context, 
                                     Schema schema, 
                                     Object source,
@@ -173,6 +191,26 @@
                                     boolean unwrap) {
         Class<?> clazz = part != null ? (Class) part.getTypeClass() : null;
         QName elName = part != null ? part.getConcreteName() : null;
+        if (clazz != null
+            && clazz.isArray()
+            && part != null 
+            && part.getXmlSchema() instanceof XmlSchemaElement) {
+            XmlSchemaElement el = (XmlSchemaElement)part.getXmlSchema();
+            if (el.getSchemaType() instanceof XmlSchemaSimpleType
+                && ((XmlSchemaSimpleType)el.getSchemaType()).getContent()
+                    instanceof XmlSchemaSimpleTypeList) {
+                
+                Object obj = unmarshall(context, schema, source, elName, null, au, unwrap);
+                if (clazz.isArray()
+                    && obj instanceof List) {
+                    return ((List)obj).toArray((Object[])Array.newInstance(clazz.getComponentType(),
+                                                                 ((List)obj).size()));
+                }
+                    
+                
+                return obj;
+            }
+        }
 
         return unmarshall(context, schema, source, elName, clazz, au, unwrap);
     }