亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

日志輸出:

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

查看完整回答
反對 回復 2023-03-02
  • 2 回答
  • 0 關注
  • 265 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號