Handling message parts defined in SOAP header with CXF
objectiser Apr 15, 2011 9:19 AMHi
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