Hi
On Wed, Aug 5, 2009 at 8:44 PM, J_Racker<[email protected]> wrote:
>
> I'm having a problem when setting up a route in camel. In the process of
> debugging a new camel route I noticed that I could not connect to my
> Activemq Broker because of authentication. So during the route when the
> message is sent to the queue, the following exception is thrown
> (javax.jms.JMSException: User broker is not authorized to write to:
> queue://).
>
> According to the documentation if an exception happens during the route in
> camel 2, the exception should be propagated to the caller. Here is the code
> that initiates the exchange
>
> Exchange exchange = getEndpoint().createExchange();
> exchange.getIn().setBody(some_data);
> exchange.getIn().setHeader(MyHeader, MyHeaderValue);
>
> try {
> this.getProcessor().process(exchange);
> } catch (Exception e) {
> log.error("Caught Exception during message forwarding.", e);
> handleException(e);
> }
I assume this is you own code?
And you use a processor for that? That is very low level to operate.
If so you should add a check for exchange.getException() != null as
the exception will be stored there
So you can actually change the code to
this.getProcessor().process(exchange);
if (exchange.getException() != null) {
Exception e = exchange.getException();
log.error("Caught Exception during message forwarding.", e);
handleException(e);
}
If you use some client API or (non processor) Camel will throw back
the caused exception to you.
Gotta go.
>
> The problem I'm seeing is that even though the route throws an exception
> this process method returns as if everything happened fine and my catch
> block isn't triggered.
>
> In tracing through the camel code, I noticed that in the
> RedeliveryErrorHandler class on line 241 it calls:
>
> OnExceptionDefinition exceptionPolicy = getExceptionPolicy(exchange, e);
>
> which sets exceptionPolicy to null because I haven't set any exception
> policies. According to the docs the default behavior should be to throw the
> exception to the caller, but instead it appears that because there is no
> exceptionPolicy that the handler simply returns after logging the failure
>
> String msg = "Failed delivery for exchangeId: " + exchange.getExchangeId()
> + ". On delivery attempt: " + data.redeliveryCounter + "
> caught: " + e;
> logFailedDelivery(true, exchange, msg, data, e);
>
> So in an attempt to solve this I added the following line to my route
> builder:
>
> onException(java.lang.Exception.class).throwException(new
> RuntimeException("Exception in message processing"));
>
> Now, when in the RedeliveryErrorHandler, this new exception policy is
> assigned and the failure processor is set to throw the RuntimeException.
> However, the failure processor is also wrapped by the RedeliveryErrorHandler
> and when it throws the RuntimeException, the RedeliveryErrorHandler
> immediately grabs it, logs it, eats it, and returns as if everything is
> fine.
>
> Am I using this exception handling framework in some way that it isn't meant
> to be used? Is there a bug in the RedeliveryErrorHandler? Any help would
> be appreciated.
>
> Thank You
>
>
> --
> View this message in context:
> http://www.nabble.com/Camel-2.0-M3-swalllowing-exceptions--tp24834025p24834025.html
> Sent from the Camel - Users mailing list archive at Nabble.com.
>
>
--
Claus Ibsen
Apache Camel Committer
Open Source Integration: http://fusesource.com
Blog: http://davsclaus.blogspot.com/
Twitter: http://twitter.com/davsclaus