camel中的异常处理 - doTry中的选择块

时间:2015-07-10 06:35:54

标签: apache-camel

在下面的代码中,有没有人可以解释一下在try中块的选择以及为什么它没有捕获RuntimeCamelException?

<doTry>
            <process ref="msgProcessor" />
            <choice>
                <when>
                    <simple>"false" == "true" &amp;&amp; ${exchangeProperty.status} == ${ref:SUCCESS}</simple>
                    <process ref="queryProcessor" />
                </when>
            </choice>
            <choice>
                <when>
                    <simple>"false" == "true" &amp;&amp; ${exchangeProperty.status} == ${ref:SUCCESS}</simple>
                    <process ref="compareProcessor" />
                </when>
            </choice>
            <doCatch>
                <exception>org.apache.camel.RuntimeCamelException</exception>
                <exception>java.lang.Exception</exception>
            </doCatch>
        </doTry>

我仍然遇到以下异常:

org.apache.camel.RuntimeCamelException: Scanner aborted because of an IOException!
at org.apache.camel.processor.Splitter$SplitterIterable$1.hasNext(Splitter.java:171)
at org.apache.camel.processor.MulticastProcessor.doProcessParallel(MulticastProcessor.java:268)
at org.apache.camel.processor.MulticastProcessor.process(MulticastProcessor.java:225)
at org.apache.camel.processor.Splitter.process(Splitter.java:104)

1 个答案:

答案 0 :(得分:0)

我的第一眼看到的猜测是你的异常没有被try catch处理,而是被传播回到路由的错误处理。

尝试在发现错误时添加一些处理: - set handling = true - 删除自定义日志 - 停止在交易所结束处理。

这样可以很容易地确认是否正在调用错误处理程序。