camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Claus Ibsen <claus.ib...@gmail.com>
Subject Re: need help with error handling
Date Mon, 08 Apr 2013 13:11:29 GMT
See the bottom of the camel-cxf wiki page, about

Streaming Support in PAYLOAD mode

On Mon, Apr 8, 2013 at 3:08 PM, Nico Mommaerts <nico.mommaerts@gmail.com> wrote:
> No I don't think I'm running in streaming mode:
> <camelContext id="camelContext" xmlns="http://camel.apache.org/schema/spring"
> streamCache="false" trace="false">
>  <properties>
>            <property key="CamelLogDebugStreams" value="false"/>
>       </properties>
>
> <jmxAgent id="agent" disabled="true"/>
>  <routeBuilder ref="brokerRouteBuilder" />
> </camelContext>
>
> On Mon, Apr 8, 2013 at 2:29 PM, Claus Ibsen <claus.ibsen@gmail.com> wrote:
>
>> Hi
>>
>> Sounds like you use camel-cxf / CXF in streaming mode.
>> See the top of this page, the green tip bar, and its link(s)
>> http://camel.apache.org/cxf
>>
>>
>>
>> On Fri, Apr 5, 2013 at 2:33 PM, Nico Mommaerts <nico.mommaerts@gmail.com>
>> wrote:
>> > Hey,
>> >
>> > I've been reading the chapter on Error handling over and over but I'm
>> still
>> > failing miserably..
>> >
>> > My scenario: a cxf proxy route which modifies the soapheaders, I want all
>> > soapfaults to be returned as-is to the caller, except when the soapfault
>> > contains a certain string. In that case I want to modify the soapheader
>> of
>> > the original message again and redeliver. Modify/redeliver up to x times,
>> > then just return the soapfault to the caller.
>> >
>> > Given the power of the error handling in Camel this would seem easy.
>> >
>> > This is my route without error handling:
>> > from("cxf:bean:brokerOrderLimit?dataFormat=PAYLOAD")
>> >  .process(soapHeadersEnricher) // modfies the soapheader
>> > .to("cxf:bean:backendOrderLimit?dataFormat=PAYLOAD")
>> >
>> > I have: getContext().setHandleFault(true); so SOAPFault gets recognized
>> as
>> > an exception.
>> >
>> > If I use the doTry()..doCatch(SOAPFault.class).process(//examine
>> > fault).doEnd(), I succeed in recognized the special case I want to
>> handle.
>> > But I have no idea how to control the route flow from that point. I want
>> to
>> > change the soapheader and redeliver to the endpoint which returned the
>> > soapfault. Right now the caller just gets back an empty soap envelope
>> when
>> > I do this.
>> >
>> > I also tried with
>> > from("cxf:bean:brokerOrderLimit?dataFormat=PAYLOAD")
>> > .process(soapHeadersEnricher)
>> >  .to("cxf:bean:thalerOrderLimit?dataFormat=PAYLOAD")
>> > .onException(SoapFault.class)
>> >  .onWhen(//filter the special case)
>> >                                 .handled(true); // true or false doesn't
>> > seem to make a difference, also tried with continued
>> > But in this case the predicate is never even called (so the exception
>> isn't
>> > caught), and the caller just receives the soapfault back.
>> >
>> > Not sure how to handle this problem, any ideas?
>>
>>
>>
>> --
>> Claus Ibsen
>> -----------------
>> Red Hat, Inc.
>> FuseSource is now part of Red Hat
>> Email: cibsen@redhat.com
>> Web: http://fusesource.com
>> Twitter: davsclaus
>> Blog: http://davsclaus.com
>> Author of Camel in Action: http://www.manning.com/ibsen
>>



-- 
Claus Ibsen
-----------------
Red Hat, Inc.
FuseSource is now part of Red Hat
Email: cibsen@redhat.com
Web: http://fusesource.com
Twitter: davsclaus
Blog: http://davsclaus.com
Author of Camel in Action: http://www.manning.com/ibsen

Mime
View raw message