Hi Lars,

Can you show me the detail code of FooProcessor() ?

If you take a look at the PipeLine(which chains these endpoints and
processor together), you will find the codes about copying exchanges
between these endpoints and processors.

    // now lets set the input of the next exchange to the output of the
        // previous message if it is not null
        Message previousOut = previousExchange.getOut(false);
        Message in = answer.getIn();
        if (previousOut != null) {
            in.copyFrom(previousOut);
        } else {
            in.copyFrom(previousExchange.getIn());
        }
        return answer;
lets take the exchange which will be passed to  bean:FooHandler as an
example.
If you set the out message for the FooProcessor exchange,
bean:FooHandler's exchange's in message will be the previous exchange's
out message.
If you don't set the out message for the FooProcessor exchange,
bean:FooHandler's exchange's in message will be the previous exchange's
in message.

For the fault message part, camel-cxf component supports to through the
soap fault here [1]. If I remember right, when you set the exchange's
fault message, cxf will marshal it into soap fault message. Please feel
free to try it.

[1]http://camel.apache.org/cxf.html#CXF-HowtothrowtheSOAPFaultfromCamel

Willem

Lars Ivar Igesund wrote:
> Hi!
> 
> I have had a working CXF endpoint (server) connected to my route for a
> short while now, but the service only had an in message and the route
> looked like this:
> 
> from (cxfEndpoint).process(new FooProcessor()).to ( "bean:FooHandler");
> 
> However, the caller of the service wants a response which is fairly
> simple. OK if the processor (which I guess really should be transform
> instead) succeeds, an error message describing the issue if it fails.
> 
> So I defined an out message for the operation, and in the first test
> (for OK), I expected to be able to do
> 
> from (cxfEndpoint).process(new FooProcessor()).to (
> "bean:FooHandler").transform(constant(OK));
> 
> This does however fail in the handler step because the out message of
> the exchange processed in the FooProcessor is no longer a FooMessage
> (even if I do exchange.getOut().setBody(new FooMessage()); but rather
> a CxfMessage.
> 
> I always assume that I use the API wrong, but in this case the router
> acts inconsistently depending on whether the exchange expects an out
> message or not. I thought that the out message part where it is
> returned to the originating endpoint only should happen at the end of
> the route.
> 
> As for the fault, I think I want to use the exchange.getFault()
> message, but I had some trouble finding a WSDL example where such a
> message is defined.
> 
> Please help me suggest how the route should look, how to propagate the
> messages correctly and properly and how to define the fault message
> (in the WSDL). Actually, can I possibly just put an Exception instance into 
> the fault message?
> 
> Best,
> Lars Ivar
> 
> 

Reply via email to