[JBoss JIRA] (JBWS-3964) Incorrect behaviour with @WebParam(header = true, mode = IN)
by Alessio Soldano (JIRA)
[ https://issues.jboss.org/browse/JBWS-3964?page=com.atlassian.jira.plugin.... ]
Alessio Soldano updated JBWS-3964:
----------------------------------
Assignee: Jim Ma
> 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
>
> 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}
--
This message was sent by Atlassian JIRA
(v6.4.11#64026)