[ https://issues.apache.org/jira/browse/CXF-1223?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Daniel Kulp reassigned CXF-1223: -------------------------------- Assignee: Daniel Kulp (was: jimma) > 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: Daniel Kulp > 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.