7 Replies Latest reply on May 9, 2011 3:58 AM by Gary Brown

    Handling message parts defined in SOAP header with CXF

    Gary Brown Master

      Hi

       

      I have a BPEL process that receives a message through jbossws-native (JBossAS 5.1, JBWS-native 3.2.2.GA). The WSDL definition of the message maps a value from the SOAP header as being a message part, as shown here:

       

       

        <wsdl:message name="HelloMessage">
          <wsdl:part name="ID" element="types:SessionIdentity"/>
          <wsdl:part name="Message" type="xsd:string"/>
        </wsdl:message>
       ....
        <wsdl:portType name="HelloGoodbyePortType">
          <wsdl:operation name="hello">
            <wsdl:input message="tns:HelloMessage" name="HelloIn"/>
            <wsdl:output message="tns:HelloMessage" name="HelloOut"/>
          </wsdl:operation>
       ....
        <wsdl:binding name="HelloGoodbyeSoapBinding" type="tns:HelloGoodbyePortType">
          <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
          <wsdl:operation name="hello">
            <soap:operation soapAction="" style="rpc"/>
            <wsdl:input>
              <soap:body
                  namespace="http://www.jboss.org/bpel/examples/wsdl"
                  use="literal" parts="Message"/>
           <soap:header message="tns:HelloMessage"
                  part="ID" use="literal"/>
            </wsdl:input>
      

       

      With the following message it works fine:

       

      <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsdl="http://www.jboss.org/bpel/examples/wsdl">
         <soapenv:Header>
          <ns:SessionIdentity xmlns:ns="http://www.jboss.org/bpel/examples/xsd">1</ns:SessionIdentity>
         </soapenv:Header>
         <soapenv:Body>
            <wsdl:hello>
               <Message>Hello</Message>
            </wsdl:hello>
         </soapenv:Body>
      </soapenv:Envelope>
      

       

      However if I run the same process with jbossws-cxf (version 3.2.2.GA), I get the fault response:

       

       

      <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
           <soap:Body>
                <soap:Fault>
                     <faultcode>soap:Server</faultcode>
                     <faultstring>wrong number of arguments</faultstring>
                </soap:Fault>
           </soap:Body>
      </soap:Envelope>
      

       

      The problem also occurs in JBossAS 6, which I assume uses jbossws-cxf by default.

       

      Is there something missing from the WSDL definition or doesn't CXF support this approach to accessing header info via message parts?

       

      Regards

      Gary