[ 
https://issues.apache.org/jira/browse/CXF-1223?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12556686#action_12556686
 ] 

Daniel Kulp commented on CXF-1223:
----------------------------------


Glen and Peter,

Both the RI and CXF are doing the wrong thing here.   According to spec, the 
operation should be generated in BARE mode with a single param and a single 
return object and no Request/Response Wrapper annotations.   

The reasons:  (from section 2.3.1.2 of the JAX-WS spec)   For it to be 
considered wrapped:

1) The wrapper element must NOT be nillable.  Yours are.

2) "The elements referred to by the input and output message (if present) parts 
(henceforth referred to a wrapper elements) are both complex types defined 
using the xsd:sequence compositor"    Yours are defined as extensions to other 
objects.  

in anycase, both CXF and the RI are incorrect.   They should be generated as 
BARE.   I'm going to try and get CXF fixed to do that.

 






> Client code generates no parameters or return values for WSDL with multiple 
> elements with same name
> ---------------------------------------------------------------------------------------------------
>
>                 Key: CXF-1223
>                 URL: https://issues.apache.org/jira/browse/CXF-1223
>             Project: CXF
>          Issue Type: Bug
>    Affects Versions: 2.0.3
>         Environment: Windows, OS X, Linux
>            Reporter: Peter Liljenberg
>            Assignee: jimma
>            Priority: Blocker
>             Fix For: 2.1
>
>
> When generating code with wsdl2java we end up with client code that have no 
> parameters or return values for our methods.
> Complete WSDL:
> <?xml version="1.0" encoding="UTF-8"?>
> <definitions xmlns:tns="mesh.meshfacade" 
> xmlns:wsr="http://www.openuri.org/2002/10/soap/reliability/"; 
> xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"; 
> xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"; 
> xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"; 
> xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"; 
> xmlns:soap12enc="http://www.w3.org/2003/05/soap-encoding"; 
> xmlns:conv="http://www.openuri.org/2002/04/wsdl/conversation/"; 
> xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"; 
> xmlns:s="http://www.w3.org/2001/XMLSchema"; 
> xmlns="http://schemas.xmlsoap.org/wsdl/"; targetNamespace="mesh.meshfacade">
>  <types>
>   <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"; 
> xmlns:stns="java:mesh.meshfacade.vo" elementFormDefault="qualified" 
> attributeFormDefault="qualified" targetNamespace="java:mesh.meshfacade.vo">
>    <xsd:import namespace="java:efsbase.common">
>    </xsd:import>
>    <xsd:complexType name="CreateMailboxRequest">
>     <xsd:complexContent>
>      <xsd:extension xmlns:tp="java:efsbase.common" 
> base="tp:EFSBaseMSISDNRequest">
>       <xsd:sequence>
>        <xsd:element type="xsd:string" name="domain" minOccurs="1" 
> maxOccurs="1" nillable="true">
>        </xsd:element>
>       </xsd:sequence>
>      </xsd:extension>
>     </xsd:complexContent>
>    </xsd:complexType>
>    <xsd:complexType name="CreateMailboxResponse">
>     <xsd:complexContent>
>      <xsd:extension xmlns:tp="java:efsbase.common" base="tp:EFSBaseResponse">
>      </xsd:extension>
>     </xsd:complexContent>
>    </xsd:complexType>
>   </xsd:schema>
>   <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"; 
> xmlns:stns="mesh.meshfacade" elementFormDefault="qualified" 
> attributeFormDefault="qualified" targetNamespace="mesh.meshfacade">
>    <xsd:import namespace="java:mesh.meshfacade.vo">
>    </xsd:import>
>     <xsd:element xmlns:tp="java:mesh.meshfacade.vo" 
> type="tp:CreateMailboxRequest" name="createMailbox" nillable="true">
>    </xsd:element>
>    <xsd:element xmlns:tp="java:mesh.meshfacade.vo" 
> type="tp:CreateMailboxResponse" name="createMailboxResponse" nillable="true">
>    </xsd:element>
>   </xsd:schema>
>   <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"; 
> xmlns:stns="java:efsbase.common" elementFormDefault="qualified" 
> attributeFormDefault="qualified" targetNamespace="java:efsbase.common">
>    <xsd:complexType name="EFSBaseMSISDNRequest">
>     <xsd:complexContent>
>      <xsd:extension base="stns:EFSBaseRequest">
>       <xsd:sequence>
>        <xsd:element type="xsd:string" name="msisdn" minOccurs="1" 
> maxOccurs="1" nillable="true">
>        </xsd:element>
>       </xsd:sequence>
>      </xsd:extension>
>     </xsd:complexContent>
>    </xsd:complexType>
>    <xsd:complexType name="EFSBaseObject">
>    </xsd:complexType>
>    <xsd:complexType name="EFSBaseRequest">
>     <xsd:complexContent>
>      <xsd:extension base="stns:EFSBaseObject">
>       <xsd:sequence>
>        <xsd:element type="xsd:string" name="userId" minOccurs="1" 
> maxOccurs="1" nillable="true">
>        </xsd:element>
>       </xsd:sequence>
>      </xsd:extension>
>     </xsd:complexContent>
>    </xsd:complexType>
>    <xsd:complexType name="EFSBaseResponse">
>     <xsd:complexContent>
>      <xsd:extension base="stns:EFSBaseObject">
>       <xsd:sequence>
>         <xsd:element type="xsd:string" name="transactionId" minOccurs="1" 
> maxOccurs="1" nillable="true">
>        </xsd:element>
>       </xsd:sequence>
>      </xsd:extension>
>     </xsd:complexContent>
>    </xsd:complexType>
>   </xsd:schema>
>  </types>
>  <message name="createMailbox">
>   <part xmlns:partns="mesh.meshfacade" name="createMailboxRequest" 
> element="partns:createMailbox">
>   </part>
>  </message>
>  <message name="createMailboxResponse">
>   <part xmlns:partns="mesh.meshfacade" name="result" 
> element="partns:createMailboxResponse">
>   </part>
>  </message>
>  <portType name="MeshFacadePort">
>    <operation name="createMailbox">
>    <input message="tns:createMailbox">
>    </input>
>    <output message="tns:createMailboxResponse">
>    </output>
>   </operation>
>  </portType>
>  <binding type="tns:MeshFacadePort" name="MeshFacadePort">
>    <soap:binding style="document" 
> transport="http://schemas.xmlsoap.org/soap/http"/>
>   <operation name="createMailbox">
>     <soap:operation style="document" soapAction=""/>
>    <input>
>      <soap:body use="literal"/>
>    </input>
>    <output>
>      <soap:body use="literal"/>
>    </output>
>   </operation>
>  </binding>
>  <service name="MeshFacade">
>   <port name="MeshFacadePort" binding="tns:MeshFacadePort">
>     <soap:address location="http://localhost/mesh/MeshFacade"/>
>   </port>
>  </service>
> </definitions>
> Generated code:
> public interface MeshFacadePort {
>     @ResponseWrapper(targetNamespace = "mesh.meshfacade", className = 
> "java.mesh_meshfacade.CreateMailboxResponse", localName = 
> "createMailboxResponse")
>     @RequestWrapper(targetNamespace = "mesh.meshfacade", className = 
> "java.mesh_meshfacade.CreateMailboxRequest", localName = "createMailbox")
>     @WebMethod
>     public void createMailbox();
> }
> Clearly we expected the method to have a parameter and return value. I'm 
> guessing (this has been an issue before CXF-1502) that the problem is that 
> there are 2 elements "createMailbox", one type definition and one 
> method/operation definition. Is this OK according to the WSDL specs or is it 
> a bug in CXF? Other frameworks like Axis can generate a "correct", working 
> client from the WSDL.
> Updated WSDL (snippet):
>  <portType name="MeshFacadePort">
>    <operation name="createMailbox2">
>    <input message="tns:createMailbox">
>    </input>
>    <output message="tns:createMailboxResponse">
>    </output>
>   </operation>
>  </portType>
>  <binding type="tns:MeshFacadePort" name="MeshFacadePort">
>    <soap:binding style="document" 
> transport="http://schemas.xmlsoap.org/soap/http"/>
>   <operation name="createMailbox2">
>     <soap:operation style="document" soapAction=""/>
>    <input>
>      <soap:body use="literal"/>
>    </input>
>    <output>
>      <soap:body use="literal"/>
>    </output>
>   </operation>
>  </binding>
> With different names we get the following, more correct code:
> public interface MeshFacadePort {
>     @SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
>     @WebResult(targetNamespace = "mesh.meshfacade", partName = "result", name 
> = "createMailboxResponse")
>     @WebMethod
>     public java.mesh_meshfacade.CreateMailboxResponse createMailbox2(
>         @WebParam(targetNamespace = "mesh.meshfacade", partName = 
> "createMailboxRequest", name = "createMailbox")
>         java.mesh_meshfacade.CreateMailboxRequest createMailboxRequest
>     );
> }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to