2 回答
TA贡献1811条经验 获得超5个赞
根据https://people.apache.org/~dkulp/camel/try-catch-finally.html(参见Camel error handling is disabled部分),使用doTry .. doCatch .. doFinally
Camel Error Handler 时不适用。因此,OnException
不会触发任何。
如果你想用 捕获异常,OnException
你应该直接抛出它而不是在DoTry .. DoCatch
. 现在您可能想创建两个onException
,一个处理Exception.class
,一个处理JAXBException.class
。
onException(Exception.class) .handled(true) .log("Globally Caught CustomException") .end(); onException(JAXBException.class) .handled(true) .throwException(new CustomException()) .end();
但是第一个onException
不会被调用,因为Camel 不允许在已经处理错误的情况下进行进一步的错误处理。这是由 完成的org.apache.camel.processor.FataFallbackErrorHandler
,它捕获新的异常,记录警告,将其设置为 Exchange 上的异常,并停止任何进一步的路由(Camel In Action,第二版)。
TA贡献1784条经验 获得超7个赞
试试这个,我刚刚修改了您的代码以重现它似乎有效:
onException(Exception.class)
.handled(true)
.log("Globally Caught CustomException")
.end();
from("timer://simpleTimer?period=1000")
.setBody(simple("Timer at ${header.firedTime}"))
.to("direct:demo");
from("direct:demo")
.doTry()
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
throw new JAXBException("Some Exception");
}
})
.doCatch(JAXBException.class)
.log("Locally Caught JAXBException")
.throwException(new CustomException())
.endDoTry();
日志输出:
添加回答
举报