我有一条带有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()是否具有较高的属性?以我的理解,当地渔获的优先级更高。

附言删除onException()会使doCatch()被调用。但是,我有理由保留两者。
骆驼版本为:org.apache.camel:camel-cxf:2.21.0.000033-fuse-000001-redhat-1

最佳答案

当您有doTry .. doCatch块并调用另一条路线时,例如通过

.to("direct:internalroute")


然后,您需要关闭该路由上的错误处理,例如

from("direct:internalroute")
  .errorHandler(noErrorHandler())


如果您希望所有错误处理仅通过doTry .. doCatch块进行。

10-02 22:27