wsdl2java fails to generate consistent Java from equivilent valid but slightly 
different WSDL, e.g. soap_header example
-----------------------------------------------------------------------------------------------------------------------

                 Key: CXF-3659
                 URL: https://issues.apache.org/jira/browse/CXF-3659
             Project: CXF
          Issue Type: Bug
          Components: Tooling
    Affects Versions: 2.4.1, 2.4, 2.2.12, 2.3, 2.0.13, 2.1.10
         Environment: JDK 1.6_u20
            Reporter: Martin
            Priority: Critical


Using the CXF distributed sample _soap_header_, by a small valid modification 
simplifying the wsdl, the generated code is altered significantly, with the 
parameters for the SOAP Body parameter being dropped.

Sample from the unmodified CXF sample wsdl:
{code}
    @WebResult(name = "outHeaderResponse", targetNamespace = 
"http://apache.org/cxf/sample/headers/body/";, partName = "the_response")
    @WebMethod
    public org.apache.cxf.sample.headers.body.OutHeaderResponse outHeader(
        @WebParam(partName = "me", name = "outHeader", targetNamespace = 
"http://apache.org/cxf/sample/headers/body/";)
        org.apache.cxf.sample.headers.body.OutHeader me,
        @WebParam(partName = "header_info", mode = WebParam.Mode.INOUT, name = 
"SOAPHeaderInfo", targetNamespace = 
"http://apache.org/cxf/sample/headers/header/";, header = true)
        
javax.xml.ws.Holder<org.apache.cxf.sample.headers.header.SOAPHeaderData> 
headerInfo
    );
{code}
 
Sample output from modified wsdl processing:
{code}
    @WebResult(name = "responseType", targetNamespace = "")
    @RequestWrapper(localName = "outHeader", targetNamespace = 
"http://apache.org/cxf/sample/headers/body/";, className = 
"org.apache.cxf.sample.headers.body.OutHeader")
    @WebMethod
    @ResponseWrapper(localName = "outHeaderResponse", targetNamespace = 
"http://apache.org/cxf/sample/headers/body/";, className = 
"org.apache.cxf.sample.headers.body.OutHeaderResponse")
    public java.lang.String outHeader(
        @WebParam(name = "requestType", targetNamespace = "")
        java.lang.String requestType
    );
{code} 
Note the missing *header* parameter in the modified wsdl vs unmodified wsdl:
{code}
        @WebParam(partName = "header_info", mode = WebParam.Mode.INOUT, name = 
"SOAPHeaderInfo", targetNamespace = 
"http://apache.org/cxf/sample/headers/header/";, header = true)
        
javax.xml.ws.Holder<org.apache.cxf.sample.headers.header.SOAPHeaderData> 
headerInfo
{code}

Here is an example call from the original sample wsdl:
{code:xml}
<!-- the message def -->
    <message name="inHeaderRequest">
        <part element="tns:inHeader" name="me"/>
        <part element="tns:SOAPHeaderInfo" name="header_info"/>
    </message>
    <message name="inHeaderResponse">
        <part element="tns:inHeaderResponse" name="the_response"/>
    </message>

<!-- the related operation in the binding -->

        <operation name="inHeader">
            <soap:operation soapAction="" style="document"/>
            <input name="inHeaderRequest">
                <soap:body parts="me" use="literal"/>
                <soap:header message="tns:inHeaderRequest" part="header_info" 
                    use="literal"/>
            </input>
            <output name="inHeaderResponse">
                <soap:body use="literal"/>
            </output>
        </operation>
{code}

And the modified wsdl that is not apparently parsed correctly:
{code:xml}
<!-- the message def -->
    <message name="HeaderInfo">
        <part element="tns:SOAPHeaderInfo" name="header_info"/>
    </message>    
    <message name="inHeaderRequest">
        <part element="tns:inHeader" name="me"/>
    </message>
    <message name="inHeaderResponse">
        <part element="tns:inHeaderResponse" name="the_response"/>
    </message>

<!-- the related operation in the binding -->

        <operation name="inHeader">
            <soap:operation soapAction="" style="document"/>
            <input name="inHeaderRequest">
                <soap:body parts="me" use="literal"/>
                <soap:header message="tns:HeaderInfo" part="header_info" 
                    use="literal"/>
            </input>
            <output name="inHeaderResponse">
                <soap:body use="literal"/>
            </output>
        </operation>
{code}

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to