Stig Rohde Døssing created CAMEL-13706:
------------------------------------------
Summary: Allow conditional exception propagation to parent
RouteBuilders from DefaultErrorHandler
Key: CAMEL-13706
URL: https://issues.apache.org/jira/browse/CAMEL-13706
Project: Camel
Issue Type: New Feature
Reporter: Stig Rohde Døssing
Exception propagation between RouteBuilders is currently only possible with the
NoErrorHandler. It would be great if the DefaultErrorHandler could be
configured to propagate exceptions it is not configured to handle. This would
allow more Java-like exception handling for pipelines that cross RouteBuilders.
Basically the behavior I'd like from the DefaultErrorHandler is that exceptions
thrown from a route that are not handled, and exceptions thrown from
onException clauses, are handled the same way they would if the NoErrorHandler
were configured. This would cause them to propagate to handlers in the parent.
An example of how this could look:
{code}
class RestRouteBuilder extends RouteBuilder {
onException(Exception.class)
.handled(true)
.process(return a 500-series code)
onException(JsonProcessingException.class)
.handled(true)
.process(return a 400-series code)
from(rest)
.choice()
.when(the request is type A)
.to(type A route)
.otherwise()
.to(type B route)
}
class TypeARouteBuilder extends RouteBuilder {
setErrorHandlerBuilder(defaultErrorHandler().propagateUnknownExceptions());
onException(SomeRouteSpecificException.class)
.handled(true)
//Any exception thrown here is propagated to the RestRouteBuilder's
onException clauses
from(type A route)
//SomeRouteSpecificException gets handled by the onException clause above
//Anything else is propagated to the RestRouteBuilder's onException clauses
.to(write to DB route)
}
class TypeBRouteBuilder extends RouteBuilder {
setErrorHandlerBuilder(defaultErrorHandler().propagateUnknownExceptions());
onException(SomeOtherRouteSpecificException.class)
.handled(true)
//Any exception thrown here is propagated to the RestRouteBuilder's
onException clauses
from(type B route)
//SomeOtherRouteSpecificException gets handled by the onException clause
above
//Anything else is propagated to the RestRouteBuilder's onException clauses
.to(write to DB route)
}
class DBRouteBuilder extends RouteBuilder {
setErrorHandlerBuilder(defaultErrorHandler().propagateUnknownExceptions());
onException(AuthenticationException.class)
.redeliveryPolicy(new RedeliveryPolicy().maximumRedeliveries(10))
from(type A route)
//AuthenticationException gets handled by the onException clause above
//Anything else is propagated to either TypeA or TypeB onException
clauses, and possibly on to RestRouteBuilder's clauses
.to(the DB endpoint)
}
{code}
I'd be happy to work on implementing this option, assuming there isn't
opposition to creating a feature like this.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)