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);
}
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.