It's right. If you take a look at the PayLoad[1] toString method, you will find it has header and body two parts. The content is right.
And [esb:GetPerson: null]] is the GetPerson element to String's value.

[1] https://svn.apache.org/repos/asf/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfPayload.java

Willem


Olivier Roger wrote:
I remove the xmlbeans usage to use an interface using String as input and
output parameter types.

package com.bsb.incubator.esb.fuse4;

import javax.jws.WebParam;
import javax.jws.WebService;

@WebService(targetNamespace = "http://www.bsb.com/incubator/esb";)
public interface IWS {
        String GetPerson(@WebParam(name="socialId") String socialId) ;
}

Using the debugger it seems that the exchange variable does not contains the
request payload.
Here is content:

Header: []
Body: [[esb:GetPerson: null]]

http://old.nabble.com/file/p28241790/%255BPAYLOAD%255DCxfPayload.png
I provided the sample of my project.


Olivier Roger wrote:
Thanks for you input willem,

I am using the lastest Fuse ESB distribution which includes Camel 2.2.
I will try to launch the example you indicated and what is different from
my implementation.

If I cannot figure it out I will provide a sample project.

http://old.nabble.com/file/p28241790/CXFPayload.zip CXFPayload.zip
Olivier


willem.jiang wrote:
I just ran a simple test by printing out the result of exchange.getIn().getBody(String.class) in the CxfConsumerPayloadTest.java on the trunk (Camel 2.3-SNAPSHOT), I can see the message body was printed out rightly.

Which version of Camel are you using ?

Willem

Willem Jiang wrote:
Hi,

When you use exchange.getIn().getBody(String.class) to get the message,
camel will try to find a right converter to turn PayLoad (the actual object stored in the message body) into String.
It looks like there is not a converter to do this job, so you got null.
If I remember right, a StringConverter should be use in this case, I don't know why it doesn't work for you. If you use exchange.getIn().getBody() , you should get the PayLoad object. You can find more detail example here[1]

[1]https://svn.apache.org/repos/asf/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerPayloadTest.java

Willem

Olivier Roger wrote:
Hello Camel,

I am experimenting a strange issue when using CXF inbound endpoint with
PAYLOAD dataformat option (no problem in MESSAGE mode).

First I declare a CXF endpoint:

    <cxf:cxfEndpoint id="F1" address="http://localhost:10101/F1";
serviceClass="CXFUseCase"> <!-- Interface with one method -->
        <cxf:dataBinding>
            <bean class="org.apache.cxf.xmlbeans.XmlBeansDataBinding"
/>
        </cxf:dataBinding>
        <cxf:properties>
            <entry key="dataFormat" value="PAYLOAD"/>
        </cxf:properties>
    </cxf:cxfEndpoint>

Then, in my route I use it:

        <route>
            <from uri="cxf:bean:F1" />
            <bean ref="inspect" />

When I debug in the inspect bean the Exchange object does not contain
any
value.
However, setting a response value works correctly.

    public void process(final Exchange exchange){
        String msg = exchange.getIn().getBody(String.class);
        System.out.println(msg); // is null
exchange.getOut().setBody(createResponse(), PersonDocument.class); //
is ok
    }

I read the documentation on the website but found it quite not clear. Am I
doing something wrong?

Thanks in advance,

Olivier






Reply via email to