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/11/24 00:12:14 UTC

svn commit: r1038374 - in /cxf/trunk/tools/wsdlto: frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/ frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/validator/ test/src/test/java/org/apa...

Author: dkulp
Date: Tue Nov 23 23:12:13 2010
New Revision: 1038374

URL: http://svn.apache.org/viewvc?rev=1038374&view=rev
Log:
[CXF-3105] Properly map the parameter names specified in the binding
file by checking the message name  as well as the element name.

Added:
    cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/cxf3105/
    cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/cxf3105/cxf3105.wsdl   (with props)
    cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/cxf3105/ws-binding.xml   (with props)
Modified:
    cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/ParameterProcessor.java
    cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/validator/WrapperStyleNameCollisionValidator.java
    cxf/trunk/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenBugTest.java

Modified: cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/ParameterProcessor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/ParameterProcessor.java?rev=1038374&r1=1038373&r2=1038374&view=diff
==============================================================================
--- cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/ParameterProcessor.java (original)
+++ cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/ParameterProcessor.java Tue Nov 23 23:12:13 2010
@@ -239,17 +239,11 @@ public class ParameterProcessor extends 
             && countOutOfBandHeader(inputMessage) == 0) {
             return;
         }
-        JAXWSBinding mBinding = inputMessage.getOperation().getExtensor(JAXWSBinding.class);
         for (QName item : wrappedElements) {
             JavaParameter jp = getParameterFromQName(part.getElementQName(),
                                   item, JavaType.Style.IN, part);
-            if (mBinding != null && mBinding.getJaxwsParas() != null) {
-                for (JAXWSParameter jwsp : mBinding.getJaxwsParas()) {
-                    if (item.equals(jwsp.getElementName())) {
-                        jp.setName(jwsp.getName());
-                    }
-                }
-            }
+            
+            checkPartName(inputMessage, item, jp);
             
             if (StringUtils.isEmpty(part.getConcreteName().getNamespaceURI())) { 
                 jp.setTargetNamespace("");
@@ -479,7 +473,9 @@ public class ParameterProcessor extends 
                         }
                         if (!jpIn.getClassName().equals(jp.getClassName())) {
                             jp.setStyle(JavaType.Style.OUT);
+                            checkPartName(outputMessage, outElement, jp);
                         }
+
                         addParameter(method, jp);
                         sameWrapperChild = true;
                         break;
@@ -492,15 +488,7 @@ public class ParameterProcessor extends 
                 if (!qualified && !isRefElement(outputPart, outElement)) {
                     jp.setTargetNamespace("");
                 }
-                
-                JAXWSBinding mBinding = outputMessage.getOperation().getExtensor(JAXWSBinding.class);
-                if (mBinding != null && mBinding.getJaxwsParas() != null) {
-                    for (JAXWSParameter jwsp : mBinding.getJaxwsParas()) {
-                        if (outElement.equals(jwsp.getElementName())) {
-                            jp.setName(jwsp.getName());
-                        }
-                    }
-                }
+                checkPartName(outputMessage, outElement, jp);
     
                 addParameter(method, jp);
             }
@@ -509,7 +497,17 @@ public class ParameterProcessor extends 
             addVoidReturn(method);
         }
     }
-
+    private void checkPartName(MessageInfo message, QName element, JavaParameter jp) {
+        JAXWSBinding mBinding = message.getOperation().getExtensor(JAXWSBinding.class);
+        if (mBinding != null && mBinding.getJaxwsParas() != null) {
+            for (JAXWSParameter jwsp : mBinding.getJaxwsParas()) {
+                if (element.getLocalPart().equals(jwsp.getElementName().getLocalPart())
+                    && jwsp.getMessageName().equals(message.getName().getLocalPart())) {
+                    jp.setName(jwsp.getName());
+                }
+            }
+        }        
+    }
     private void addVoidReturn(JavaMethod method) {
         JavaReturn returnType = new JavaReturn("return", "void", null);
         method.setReturn(returnType);

Modified: cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/validator/WrapperStyleNameCollisionValidator.java
URL: http://svn.apache.org/viewvc/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/validator/WrapperStyleNameCollisionValidator.java?rev=1038374&r1=1038373&r2=1038374&view=diff
==============================================================================
--- cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/validator/WrapperStyleNameCollisionValidator.java (original)
+++ cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/validator/WrapperStyleNameCollisionValidator.java Tue Nov 23 23:12:13 2010
@@ -28,6 +28,7 @@ import javax.xml.namespace.QName;
 import org.apache.cxf.common.i18n.Message;
 import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.service.model.InterfaceInfo;
+import org.apache.cxf.service.model.MessageInfo;
 import org.apache.cxf.service.model.MessagePartInfo;
 import org.apache.cxf.service.model.OperationInfo;
 import org.apache.cxf.service.model.ServiceInfo;
@@ -35,6 +36,7 @@ import org.apache.cxf.tools.common.ToolC
 import org.apache.cxf.tools.common.ToolContext;
 import org.apache.cxf.tools.validator.ServiceValidator;
 import org.apache.cxf.tools.wsdlto.frontend.jaxws.customization.JAXWSBinding;
+import org.apache.cxf.tools.wsdlto.frontend.jaxws.customization.JAXWSParameter;
 import org.apache.cxf.tools.wsdlto.frontend.jaxws.processor.internal.ProcessorUtil;
 import org.apache.cxf.tools.wsdlto.frontend.jaxws.processor.internal.WrapperElement;
 
@@ -105,17 +107,21 @@ public class WrapperStyleNameCollisionVa
             output = operation.getOutput().getMessageParts().iterator().next();
         }
         if (!c) {
-            Map<QName, QName> names = new HashMap<QName, QName>();
+            Map<String, QName> names = new HashMap<String, QName>();
             if (input != null) {
                 for (WrapperElement element : ProcessorUtil.getWrappedElement(context, 
                                                                               input.getElementQName())) {
-                    if (names.containsKey(element.getElementName())
-                        &&  (names.get(element.getElementName()) == element.getSchemaTypeName()
-                            || names.get(element.getElementName()).equals(element.getSchemaTypeName()))) {
-                        handleErrors(names.get(element.getElementName()), element);
+                    
+                    String mappedName = mapElementName(operation,
+                                                      operation.getUnwrappedOperation().getInput(),
+                                                      element);
+                    if (names.containsKey(mappedName)
+                        &&  (names.get(mappedName) == element.getSchemaTypeName()
+                            || names.get(mappedName).equals(element.getSchemaTypeName()))) {
+                        handleErrors(names.get(mappedName), element);
                         return false;
                     } else {
-                        names.put(element.getElementName(), element.getSchemaTypeName());
+                        names.put(mappedName, element.getSchemaTypeName());
                     }
                 }
             }
@@ -124,13 +130,16 @@ public class WrapperStyleNameCollisionVa
                 List<WrapperElement> els = ProcessorUtil.getWrappedElement(context, output.getElementQName());
                 if (els.size() > 1) {
                     for (WrapperElement element : els) {
-                        if (names.containsKey(element.getElementName())
-                            &&  !(names.get(element.getElementName()) == element.getSchemaTypeName()
-                                || names.get(element.getElementName()).equals(element.getSchemaTypeName()))) {
-                            handleErrors(names.get(element.getElementName()), element);
+                        String mappedName = mapElementName(operation,
+                                                           operation.getUnwrappedOperation().getOutput(),
+                                                           element);
+                        if (names.containsKey(mappedName)
+                            &&  !(names.get(mappedName) == element.getSchemaTypeName()
+                                || names.get(mappedName).equals(element.getSchemaTypeName()))) {
+                            handleErrors(names.get(mappedName), element);
                             return false;
                         } else {
-                            names.put(element.getElementName(), element.getSchemaTypeName());
+                            names.put(mappedName, element.getSchemaTypeName());
                         }
                     }
                 }
@@ -139,6 +148,20 @@ public class WrapperStyleNameCollisionVa
         return true;
     }
 
+    private String mapElementName(OperationInfo op, MessageInfo mi, WrapperElement element) {
+        MessagePartInfo mpi = mi.getMessagePart(element.getElementName());
+        JAXWSBinding bind = op.getExtensor(JAXWSBinding.class);
+        if (bind != null && bind.getJaxwsParas() != null) {
+            for (JAXWSParameter par : bind.getJaxwsParas()) {
+                if (mi.getName().getLocalPart().equals(par.getMessageName())
+                    && mpi.getName().getLocalPart().equals(par.getElementName().getLocalPart())) {
+                    return par.getName();
+                }
+            }
+        }
+        return mpi.getElementQName().getLocalPart();
+    }
+
     private void handleErrors(QName e1, WrapperElement e2) {
         Message msg = new Message("WRAPPER_STYLE_NAME_COLLISION", LOG, 
                                   e2.getElementName(), e1, e2.getSchemaTypeName());

Modified: cxf/trunk/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenBugTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenBugTest.java?rev=1038374&r1=1038373&r2=1038374&view=diff
==============================================================================
--- cxf/trunk/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenBugTest.java (original)
+++ cxf/trunk/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenBugTest.java Tue Nov 23 23:12:13 2010
@@ -1134,4 +1134,21 @@ public class CodeGenBugTest extends Abst
                             "org/apache/cxf/w2j/hello_world_soap_http/TestServiceName1.java").exists());
     }
 
+    
+    @Test
+    public void testCXF3105() throws Exception {
+        String[] args = new String[] {"-d", output.getCanonicalPath(),
+            "-impl", "-server", "-client", 
+            "-b", getLocation("/wsdl2java_wsdl/cxf3105/ws-binding.xml"),
+            getLocation("/wsdl2java_wsdl/cxf3105/cxf3105.wsdl")};
+        WSDLToJava.main(args);
+
+        assertNotNull(output);
+        File f = new File(output, "org/apache/cxf/testcase/cxf3105/Login.java");
+        assertTrue(f.exists());
+        String contents = IOUtils.readStringFromStream(new FileInputStream(f));
+        assertTrue(contents.contains("Loginrequest loginRequest"));
+        assertTrue(contents.contains("<Loginresponse> loginResponse"));
+    }
+
 }

Added: cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/cxf3105/cxf3105.wsdl
URL: http://svn.apache.org/viewvc/cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/cxf3105/cxf3105.wsdl?rev=1038374&view=auto
==============================================================================
--- cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/cxf3105/cxf3105.wsdl (added)
+++ cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/cxf3105/cxf3105.wsdl Tue Nov 23 23:12:13 2010
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<wsdl:definitions xmlns:fc="http://cxf.apache.org/testcase/cxf3105" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="center" targetNamespace="http://cxf.apache.org/testcase/cxf3105">
+    <wsdl:types>
+        <xsd:schema targetNamespace="http://cxf.apache.org/testcase/cxf3105">
+            <xsd:complexType name="loginrequest">
+                <xsd:sequence>
+                    <xsd:element name="username" type="xsd:string"/>
+                    <xsd:element name="password" type="xsd:string"/>
+                </xsd:sequence>
+            </xsd:complexType>
+            <xsd:complexType name="loginresponse">
+                <xsd:sequence>
+                    <xsd:element name="userid" type="xsd:int"/>
+                    <xsd:element name="groupid" type="xsd:int"/>
+                </xsd:sequence>
+            </xsd:complexType>
+            
+
+            <xsd:element name="login">
+                <xsd:complexType>
+                    <xsd:sequence>
+                        <xsd:element name="login" type="fc:loginrequest"/>
+                        <xsd:element name="id" type="xsd:int" maxOccurs="1" minOccurs="0"/>
+                    </xsd:sequence>
+                </xsd:complexType>
+            </xsd:element>
+            <xsd:element name="loginResponse">
+                <xsd:complexType>
+                    <xsd:sequence>
+                        <xsd:element name="login" type="fc:loginresponse"/>
+                        <xsd:element name="password_temp" type="xsd:string"/>
+                    </xsd:sequence>
+                </xsd:complexType>
+            </xsd:element>
+        </xsd:schema>
+    </wsdl:types>
+
+    <wsdl:message name="loginRequest">
+        <wsdl:part name="parameters" element="fc:login"/>
+    </wsdl:message>
+    <wsdl:message name="loginResponse">
+        <wsdl:part name="parameters" element="fc:loginResponse"/>
+    </wsdl:message>
+    
+
+    <wsdl:portType name="Login">
+        <wsdl:operation name="login">
+            <wsdl:input message="fc:loginRequest"/>
+            <wsdl:output message="fc:loginResponse"/>
+        </wsdl:operation>
+    </wsdl:portType>
+    <wsdl:binding name="Login" type="fc:Login">
+        <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
+
+        <wsdl:operation name="login">
+            <soap:operation soapAction="http://cxf.apache.org/testcase/cxf3105login"/>
+            <wsdl:input>
+                <soap:body use="literal"/>
+            </wsdl:input>
+            <wsdl:output>
+                <soap:body use="literal"/>
+            </wsdl:output>
+        </wsdl:operation>
+    </wsdl:binding>
+    <wsdl:service name="Login">
+        <wsdl:port binding="fc:Login" name="center">
+            <soap:address location="http://localhost:9000/"/>
+        </wsdl:port>
+    </wsdl:service>
+
+</wsdl:definitions>
\ No newline at end of file

Propchange: cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/cxf3105/cxf3105.wsdl
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/cxf3105/cxf3105.wsdl
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/cxf3105/cxf3105.wsdl
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Added: cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/cxf3105/ws-binding.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/cxf3105/ws-binding.xml?rev=1038374&view=auto
==============================================================================
--- cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/cxf3105/ws-binding.xml (added)
+++ cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/cxf3105/ws-binding.xml Tue Nov 23 23:12:13 2010
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<jaxws:bindings wsdlLocation="cxf3105.wsdl"
+          xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"
+          xmlns:xs="http://www.w3.org/2001/XMLSchema"
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
+          xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+          xmlns:fc="http://cxf.apache.org/testcase/cxf3105"
+          xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd
+          	http://java.sun.com/xml/ns/jaxws http://java.sun.com/xml/ns/jaxws/wsdl_customizationschema_2_0.xsd">
+  <jaxws:bindings node="wsdl:definitions/wsdl:types/xs:schema">
+  	<jaxb:bindings node="xs:element//xs:element[@name='login' and @type='fc:loginrequest']">
+  		<jaxb:property name="LoginRequest"/>
+  	</jaxb:bindings>
+  	<jaxb:bindings node="xs:element//xs:element[@name='login' and @type='fc:loginresponse']">
+  		<jaxb:property name="LoginResponse"/>
+  	</jaxb:bindings>
+  	<jaxb:bindings node="xs:element[@name='login']">
+  		<jaxb:class name="LoginRequest"/>
+  	</jaxb:bindings>
+  </jaxws:bindings>
+  
+  
+  
+  <jaxws:bindings node="wsdl:definitions/wsdl:portType[@name='Login']/wsdl:operation[@name='login']">
+  	<jaxws:parameter part="wsdl:definitions/wsdl:message[@name='loginRequest']/wsdl:part[@name='parameters']" childElementName="login" name="loginRequest"/>
+  	<jaxws:parameter part="wsdl:definitions/wsdl:message[@name='loginResponse']/wsdl:part[@name='parameters']" childElementName="login" name="loginResponse"/>
+  </jaxws:bindings>
+  
+  <jaxws:enableWrapperStyle>true</jaxws:enableWrapperStyle>
+</jaxws:bindings>

Propchange: cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/cxf3105/ws-binding.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/cxf3105/ws-binding.xml
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/cxf3105/ws-binding.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml