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 2010/09/29 22:46:34 UTC

svn commit: r1002841 - in /cxf/trunk: rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/ rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/

Author: dkulp
Date: Wed Sep 29 20:46:34 2010
New Revision: 1002841

URL: http://svn.apache.org/viewvc?rev=1002841&view=rev
Log:
Fix an issue of using an @XmlList with a doc/lit/bare service

Modified:
    cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBSchemaInitializer.java
    cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java
    cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ClientServerMiscTest.java
    cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/DocLitBareCodeFirstService.java
    cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/DocLitBareCodeFirstServiceImpl.java

Modified: cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBSchemaInitializer.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBSchemaInitializer.java?rev=1002841&r1=1002840&r2=1002841&view=diff
==============================================================================
--- cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBSchemaInitializer.java (original)
+++ cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBSchemaInitializer.java Wed Sep 29 20:46:34 2010
@@ -32,6 +32,7 @@ import java.util.logging.Logger;
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlList;
 import javax.xml.bind.annotation.adapters.XmlAdapter;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 import javax.xml.namespace.QName;
@@ -54,6 +55,9 @@ import org.apache.ws.commons.schema.XmlS
 import org.apache.ws.commons.schema.XmlSchemaForm;
 import org.apache.ws.commons.schema.XmlSchemaObject;
 import org.apache.ws.commons.schema.XmlSchemaSequence;
+import org.apache.ws.commons.schema.XmlSchemaSimpleType;
+import org.apache.ws.commons.schema.XmlSchemaSimpleTypeList;
+import org.apache.ws.commons.schema.XmlSchemaType;
 import org.apache.ws.commons.schema.utils.NamespaceMap;
 
 /**
@@ -139,8 +143,20 @@ class JAXBSchemaInitializer extends Serv
         }
 
         boolean isFromWrapper = part.getMessageInfo().getOperation().isUnwrapped();
-        if (isFromWrapper && clazz.isArray() && !Byte.TYPE.equals(clazz.getComponentType())) {
-            clazz = clazz.getComponentType();
+        boolean isList = false;
+        if (clazz.isArray()) {
+            if (isFromWrapper && !Byte.TYPE.equals(clazz.getComponentType())) {
+                clazz = clazz.getComponentType();
+            } else if (!isFromWrapper) {
+                Annotation[] anns = (Annotation[])part.getProperty("parameter.annotations");
+                for (Annotation a : anns) {
+                    if (a instanceof XmlList) {
+                        part.setProperty("honor.jaxb.annotations", Boolean.TRUE);
+                        clazz = clazz.getComponentType();
+                        isList = true;
+                    }
+                }
+            }
         }
 
         JAXBBeanInfo beanInfo = getBeanInfo(clazz);
@@ -203,8 +219,21 @@ class JAXBSchemaInitializer extends Serv
         } else  {
             QName typeName = getTypeName(beanInfo);
             if (typeName != null) {
-                part.setTypeQName(typeName);
-                part.setXmlSchema(schemas.getTypeByQName(typeName));
+                XmlSchemaType type = schemas.getTypeByQName(typeName);
+                if  (isList && type instanceof XmlSchemaSimpleType) {
+                    XmlSchemaSimpleType simpleType = new XmlSchemaSimpleType(null);
+                    XmlSchemaSimpleTypeList list = new XmlSchemaSimpleTypeList();
+                    XmlSchemaSimpleType stype = (XmlSchemaSimpleType)type;
+                    list.setItemTypeName(stype.getQName());
+                    simpleType.setContent(list);
+                    part.setXmlSchema(simpleType);
+                    if (part.getConcreteName() == null) {
+                        part.setConcreteName(new QName(null, part.getName().getLocalPart()));
+                    }
+                } else {
+                    part.setTypeQName(typeName);
+                    part.setXmlSchema(type);
+                }
             }
         }
     }

Modified: cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java?rev=1002841&r1=1002840&r2=1002841&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java (original)
+++ cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java Wed Sep 29 20:46:34 2010
@@ -1176,16 +1176,22 @@ public class ReflectionServiceFactoryBea
                 mpi.setConcreteName(qname);
                 continue;
             } else {
-                if (null == mpi.getTypeQName()) {
+                if (null == mpi.getTypeQName() && mpi.getXmlSchema() == null) {
                     throw new ServiceConstructionException(new Message("UNMAPPABLE_PORT_TYPE", LOG,
                                                                        method.getDeclaringClass().getName(),
                                                                        method.getName(),
                                                                        mpi.getName()));
                 }
-                el.setSchemaTypeName(mpi.getTypeQName());
+                if (mpi.getTypeQName() != null) {
+                    el.setSchemaTypeName(mpi.getTypeQName());
+                } else {
+                    el.setSchemaType((XmlSchemaType)mpi.getXmlSchema());
+                }
                 mpi.setXmlSchema(el);
                 mpi.setConcreteName(qname);
-                addImport(schema, mpi.getTypeQName().getNamespaceURI());
+                if (mpi.getTypeQName() != null) {
+                    addImport(schema, mpi.getTypeQName().getNamespaceURI());
+                }
             }
 
             mpi.setElement(true);

Modified: cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ClientServerMiscTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ClientServerMiscTest.java?rev=1002841&r1=1002840&r2=1002841&view=diff
==============================================================================
--- cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ClientServerMiscTest.java (original)
+++ cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ClientServerMiscTest.java Wed Sep 29 20:46:34 2010
@@ -22,6 +22,7 @@ package org.apache.cxf.systest.jaxws;
 import java.io.InputStream;
 import java.lang.reflect.Field;
 import java.lang.reflect.UndeclaredThrowableException;
+import java.math.BigInteger;
 import java.net.HttpURLConnection;
 import java.net.URL;
 import java.util.ArrayList;
@@ -184,12 +185,20 @@ public class ClientServerMiscTest extend
                                   DocLitBareCodeFirstService.class);
         DocLitBareCodeFirstService.GreetMeRequest req = 
             new DocLitBareCodeFirstService.GreetMeRequest();
-        req.setName("Foo");
-        DocLitBareCodeFirstService.GreetMeResponse resp =
-            port.greetMe(req);
+        DocLitBareCodeFirstService.GreetMeResponse resp;
+        BigInteger i[];
         
+        req.setName("Foo");
+        resp = port.greetMe(req);
         assertEquals(req.getName(), resp.getName());
         
+        i = port.sayTest(new DocLitBareCodeFirstService.SayTestRequest("Dan"));
+        assertEquals(4, i.length);
+        assertEquals(0, i[0].intValue());
+        assertEquals(1, i[1].intValue());
+        assertEquals(2, i[2].intValue());
+        assertEquals(3, i[3].intValue());
+        
         //try with wsdl
         service = Service.create(new URL(ServerMisc.DOCLITBARE_CODEFIRST_URL + "?wsdl"),
                                          servName);

Modified: cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/DocLitBareCodeFirstService.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/DocLitBareCodeFirstService.java?rev=1002841&r1=1002840&r2=1002841&view=diff
==============================================================================
--- cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/DocLitBareCodeFirstService.java (original)
+++ cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/DocLitBareCodeFirstService.java Wed Sep 29 20:46:34 2010
@@ -26,9 +26,11 @@ import javax.jws.soap.SOAPBinding;
 
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlList;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
 
+
 @WebService(name = "DocLitBareCodeFirstService",
             targetNamespace = "http://cxf.apache.org/systest/jaxws/DocLitBareCodeFirstService")
 @SOAPBinding(style = SOAPBinding.Style.DOCUMENT,
@@ -43,6 +45,37 @@ public interface DocLitBareCodeFirstServ
                   GreetMeRequest gmr); 
     
     
+    @XmlList
+    @WebResult(name = "Items", targetNamespace = "http://namespace/result", partName = "parameter")
+    @WebMethod
+    java.math.BigInteger[] sayTest(
+        @WebParam(partName = "parameter", name = "SayTestRequest", targetNamespace = "http://www.tum.de/test")
+        SayTestRequest parameter
+    );
+    
+    
+    @XmlAccessorType(XmlAccessType.FIELD) 
+    @XmlType(name = "SayTestRequest", 
+             namespace = "http://cxf.apache.org/test/request/bare", 
+             propOrder = { "name" }) 
+    @XmlRootElement(namespace = "http://cxf.apache.org/test/request/bare",
+                    name = "SayTestObject") 
+    static class SayTestRequest  {
+        String name;
+        
+        public SayTestRequest() {
+        }
+        public SayTestRequest(String n) {
+            name = n;
+        }
+        
+        public void setName(String n) {
+            name = n;
+        }
+        public String getName() {
+            return name;
+        }
+    }
     @XmlAccessorType(XmlAccessType.FIELD) 
     @XmlType(name = "GreetMeRequest", 
              namespace = "http://cxf.apache.org/test/request/bare", 

Modified: cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/DocLitBareCodeFirstServiceImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/DocLitBareCodeFirstServiceImpl.java?rev=1002841&r1=1002840&r2=1002841&view=diff
==============================================================================
--- cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/DocLitBareCodeFirstServiceImpl.java (original)
+++ cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/DocLitBareCodeFirstServiceImpl.java Wed Sep 29 20:46:34 2010
@@ -19,6 +19,8 @@
 
 package org.apache.cxf.systest.jaxws;
 
+import java.math.BigInteger;
+
 import javax.jws.WebService;
 import javax.xml.namespace.QName;
 import javax.xml.soap.SOAPException;
@@ -54,4 +56,13 @@ public class DocLitBareCodeFirstServiceI
         return resp;
     }
 
+    public BigInteger[] sayTest(SayTestRequest parameter) {
+        return new BigInteger[] {
+            BigInteger.valueOf(0),
+            BigInteger.valueOf(1),
+            BigInteger.valueOf(2),
+            BigInteger.valueOf(3),
+        };
+    }
+
 }