You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "Daniel Kulp (JIRA)" <ji...@apache.org> on 2008/02/19 21:56:45 UTC

[jira] Resolved: (CXF-788) Unexpected part name in request message

     [ https://issues.apache.org/jira/browse/CXF-788?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Daniel Kulp resolved CXF-788.
-----------------------------

       Resolution: Invalid
    Fix Version/s: Invalid
         Assignee:     (was: Adi Sakala)


If you are using the ObjectFactory to create a  JAXBElement<PingRequestBodyType> object for use in the PingRequest, you need to call:

factory.createPingRequestEchoString(requestBody);
instead of:
factory.createPingRequestBodyType(requestBody);

to get the correct QName into the JAXBElement.   The second call above creates the JAXBElement set for use as a top level element.  

> 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
>             Fix For: Invalid
>
>
> 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.