为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

拉风的咖菲猫 2023-03-02 10:39:20
我试图在全局 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();
查看完整描述

2 回答

?
四季花海

TA贡献1811条经验 获得超5个赞

根据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,第二版)。


查看完整回答
反对 回复 2023-03-02
?
噜噜哒

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();

日志输出:

//img1.sycdn.imooc.com//64000c9100017c1c19220235.jpg

查看完整回答
反对 回复 2023-03-02
  • 2 回答
  • 0 关注
  • 201 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信