我在我的camel项目中有下面的代码。OnExceptionHandler是一个实用程序jar的一部分,我在路由中调用它来处理异常。但是当我从路由的doCatch块中抛出CustomException时,它并没有转到OnExceptionHandler中指定的onException,但打印为VmConsumer错误。我希望抛出的异常被处理程序类中的onException捕获。在其他情况下,如直接路由,它按预期工作。但在VM和SEDA路由的情况下,它不按预期工作。
public class OnExceptionHandler {
public static void setup() {
onException(CustomException.class)
.maxRedeliveries(3)
.bean(LogErrorBean.class)
.continued(true)
.end();
}
}
public class MyRoute extends Route builder {
public void configure(){
OnExceptionHandler.setup(this);
from("vm:myroute")
.doTry()
.to("jms:jmsqueue")
.doCatch(Exception.class)
.throwException(CustomException.class, "Error when sending to queue")
.end()
.to("direct:proceed")
end();
}
}
1条答案
按热度按时间njthzxwz1#
也许这个问题重复了这个问题:Exception not propagated to error handler in Apache Camel
已禁用Camel错误处理
当使用doTry.. doCatch.. doFinally时,常规的Camel错误处理程序不适用。这意味着任何onException或类似的事件都不会触发。原因是doTry.. doCatch.. doFinally实际上是它自己的错误处理程序,它的目的是模仿Java中try/catch/finally的工作方式。