On Thu, Nov 3, 2011 at 3:21 PM, Calvert, Zach (Zach)** CTR **
<zcalv...@motive.com> wrote:
> I have a CXF bean sending out a camel message on a ProducerTemplate and I 
> want any exceptions thrown on the route to immediately come back as the 
> response.  It is an inOut message:
> producer.sendBodyAndHeaders(URI, ExchangePattern.InOut, body, headers);
>
> I have not figured out the magic method to getting the response to 
> automatically fast fail if an exception is thrown by any method along the 
> way.  For example, the URI goes to an ActiveMQ queue, and if I have it 
> immediately run
> If (true) throw new RuntimeException();
>
> The exception eventually results the jetty response of HTTP 500 server error 
> on the jetty CXF API.  I have two bundles, one bundle is the jetty CXF 
> followed by sending this to an active MQ queue and the second bundle consumes 
> the message with another route.  If on the second route, the operation throws 
> an Exception and I create an error handler, to the tune of
>
>        <camel:onException>
>            <camel:exception>java.lang.Throwable</camel:exception>
>            <camel:bean ref="fastFailErrorHandler" method="handleError" />
>        </camel:onException>
>
>    public Object handleError(Exchange exchange) {
>        Throwable caused = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, 
> Throwable.class);
>        exchange.getIn().setFault(true);
>        exchange.getOut().setFault(true);
>        logger.debug("Error handler triggered");
>        return caused;
>    }
>
> The original problem will be a timeout exception, waiting the default 20 
> seconds.  If I modify it to be
>        <camel:onException>
>            <camel:exception>java.lang.Throwable</camel:exception>
>            <camel:handled>
>                <camel:constant>true</camel:constant>
>            </camel:handled>
>            <camel:bean ref="fastFailErrorHandler" method="handleError" />
>        </camel:onException>
>
> Then the body continues working its way through subsequent queues as if 
> nothing went wrong.
>
> How do I tell Camel, "hey Camel, please throw this thing to the original 
> caller as the response body".
>

You can handle the exception from onException and construct a response
body to be returned.
Or do a doTry .. doCatch style etc.



>
>
>
> Thanks,
> Zach Calvert
>
>



-- 
Claus Ibsen
-----------------
FuseSource
Email: cib...@fusesource.com
Web: http://fusesource.com
Twitter: davsclaus, fusenews
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/

Reply via email to