Uploaded image for project: 'JBoss Web Services'
  1. JBoss Web Services
  2. JBWS-3964

Incorrect behaviour with @WebParam(header = true, mode = IN)

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Done
    • Icon: Major Major
    • jbossws-cxf-5.1.4.Final
    • 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>
      

              rhn-engineering-ema Jim Ma
              xavierdury Xavier Dury (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

                Created:
                Updated:
                Resolved: