Camel doCatch 和 onException 优先级
Camel doCatch and onException priority
我有一条路线,doTry() - doCatch() 对用于特定路线和一般的 onException()。
onException(Exception.class)
.handled(true)
.log(LoggingLevel.ERROR, "An error occurred: ${exception.stacktrace}")
.setBody(simple("${exception}"))
.setHeader(Exchange.HTTP_RESPONSE_CODE, constant(500));
from("direct:mydirect")
.routeId("myRoute")
.doTry()
.to("direct:internalroute")
.doCatch(Exception.class)
.log(LoggingLevel.ERROR, "EXCEPTION: ${exception.stacktrace}")
.process(exceptionHandlerProcessor)
.setHeader(Exchange.HTTP_RESPONSE_CODE, constant(500))
.marshal(new JsonDataFormat(JsonLibrary.Jackson))
.doFinally()
.log("FINALLY")
.endDoTry();
内部路由抛出一个普通的 java.lang.Exception
throw new Exception("Catch me if you can!");
我希望在 doCatch() 中捕获异常并执行日志记录和处理操作。
但是,改为调用 onException()。
onException()的优先级高吗?以我的理解,本地捕获更优先。
P.S。删除 onException() 会使 doCatch() 被调用。但是我有理由保留两者。
骆驼版本是:org.apache.camel:camel-cxf:2.21.0.000033-fuse-000001-redhat-1
恕我直言,这不是优先级的问题,而是 design/implementation 的问题。请参阅文档:
"The onException clause is a mechanism for trapping, rather than
catching exceptions. That is, once you define an onException clause,
it traps exceptions that occur at any point in a route"
当你有一个 doTry .. doCatch 块并且你调用另一个路由时,比如你通过
.to("direct:internalroute")
然后您需要关闭该路由的错误处理,例如在
from("direct:internalroute")
.errorHandler(noErrorHandler())
如果您希望所有错误处理仅通过 doTry .. doCatch 块发生。
我有一条路线,doTry() - doCatch() 对用于特定路线和一般的 onException()。
onException(Exception.class)
.handled(true)
.log(LoggingLevel.ERROR, "An error occurred: ${exception.stacktrace}")
.setBody(simple("${exception}"))
.setHeader(Exchange.HTTP_RESPONSE_CODE, constant(500));
from("direct:mydirect")
.routeId("myRoute")
.doTry()
.to("direct:internalroute")
.doCatch(Exception.class)
.log(LoggingLevel.ERROR, "EXCEPTION: ${exception.stacktrace}")
.process(exceptionHandlerProcessor)
.setHeader(Exchange.HTTP_RESPONSE_CODE, constant(500))
.marshal(new JsonDataFormat(JsonLibrary.Jackson))
.doFinally()
.log("FINALLY")
.endDoTry();
内部路由抛出一个普通的 java.lang.Exception
throw new Exception("Catch me if you can!");
我希望在 doCatch() 中捕获异常并执行日志记录和处理操作。 但是,改为调用 onException()。
onException()的优先级高吗?以我的理解,本地捕获更优先。
P.S。删除 onException() 会使 doCatch() 被调用。但是我有理由保留两者。 骆驼版本是:org.apache.camel:camel-cxf:2.21.0.000033-fuse-000001-redhat-1
恕我直言,这不是优先级的问题,而是 design/implementation 的问题。请参阅文档:
"The onException clause is a mechanism for trapping, rather than catching exceptions. That is, once you define an onException clause, it traps exceptions that occur at any point in a route"
当你有一个 doTry .. doCatch 块并且你调用另一个路由时,比如你通过
.to("direct:internalroute")
然后您需要关闭该路由的错误处理,例如在
from("direct:internalroute")
.errorHandler(noErrorHandler())
如果您希望所有错误处理仅通过 doTry .. doCatch 块发生。