apache-camel - doTry/doCatch 和全局 onException 行为
问题描述
我注意到在成功处理后不再调用doTry/doCatch
全局处理程序。onException
这是我的示例代码:
<doTry>
<to uri="direct:triggerError"/>
<doCatch>
<exception>com.foo.bar.MyException</exception>
<log message="IN DOCATCH"/>
</doCatch>
<doFinally>
<log message="IN FINALLY"/>
</doFinally>
</doTry>
<throwException message="Now handle it in global handler" exceptionType="com.foo.bar.MyOtherException"/>
在我的骆驼背景下,我有这个:
<onException>
<exception>com.foo.bar.MyOtherException</exception>
<handled>
<constant>true</constant>
</handled>
<log message="HANDLING MY OTHER EXCEPTION"/>
<to uri="direct:commonAPIErrorProcessor"/>
</onException>
我观察到异常被正确捕获doCatch
并被doFinally
调用,但onException
从未调用全局,我得到一个堆栈跟踪作为响应。我该如何解决?我用 Camel 3.4.0 和 3.7.0 试了一下,结果一样。
解决方案
您的示例中的问题是您在doTry
. 无论您使用 XML 还是 Java DSL,这似乎都让 Camel 感到困惑(在这两种 DSL 中效果相同)。
只要您在 中使用简单的“语句” doTry
,一切都会完美无缺。当您调用另一条路线时,正如您所描述的那样非常混乱。
Camel 捕获了另一条路由抛出的异常,但之后错误处理程序保持“禁用”状态。似乎Camel 失去了doTry
作用域,因此永远不会完成由doTry
.
因此,我假设“路由跳转”不是doTry/doCatch的预期用例。由于它覆盖了正常的错误处理,它可能应该只在路由中非常局部地使用。
推荐阅读
- php - 使用php的文件完整路径位置
- d3.js - 使用 D3 和 Angular 6 明智地绘制美国地图区域
- python - TensorFlow 多 GPU 损失
- xamarin - 绑定 FontSize 无法使用 Xamarin 表单?
- java - 如何将 java 数组转换为 prolog 列表并使用它进行 jpl 查询?
- angular - 如何使用材料表在angular2中使用$key
- linux - 链接两个不同版本的库
- html - 移动友好图像
- javascript - 如何在 Bootstrap Checkout 示例中调用我的函数?
- c# - 无法使用 AMQP.Lite 和 IBMMQ 8.0 发送消息