-
Bug
-
Resolution: Done
-
Major
-
None
-
None
-
None
Given the following simple WebService with incoming and outgoing header @WebParams:
@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; } }
The generated WSDL contains the following operation where the incoming @WebParam (mode = IN) is present in both input and ouput:
<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>
We can see in the following exchange that the incoming @WebParam will be copied verbatim in the response:
<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>
When the incoming header @WebParam is not set, an empty element will be added to the body of the response:
<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>