Unexpected part name in request message
---------------------------------------

                 Key: CXF-788
                 URL: https://issues.apache.org/jira/browse/CXF-788
             Project: CXF
          Issue Type: Bug
          Components: JAX-WS Runtime, JAXB Databinding, Tooling
            Reporter: Eoghan Glynn
            Assignee: Adi Sakala


This issue was exposed in the Microsoft WCF interop test cases for WS-RM 
(http://131.107.72.15/ilab/RM/WCFInteropPlugFest_RM.doc), with a CXF client 
running against a WCF endpoint.

Starting with the WSDL at:

http://131.107.72.15/ReliableMessaging_Service_WSAddressingAugust2004_Indigo/RequestReply.svc?wsdl

the following code is used to invoke on the CustomBinding_IEchoString1 port:

  ObjectFactory factory = new ObjectFactory(); 
  QName tName = new QName("http://tempuri.org/";, "Text"); 
  JAXBElement<String> tValue = new JAXBElement<String>(tName, String.class, 
"Hello");
  QName sName = new QName("http://tempuri.org/";, "Sequence"); 
  // value should be that of the sequence but don't worry about that now 
  JAXBElement<String> sValue = new JAXBElement<String>(sName, String.class, 
"123456789");
  PingRequestBodyType requestBody = factory.createPingRequestBodyType();
  requestBody.setText(tValue);
  requestBody.setSequence(sValue);
  JAXBElement<PingRequestBodyType> requestBodyElement  = 
factory.createPingRequestBodyType(requestBody);
  PingRequest request = factory.createPingRequest(); 
request.setEchoString(requestBodyElement );

The WS-RM out-of-band sequence creation suceeds, but the application-level 
request is rejected by WCF. The problem is a mismatch between the actual 
message payloaded encoded on the wire by CXF:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/";>
<soap:Header>
   <!-- WS-A & RM headers -->
</soap:Header>
<soap:Body>
<PingRequest xmlns="http://tempuri.org/";> 
<PingRequest.BodyType><Text>Hello</Text><Sequence>123456789</Sequence></PingRequest.BodyType>
</PingRequest>
</soap:Body>
</soap:Envelope>
 
and the format expected by WCF:

<s:Body>
<echoString xmlns="http://tempuri.org/"; 
xmlns:i="http://www.w3.org/2001/XMLSchema-instance";>
<Text>Hello</Text>
<Sequence>urn:uuid:3c0ba104-815c-4d83-b2bb-47670a5f8083</Sequence>
</echoString>
</s:Body>

Lokking at the relevant schema type:

  <xs:element name="PingRequest">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" name="echoString" nillable="true" 
type="tns:PingRequest.BodyType" /> 
      </xs:sequence>
    </xs:complexType>
  </xs:element> 

the issue seems to be that CXF is encoding the message part named for the type 
("tns:PingRequest.BodyType" in the <xs:element> definition above) whereas WCF 
is expecting the element name ("echoString" above in the schema exerpt).


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to