自定义Bean异常处理程序在VM路由的camel doCatch中不工作

4ngedf3f  于 2022-11-07  发布在  Apache
关注(0)|答案(1)|浏览(169)

我在我的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();
    }
}
njthzxwz

njthzxwz1#

也许这个问题重复了这个问题:Exception not propagated to error handler in Apache Camel
已禁用Camel错误处理
当使用doTry.. doCatch.. doFinally时,常规的Camel错误处理程序不适用。这意味着任何onException或类似的事件都不会触发。原因是doTry.. doCatch.. doFinally实际上是它自己的错误处理程序,它的目的是模仿Java中try/catch/finally的工作方式。

相关问题