一般に、特定のルートと 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