[jbossws-issues] [JBoss JIRA] (JBWS-3964) Incorrect behaviour with @WebParam(header = true, mode = IN)

Xavier Dury (JIRA) issues at jboss.org
Thu Jan 7 06:05:01 EST 2016


    [ https://issues.jboss.org/browse/JBWS-3964?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13145269#comment-13145269 ] 

Xavier Dury edited comment on JBWS-3964 at 1/7/16 6:04 AM:
-----------------------------------------------------------

Thanks for your response.

As the {{IN Holder}} was being populated, I thought it was perfectly legal to use a {{Holder}} for incoming header parameters (even if there is no real need to use a {{Holder}} there).

Nevertheless, there is still something strange happening when a {{OUT Holder}} is set to null. 

{code}
@Stateless
@WebService(name = "MyEchoService", targetNamespace = "urn:echo")
public class MyEchoService {
	
	@WebResult(name = "result")
	public String echo(
			@WebParam(name = "message") String message,
			@WebParam(name = "paramOut", mode = Mode.OUT, header = true) Holder<String> paramOut) {
		paramOut.value = null;
		return "echo " + message;
	}
}
{code}

That parameter appears in the body of the soap reponse instead of the header:

{code}
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <echo xmlns="urn:echo">
         <message>hello world!</message>
      </echo>
   </soap:Body>
</soap:Envelope>

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <echoResponse xmlns="urn:echo">
         <result>echo hello world!</result>
      </echoResponse>
      <paramOut xsi:nil="true" xmlns="urn:echo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
   </soap:Body>
</soap:Envelope>
{code}


was (Author: xdury):
Thanks for your response.

As the {{IN Holder}} was being populated, I thought it was perfectly legal to use a {{Holder}} for incoming header parameters (even if there is no real need to use a {{Holder}} there).

Nevertheless, there is still something strange happening when a {{OUT Holder}} is set to null. 

{code}
@Stateless
@WebService(name = "MyEchoService", targetNamespace = "urn:echo")
public class MyEchoService {
	
	@WebResult(name = "result")
	public String echo(
			@WebParam(name = "message") String message,
			@WebParam(name = "paramOut", mode = Mode.OUT, header = true) Holder<String> paramOut) {
		paramOut.value = null;
		return "echo " + message;
	}
}
{code}

That parameters appears in the body of the soap reponse instead of the header:

{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:Body>
      <echoResponse xmlns="urn:echo">
         <result>echo hello world!</result>
      </echoResponse>
      <paramOut xsi:nil="true" xmlns="urn:echo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
   </soap:Body>
</soap:Envelope>
{code}

> 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}



--
This message was sent by Atlassian JIRA
(v6.4.11#64026)


More information about the jbossws-issues mailing list