You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "Glen Mazza (JIRA)" <ji...@apache.org> on 2007/11/20 21:13:43 UTC
[jira] Commented: (CXF-1223) Client code generates no parameters or
return values for WSDL with multiple elements with same name
[ https://issues.apache.org/jira/browse/CXF-1223?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12544040 ]
Glen Mazza commented on CXF-1223:
---------------------------------
I was able to duplicate your bug using your WSDL. This appears to be a CXF error (also, CXF's wsdl2java -validate option does not consider the WSDL to be invalid), because GlassFish Metro is also accepting it. The same WSDL with Metro returns (in MeshFacadePort.java):
@WebMethod
@WebResult(name = "transactionId", targetNamespace = "java:efsbase.common")
@RequestWrapper(localName = "createMailbox", targetNamespace = "mesh.meshfacade", className = "java.mesh_meshfacade.CreateMailboxRequest")
@ResponseWrapper(localName = "createMailboxResponse", targetNamespace = "mesh.meshfacade", className = "java.mesh_meshfacade.CreateMailboxResponse")
public String createMailbox(
@WebParam(name = "userId", targetNamespace = "java:efsbase.common")
String userId,
@WebParam(name = "msisdn", targetNamespace = "java:efsbase.common")
String msisdn,
@WebParam(name = "domain", targetNamespace = "java:mesh.meshfacade.vo")
String domain);
> 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
> Priority: Blocker
>
> 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.