我想在一条路线中一起使用OnException和OnComplition(Camel版本2.10.0.redhat-60024(:
from("direct:camelTestEndpoint").
onCompletion().
log("onCompletion1").
log("onCompletion2").
log("onCompletion3").
end().
onException(Throwable.class).
handled(true).
log("onException").
end().
log("route")
.throwException(new RuntimeException());
虽然它没有像我预期的那样工作。主路由中的异常导致 onComplition 路由在第一个处理器之后停止(它在 PipelineHelper 的 continueProcessing(( 方法中处理(。Camel 检查是否处理了异常,如果是,则停止处理。
输出:
route
onException
onCompletion1
我有没有温和的方式说骆驼它应该跳过这个(没有"骆驼错误处理程序处理"属性删除(?
谢谢
这是该版本的骆驼中的一个错误。
CAMEL-7707 已解决此问题。
- https://issues.apache.org/jira/browse/CAMEL-7707
作为解决方法,您需要在onComplete的第一个过程中手动从交换中删除这些详细信息。
例如类似的东西
// must remember some properties which we cannot use during onCompletion processing
// as otherwise we may cause issues
Object stop = exchange.removeProperty(Exchange.ROUTE_STOP);
Object failureHandled = exchange.removeProperty(Exchange.FAILURE_HANDLED);
Object caught = exchange.removeProperty(Exchange.EXCEPTION_CAUGHT);
Object errorhandlerHandled = exchange.removeProperty(Exchange.ERRORHANDLER_HANDLED);
//STEP1: call Successful Route
from("direct:Route_OnCompletion_OnSuccess")
.onCompletion()
.onCompleteOnly()
.log("On Complete Passed")
.to("direct:Route_OnSuccess")
.end()
.to("direct:Route_OnCompletion_OnFailure");
//STEP2: call Failure Route
from("direct:Route_OnCompletion_OnFailure")
.onCompletion()
.onFailureOnly()
.log("On Complete Failed "+ body())
.to("direct:Route_OnFailure")
.end()
.to("direct:Route_MainFlow");