Camel - 在 Global onException 中捕获抛出的异常

我试图在全局 onException 中捕获我自己的异常。在捕获到 Jaxb 异常后,我抛出了我的异常。但是 CustomException 不会被 onException 捕获


onException(Exception.class)

    .handled(true)

    .log("Globally Caught CustomException") 

    .end();


from("start:direct")

    .doTry()

        .unmarshal(soapMessage)

    .doCatch(JAXBException.class)

        .log("Locally Caught JAXBException")

        .throwException(new CustomException()

    .endDoTry();


拉风的咖菲猫
浏览 203回答 2
2回答

四季花海

根据https://people.apache.org/~dkulp/camel/try-catch-finally.html(参见Camel error handling is disabled部分),使用doTry .. doCatch .. doFinallyCamel 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,第二版)。

噜噜哒

试试这个,我刚刚修改了您的代码以重现它似乎有效: 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();日志输出:
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java