]
Jim Ma commented on JBWS-3964:
------------------------------
[~kalgon] This is a bug in cxf. I'll try to fix this later in apache cxf:
. BTW,Put the element in soap header is not
easy to validate with schema. Why do you need to set header to true? Does move this
element to soap body work for you?
Incorrect behaviour with @WebParam(header = true, mode = IN)
------------------------------------------------------------
Key: JBWS-3964
URL:
https://issues.jboss.org/browse/JBWS-3964
Project: JBoss Web Services
Issue Type: Bug
Environment: Wildfly 9.0.2
Reporter: Xavier Dury
Assignee: Jim Ma
Fix For: jbossws-cxf-5.2.0.Final
Given the following simple WebService with incoming and outgoing header @WebParams:
{code}
@Stateless
@WebService(name = "MyEchoService", targetNamespace = "urn:echo")
public class MyEchoService {
@WebResult(name = "result")
public String echo(
@WebParam(name = "message") String message,
@WebParam(name = "paramIn", mode = Mode.IN, header = true)
Holder<String> paramIn,
@WebParam(name = "paramOut", mode = Mode.OUT, header = true)
Holder<String> paramOut) {
paramOut.value = "got paramIn " + paramIn.value;
return "echo " + message;
}
}
{code}
The generated WSDL contains the following operation where the incoming @WebParam (mode =
IN) is present in both input and ouput:
{code}
<wsdl:operation name="echo">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="echo">
<soap:header message="tns:echo" part="paramIn"
use="literal"></soap:header>
<soap:body parts="parameters" use="literal"/>
</wsdl:input>
<wsdl:output name="echoResponse">
<soap:header message="tns:echoResponse" part="paramIn"
use="literal"></soap:header>
<soap:header message="tns:echoResponse" part="paramOut"
use="literal"></soap:header>
<soap:body parts="result" use="literal"/>
</wsdl:output>
</wsdl:operation>
{code}
We can see in the following exchange that the incoming @WebParam will be copied verbatim
in the response:
{code}
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:urn="urn:echo">
<soapenv:Header>
<urn:paramIn>fred</urn:paramIn>
</soapenv:Header>
<soapenv:Body>
<urn:echo>
<urn:message>hello world!</urn:message>
</urn:echo>
</soapenv:Body>
</soapenv:Envelope>
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<paramIn xmlns="urn:echo">fred</paramIn>
<paramOut xmlns="urn:echo">got paramIn fred</paramOut>
</soap:Header>
<soap:Body>
<echoResponse xmlns="urn:echo">
<result>echo hello world!</result>
</echoResponse>
</soap:Body>
</soap:Envelope>
{code}
When the incoming header @WebParam is not set, an empty element will be added to the body
of the response:
{code}
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:urn="urn:echo">
<soapenv:Body>
<urn:echo>
<urn:message>hello world!</urn:message>
</urn:echo>
</soapenv:Body>
</soapenv:Envelope>
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<paramOut xmlns="urn:echo">got paramIn null</paramOut>
</soap:Header>
<soap:Body>
<echoResponse xmlns="urn:echo">
<result>echo hello world!</result>
</echoResponse>
<paramIn xsi:nil="true" xmlns="urn:echo"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
</soap:Body>
</soap:Envelope>
{code}