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 2011/05/26 22:52:52 UTC

svn commit: r1128077 - in /cxf/trunk/rt/frontend: jaxws/src/test/java/org/apache/cxf/jaxws/CodeFirstTest.java simple/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java

Author: dkulp
Date: Thu May 26 20:52:51 2011
New Revision: 1128077

URL: http://svn.apache.org/viewvc?rev=1128077&view=rev
Log:
[CXF-2766] Fix issue with code first services that have parts starting
with "return" not honoring the partnames correctly.

Modified:
    cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/CodeFirstTest.java
    cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java

Modified: cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/CodeFirstTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/CodeFirstTest.java?rev=1128077&r1=1128076&r2=1128077&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/CodeFirstTest.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/CodeFirstTest.java Thu May 26 20:52:51 2011
@@ -24,6 +24,9 @@ import java.util.Collection;
 import java.util.List;
 import java.util.concurrent.Executor;
 
+import javax.jws.WebMethod;
+import javax.jws.WebParam;
+import javax.jws.WebResult;
 import javax.jws.WebService;
 import javax.jws.soap.SOAPBinding;
 import javax.wsdl.Definition;
@@ -65,6 +68,7 @@ import org.junit.Test;
 
 
 public class CodeFirstTest extends AbstractJaxWsTest {
+
     String address = "local://localhost:9000/Hello";
     
     @Test
@@ -469,4 +473,54 @@ public class CodeFirstTest extends Abstr
             return message;
         }
     }
+    
+    @Test
+    public void testCXF2766() throws Exception {
+        JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean(); 
+        factory.setServiceClass(CXF2766.class); 
+        factory.setServiceBean(new CXF2766Impl()); 
+        factory.setAddress("local://localhost/testcxf2766"); 
+        Server server = factory.create();
+        server.getEndpoint().getInInterceptors().add(new LoggingInInterceptor());
+        server.getEndpoint().getOutInterceptors().add(new LoggingOutInterceptor());
+        Document doc = getWSDLDocument(server);
+        //org.apache.cxf.helpers.XMLUtils.printDOM(doc);
+        assertValid("//wsdl:message[@name='doReturnResponse']/wsdl:part[@name='returnResponse']", doc);
+        
+        QName serviceName = new QName("http://cxf.apache.org/service.wsdl", "BareService");
+        QName portName = new QName("http://cxf.apache.org/service.wsdl", "BarePort");
+
+        ServiceImpl service = new ServiceImpl(getBus(), (URL)null, serviceName, null);
+        service.addPort(portName, "http://schemas.xmlsoap.org/soap/",
+                        "local://localhost/testcxf2766"); 
+        CXF2766 proxy = service.getPort(portName, CXF2766.class);
+        proxy.doReturn(new ReturnRequestType());
+    }
+    @WebService(targetNamespace = "http://cxf.apache.org/service.wsdl")
+    @SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
+    public static interface CXF2766 {
+        @WebResult(name = "return-response", 
+                   targetNamespace = "http://cxf.apache.org/service.wsdl/types",
+                   partName = "returnResponse")
+        @WebMethod(action = "http://cxf.apache.org/doReturn")
+        ReturnResponseType 
+        doReturn(@WebParam(partName = "returnTrx",
+                           name = "return-request", 
+                           targetNamespace = "http://cxf.apache.org/service.wsdl/types")
+                           ReturnRequestType returnTrx);
+    }
+    @WebService(targetNamespace = "http://cxf.apache.org/service.wsdl")
+    public static class CXF2766Impl implements CXF2766 {
+        public ReturnResponseType doReturn(ReturnRequestType returnTrx) {
+            return new ReturnResponseType();
+        }
+    }
+    
+    @XmlType(name = "ReturnRequestType", namespace = "http://cxf.apache.org/service.wsdl/types")
+    public static class ReturnRequestType {
+    }
+    @XmlType(name = "ReturnResponseType", namespace = "http://cxf.apache.org/service.wsdl/types")
+    public static class ReturnResponseType {
+    }
+
 }

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=1128077&r1=1128076&r2=1128077&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 Thu May 26 20:52:51 2011
@@ -1101,18 +1101,16 @@ public class ReflectionServiceFactoryBea
             XmlSchema schema = null;
 
             QName qname = (QName)mpi.getProperty(ELEMENT_NAME);
-            if (message.getMessageParts().size() == 1) {
-                qname = qname == null && !isOut ? getInParameterName(opInfo, method, -1) : qname;
-                qname = qname == null && isOut ? getOutParameterName(opInfo, method, -1) : qname;
+            if (message.getMessageParts().size() == 1 && qname == null) {
+                qname = !isOut ? getInParameterName(opInfo, method, -1) 
+                        : getOutParameterName(opInfo, method, -1);
+                
                 if (qname.getLocalPart().startsWith("arg") || qname.getLocalPart().startsWith("return")) {
                     qname = isOut
                         ? new QName(qname.getNamespaceURI(), method.getName() + "Response") : new QName(qname
                             .getNamespaceURI(), method.getName());
                 }
-
-            }
-
-            if (isOut && message.getMessageParts().size() > 1 && qname == null) {
+            } else if (isOut && message.getMessageParts().size() > 1 && qname == null) {
                 while (!isOutParam(method, paraNumber)) {
                     paraNumber++;
                 }