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