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 2008/12/03 20:24:56 UTC

svn commit: r723024 - in /cxf/trunk: rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ systests/src/test/java/org/apache/cxf/systest/jaxws/

Author: dkulp
Date: Wed Dec  3 11:24:56 2008
New Revision: 723024

URL: http://svn.apache.org/viewvc?rev=723024&view=rev
Log:
[CXF-1930] Fix for anonymous wrappers when asm is found

Modified:
    cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/WrapperClassGenerator.java
    cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerMiscTest.java
    cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ServerMisc.java

Modified: cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/WrapperClassGenerator.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/WrapperClassGenerator.java?rev=723024&r1=723023&r2=723024&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/WrapperClassGenerator.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/WrapperClassGenerator.java Wed Dec  3 11:24:56 2008
@@ -161,14 +161,17 @@
                                         boolean isRequest) {
 
         QName wrapperElement = messageInfo.getName();
+        
+        boolean anonymous = factory.getAnonymousWrapperTypes();
 
         ClassWriter cw = createClassWriter();
-        String className = getPackageName(method) + ".jaxws_asm." 
+        String pkg = getPackageName(method) + ".jaxws_asm" + (anonymous ? "_an" : "");
+        String className =  pkg + "." 
             + StringUtils.capitalize(op.getName().getLocalPart());
         if (!isRequest) {
             className = className + "Response";
         }
-        String pname = getPackageName(method) + ".jaxws_asm.package-info";
+        String pname = pkg + ".package-info";
         Class<?> def = findClass(pname, method.getDeclaringClass());
         if (def == null) {
             generatePackageInfo(pname, wrapperElement.getNamespaceURI(),
@@ -195,8 +198,12 @@
         av0.visitEnd();
 
         av0 = cw.visitAnnotation("Ljavax/xml/bind/annotation/XmlType;", true);
-        av0.visit("name", wrapperElement.getLocalPart());
-        av0.visit("namespace", wrapperElement.getNamespaceURI());
+        if (!anonymous) {
+            av0.visit("name", wrapperElement.getLocalPart());
+            av0.visit("namespace", wrapperElement.getNamespaceURI());
+        } else {
+            av0.visit("name", "");            
+        }
         av0.visitEnd();
 
         // add constructor

Modified: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerMiscTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerMiscTest.java?rev=723024&r1=723023&r2=723024&view=diff
==============================================================================
--- cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerMiscTest.java (original)
+++ cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerMiscTest.java Wed Dec  3 11:24:56 2008
@@ -19,12 +19,16 @@
 
 package org.apache.cxf.systest.jaxws;
 
+import java.io.InputStream;
 import java.lang.reflect.UndeclaredThrowableException;
+import java.net.HttpURLConnection;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import javax.xml.namespace.QName;
@@ -32,6 +36,10 @@
 import javax.xml.ws.Service;
 import javax.xml.ws.soap.SOAPBinding;
 import javax.xml.ws.soap.SOAPFaultException;
+import javax.xml.xpath.XPathConstants;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
 
 import org.apache.cxf.anonymous_complex_type.AnonymousComplexType;
 import org.apache.cxf.anonymous_complex_type.AnonymousComplexTypeService;
@@ -39,7 +47,10 @@
 import org.apache.cxf.anonymous_complex_type.RefSplitNameResponse;
 import org.apache.cxf.anonymous_complex_type.SplitName;
 import org.apache.cxf.anonymous_complex_type.SplitNameResponse.Names;
+import org.apache.cxf.binding.soap.Soap11;
 import org.apache.cxf.frontend.ClientProxyFactoryBean;
+import org.apache.cxf.helpers.XMLUtils;
+import org.apache.cxf.helpers.XPathUtils;
 import org.apache.cxf.jaxb_element_test.JaxbElementTest;
 import org.apache.cxf.jaxb_element_test.JaxbElementTest_Service;
 import org.apache.cxf.ordered_param_holder.ComplexStruct;
@@ -556,4 +567,44 @@
         assertEquals(2, port.operationInSub1(2));
         assertEquals(3, port.operationInSub2(3));
     }
+    
+    
+    
+    @Test
+    public void testAnonymousMinOccursConfig() throws Exception {
+        HttpURLConnection httpConnection = 
+            getHttpConnection(ServerMisc.DOCLIT_CODEFIRST_SETTINGS_URL + "?wsdl");    
+        httpConnection.connect();        
+        
+        assertEquals(200, httpConnection.getResponseCode());
+        assertEquals("OK", httpConnection.getResponseMessage());
+        InputStream in = httpConnection.getInputStream();
+        assertNotNull(in);
+        
+        Document doc = XMLUtils.parse(in);
+        assertNotNull(doc);
+        
+        
+        Map<String, String> ns = new HashMap<String, String>();
+        ns.put("soap", Soap11.SOAP_NAMESPACE);
+        ns.put("tns", "http://cxf.apache.org/systest/jaxws/DocLitWrappedCodeFirstService");
+        ns.put("wsdl", "http://schemas.xmlsoap.org/wsdl/");
+        ns.put("xs", "http://www.w3.org/2001/XMLSchema");
+        
+        
+        XPathUtils xu = new XPathUtils(ns);
+        
+        //make sure the wrapper types are anonymous types
+        Node ct = (Node) xu.getValue("//wsdl:definitions/wsdl:types/xs:schema"
+                                     + "/xs:element[@name='getFooSetResponse']/xs:complexType/xs:sequence",
+                                     doc, XPathConstants.NODE);
+        assertNotNull(ct);
+        
+        //make sure the params are nillable, not minOccurs=0
+        ct = (Node) xu.getValue("//wsdl:definitions/wsdl:types/xs:schema"
+                                + "/xs:element[@name='multiInOut']/xs:complexType/xs:sequence"
+                                + "/xs:element[@nillable='true']",
+                                doc, XPathConstants.NODE);
+        assertNotNull(ct);
+    }
 }

Modified: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ServerMisc.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ServerMisc.java?rev=723024&r1=723023&r2=723024&view=diff
==============================================================================
--- cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ServerMisc.java (original)
+++ cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ServerMisc.java Wed Dec  3 11:24:56 2008
@@ -26,9 +26,11 @@
 import org.apache.cxf.jaxws.JAXWSMethodInvoker;
 import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
 import org.apache.cxf.ordered_param_holder.OrderedParamHolderImpl;
+import org.apache.cxf.service.factory.AbstractServiceConfiguration;
 import org.apache.cxf.service.invoker.Factory;
 import org.apache.cxf.service.invoker.PerRequestFactory;
 import org.apache.cxf.service.invoker.PooledFactory;
+import org.apache.cxf.service.model.MessagePartInfo;
 import org.apache.cxf.testutil.common.AbstractBusTestServerBase;
 
 
@@ -41,6 +43,8 @@
         "http://localhost:9003/DocLitWrappedCodeFirstServiceBaseService/";
     public static final String DOCLITBARE_CODEFIRST_URL = 
         "http://localhost:9003/DocLitBareCodeFirstService/";
+    public static final String DOCLIT_CODEFIRST_SETTINGS_URL = 
+        "http://localhost:9003/DocLitWrappedCodeFirstServiceSettings/";
     
     protected void run() {
         
@@ -48,11 +52,28 @@
         factory = new PooledFactory(factory, 4);
         
         JAXWSMethodInvoker invoker = new JAXWSMethodInvoker(factory);
-        JaxWsServerFactoryBean factoryBean = new JaxWsServerFactoryBean();
+        JaxWsServerFactoryBean factoryBean;
+        
+        factoryBean = new JaxWsServerFactoryBean();
         factoryBean.setAddress(DOCLIT_CODEFIRST_URL);
         factoryBean.setServiceClass(DocLitWrappedCodeFirstServiceImpl.class);
         factoryBean.setInvoker(invoker);
         factoryBean.create();
+        
+        factoryBean = new JaxWsServerFactoryBean();
+        factoryBean.setAddress(DOCLIT_CODEFIRST_SETTINGS_URL);
+        factoryBean.setServiceClass(DocLitWrappedCodeFirstServiceImpl.class);
+        factoryBean.setInvoker(invoker);
+        factoryBean.getServiceFactory().setAnonymousWrapperTypes(true);
+        factoryBean.getServiceFactory().getServiceConfigurations().add(0, new AbstractServiceConfiguration() {
+            public Boolean isWrapperPartNillable(MessagePartInfo mpi) {
+                return Boolean.TRUE;
+            }
+            public Long getWrapperPartMinOccurs(MessagePartInfo mpi) {
+                return Long.valueOf(1L);
+            }
+        });
+        factoryBean.create();
          
         //Object implementor4 = new DocLitWrappedCodeFirstServiceImpl();
         //Endpoint.publish(DOCLIT_CODEFIRST_URL, implementor4);