DefaultErrorHandler
This is the default Error Handler in Camel.
The default Error Handler has the same power as the Dead Letter Channel, however it does not support a dead letter queue, which is the only difference between the two of them.
The DefaultErrorHandler
is configured differently from
Dead Letter Channel as
it is configured to:
-
not redeliver
-
not handled
-
no dead letter queue (not possible)
By default, any exception thrown during routing will be propagated back
to the caller and the Exchange ends immediately.
However, you can use the Exception Clause to
catch a given exception and lower the exception by marking it as
handled. If so, the exception will not be sent back to the caller, and
the Exchange will succeed, but not continue being routed.
See the difference between handled
and continued
in the
Exception Clause documentation.
Example
In this route below, any exception thrown in, such as the validateOrder
bean, will be propagated back to the caller via the jetty endpoint, which
then returns an HTTP error message back to the client.
from("jetty:http://localhost/myservice/order")
.to("bean:validateOrder")
.to("jms:queue:order");
We can add an onException
in case we want to catch certain exceptions
and route them differently, for instance to catch a
ValidationException
and return a fixed response to the caller.
onException(ValidationException.class)
.handled(true)
.transform(body(constant("INVALID ORDER")));
from("jetty:http://localhost/myservice/order")
.to("bean:validateOrder")
.to("jms:queue:order");
When the ValidationException
is thrown from the validateOrder
bean,
it is intercepted by Camel error handler which lets the
onException(ValidationException.class)
handle the exception.
The Exchange is routed to this onException route, and
since we use handled(true)
, then the original exception is cleared,
and we transform the message into a fixed response that is returned to
jetty endpoint that returns it to the original caller.