Author: ema
Date: Wed Aug 11 14:12:50 2010
New Revision: 984417

URL: http://svn.apache.org/viewvc?rev=984417&view=rev
Log:
[CXF-2935]:Generate targetNamespace in @WebParam for the wrapped reference 
element

Added:
    cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/cxf2935/
    
cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/cxf2935/webservice.wsdl
Modified:
    
cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java
    
cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/ParameterProcessor.java
    
cxf/trunk/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenBugTest.java

Modified: 
cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java?rev=984417&r1=984416&r2=984417&view=diff
==============================================================================
--- 
cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java 
(original)
+++ 
cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java 
Wed Aug 11 14:12:50 2010
@@ -762,6 +762,7 @@ public class WSDLServiceBuilder {
                     mpi.setElementQName(el.getRefName());
                     mpi.setElement(true);
                     mpi.setXmlSchema(el);
+                    mpi.setProperty("isRefElement", true);
                     // element reference is not permitted for wrapper element
                     if (!allowRefs) {
                         ret = false;

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=984417&r1=984416&r2=984417&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
 Wed Aug 11 14:12:50 2010
@@ -35,6 +35,7 @@ import org.apache.cxf.common.util.String
 import org.apache.cxf.jaxb.JAXBUtils;
 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.tools.common.ToolConstants;
 import org.apache.cxf.tools.common.ToolContext;
 import org.apache.cxf.tools.common.ToolException;
@@ -420,7 +421,8 @@ public class ParameterProcessor extends 
                     }
                     JavaParameter jp = 
getParameterFromQName(outputPart.getElementQName(), outElement,
                                                              
JavaType.Style.INOUT, outputPart);
-                    if (!qualified) {
+                    
+                    if (!qualified && !isRefElement(outputPart, outElement)) {
                         jp.setTargetNamespace("");
                     }
                     if (!jpIn.getClassName().equals(jp.getClassName())) {
@@ -471,7 +473,8 @@ public class ParameterProcessor extends 
                         }
                         JavaParameter jp = 
getParameterFromQName(outputPart.getElementQName(), outElement,
                                                                  
JavaType.Style.INOUT, outputPart);
-                        if (!qualified) {
+                        
+                        if (!qualified && !isRefElement(outputPart, 
outElement)) {
                             jp.setTargetNamespace("");
                         }
                         if (!jpIn.getClassName().equals(jp.getClassName())) {
@@ -486,7 +489,7 @@ public class ParameterProcessor extends 
             if (!sameWrapperChild) {
                 JavaParameter  jp = 
getParameterFromQName(outputPart.getElementQName(), outElement,
                                                           JavaType.Style.OUT, 
outputPart);
-                if (!qualified) {
+                if (!qualified && !isRefElement(outputPart, outElement)) {
                     jp.setTargetNamespace("");
                 }
                 
@@ -801,4 +804,13 @@ public class ParameterProcessor extends 
         }
         return true;
     }
+
+    private boolean isRefElement(MessagePartInfo outputPart, QName outElement) 
{
+        OperationInfo wrappedOp = 
outputPart.getMessageInfo().getOperation().getUnwrappedOperation();
+        MessagePartInfo mpart = 
wrappedOp.getOutput().getMessagePart(outElement);
+        if (mpart == null) {
+            return false;
+        }
+        return mpart.getProperty("isRefElement") != null;
+    }
 }

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=984417&r1=984416&r2=984417&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
 Wed Aug 11 14:12:50 2010
@@ -27,6 +27,7 @@ import java.lang.reflect.Modifier;
 import java.util.Arrays;
 import java.util.List;
 
+import javax.jws.WebParam;
 import javax.jws.WebService;
 import javax.xml.namespace.QName;
 import javax.xml.ws.WebFault;
@@ -51,6 +52,19 @@ import org.junit.Test;
 
 
 public class CodeGenBugTest extends AbstractCodeGenTest {
+ 
+    @Test
+    public void testCXF2935() throws Exception {
+        env.put(ToolConstants.CFG_WSDLURL, 
+                getLocation("/wsdl2java_wsdl/cxf2935/webservice.wsdl"));
+        env.put(ToolConstants.CFG_ALLOW_ELEMENT_REFS, "true");
+        processor.setContext(env);
+        processor.execute();
+        Class<?> clz = 
classLoader.loadClass("org.apache.cxf.WebParamWebService");
+        WebParam webParam = AnnotationUtil.getWebParam(clz.getMethods()[0], 
"Name");       
+        assertEquals("helloString/Name", webParam.targetNamespace());
+          
+    }   
     
     
     @Test

Added: 
cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/cxf2935/webservice.wsdl
URL: 
http://svn.apache.org/viewvc/cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/cxf2935/webservice.wsdl?rev=984417&view=auto
==============================================================================
--- 
cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/cxf2935/webservice.wsdl
 (added)
+++ 
cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/cxf2935/webservice.wsdl
 Wed Aug 11 14:12:50 2010
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements. See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership. The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License. You may obtain a copy of the License at
+ 
+  http://www.apache.org/licenses/LICENSE-2.0
+ 
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied. See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<wsdl:definitions name="webParamWebServiceService"
+       targetNamespace="http://cxf.apache.org"; xmlns:ns1="helloString/Name"
+       xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"; 
xmlns:tns="http://cxf.apache.org";
+       xmlns:xsd="http://www.w3.org/2001/XMLSchema"; 
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";>
+       <wsdl:types>
+               <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema";
+                       xmlns:ns1="helloString/Name"
+                       xmlns:tns="http://cxf.apache.org"; 
attributeFormDefault="unqualified"
+                       elementFormDefault="unqualified" 
targetNamespace="http://cxf.apache.org";>
+                       <xs:import namespace="helloString/Name" />
+                       <xs:element name="helloString" type="tns:helloString"/>
+                       <xs:element name="helloStringResponse" 
type="tns:helloStringResponse"/>
+                       <xs:complexType name="helloString">
+                               <xs:sequence>
+                                       <xs:element minOccurs="0" 
ref="ns1:Name" />
+                               </xs:sequence>
+                       </xs:complexType>
+                       <xs:complexType name="name">
+                               <xs:sequence>
+                                       <xs:element minOccurs="0" 
name="firstName" type="xs:string" />
+                                       <xs:element minOccurs="0" 
name="lastName" type="xs:string" />
+                               </xs:sequence>
+                       </xs:complexType>
+                       <xs:complexType name="helloStringResponse">
+                               <xs:sequence>
+                                       <xs:element minOccurs="0" name="return" 
type="xs:string" />
+                                       <xs:element minOccurs="0" 
ref="ns1:Name" />
+                                       <xs:element minOccurs="0" 
name="Employee" type="tns:employee" />
+                               </xs:sequence>
+                       </xs:complexType>
+                       <xs:complexType name="employee">
+                               <xs:sequence>
+                                       <xs:element minOccurs="0" 
name="address" type="tns:address" />
+                                       <xs:element minOccurs="0" name="dept" 
type="tns:department" />
+                                       <xs:element minOccurs="0" name="name" 
type="tns:name" />
+                                       <xs:element minOccurs="0" name="salary" 
type="tns:salary" />
+                                       <xs:element minOccurs="0" name="title" 
type="xs:string" />
+                                       <xs:element name="type" type="xs:int" />
+                               </xs:sequence>
+                       </xs:complexType>
+                       <xs:complexType name="address">
+                               <xs:sequence>
+                                       <xs:element minOccurs="0" name="city" 
type="xs:string" />
+                                       <xs:element minOccurs="0" 
name="country" type="xs:string" />
+                                       <xs:element minOccurs="0" name="email" 
type="xs:string" />
+                                       <xs:element minOccurs="0" name="phone" 
type="xs:string" />
+                                       <xs:element minOccurs="0" name="state" 
type="xs:string" />
+                                       <xs:element minOccurs="0" name="street" 
type="xs:string" />
+                                       <xs:element minOccurs="0" 
name="zipcode" type="xs:string" />
+                               </xs:sequence>
+                       </xs:complexType>
+                       <xs:complexType name="department">
+                               <xs:sequence>
+                                       <xs:element minOccurs="0" 
name="location" type="xs:string" />
+                                       <xs:element minOccurs="0" name="name" 
type="xs:string" />
+                               </xs:sequence>
+                       </xs:complexType>
+                       <xs:complexType name="salary">
+                               <xs:sequence>
+                                       <xs:element name="bonusPercentage" 
type="xs:int" />
+                                       <xs:element minOccurs="0" 
name="currency" type="xs:string" />
+                                       <xs:element name="salary" type="xs:int" 
/>
+                               </xs:sequence>
+                       </xs:complexType>
+               </xs:schema>
+               <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema";
+                       xmlns:ns1="http://cxf.apache.org"; 
targetNamespace="helloString/Name"
+                       version="1.0">
+                       <xs:import namespace="http://cxf.apache.org"; />
+                       <xs:element name="Name" type="ns1:name" />
+               </xs:schema>
+       </wsdl:types>
+       <wsdl:message name="helloString">
+               <wsdl:part name="parameters" element="tns:helloString">
+               </wsdl:part>
+       </wsdl:message>
+       <wsdl:message name="helloStringResponse">
+               <wsdl:part name="parameters" element="tns:helloStringResponse">
+               </wsdl:part>
+       </wsdl:message>
+       <wsdl:portType name="webParamWebService">
+               <wsdl:operation name="helloString">
+                       <wsdl:input name="helloString" 
message="tns:helloString">
+                       </wsdl:input>
+                       <wsdl:output name="helloStringResponse" 
message="tns:helloStringResponse">
+                       </wsdl:output>
+               </wsdl:operation>
+       </wsdl:portType>
+       <wsdl:binding name="webParamWebServiceServiceSoapBinding"
+               type="tns:webParamWebService">
+               <soap:binding style="document"
+                       transport="http://schemas.xmlsoap.org/soap/http"; />
+               <wsdl:operation name="helloString">
+                       <soap:operation soapAction="urn:HelloString" 
style="document" />
+                       <wsdl:input name="helloString">
+                               <soap:body use="literal" />
+                       </wsdl:input>
+                       <wsdl:output name="helloStringResponse">
+                               <soap:body use="literal" />
+                       </wsdl:output>
+               </wsdl:operation>
+       </wsdl:binding>
+       <wsdl:service name="webParamWebServiceService">
+               <wsdl:port name="webParamWebServicePort" 
binding="tns:webParamWebServiceServiceSoapBinding">
+                       <soap:address 
location="http://localhost:9090/webParamWebServicePort"; />
+               </wsdl:port>
+       </wsdl:service>
+</wsdl:definitions>


Reply via email to