2

一般に、特定のルートと onException() の doTry() - doCatch() ペアを持つルートがあります。

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() の優先度は高いですか? 私の理解では、地元の漁獲がより優先されます。

PS onException() を削除すると、doCatch() が呼び出されます。しかし、私には両方を維持する理由があります。Camel のバージョン: org.apache.camel:camel-cxf:2.21.0.000033-fuse-000001-redhat-1

4

2 に答える 2