【问题标题】:How to handle an exception in an exception block in apache camel如何在apache camel的异常块中处理异常
【发布时间】:2019-06-12 20:14:09
【问题描述】:

我正在尝试在 onException 中处理 apache camel 中的异常。如果可能的话,有人可以指导我吗?

我已经写了另一个 onException 来处理所有的异常,但是流程并没有转移到那个异常块

onException(SchemaValidationException.class)
        .to("xslt:stylesheet/example/TransformErrorBlock.xsl?saxon=true")
        .log("Validation error in received message, response sent: ${body}")
        .handled(true);

我的期望是如果这个块中有异常,它应该被另一个 onException 块捕获

【问题讨论】:

  • onException 是在您的路线上方定义的吗?据我记得在 RouteBuilder 级别上,它必须在路由之前定义。或者尝试在路由级别定义 on 异常(至少测试行为),就像在here 中描述的那样。 - 编辑:链接的帖子确认必须在路由之前定义路由构建器级别的异常处理程序
  • OP 期望他们的 OnException 块中的异常被连接到同一个 RouteBuilder 中的另一个包罗万象的 OnException 子句。正如下面的@Claus Ibsen 所证实的那样,它不会起作用。
  • onException(SchemaValidationException.class).doTry() .to("xslt:stylesheet/example/TransformErrorBlock.xsl?saxon=true") .log("收到消息中的验证错误,已发送响应: ${body}").doCatch(Exception.class).log("无法处理输入文件") .handled(true);我做过这样的事情,但似乎不是一种优雅的处理方式
  • 谢谢,我误解了这个问题。

标签: apache-camel onexception


【解决方案1】:

您不能这样做,因为 Camel 仅允许 onException 块处理异常,否则当 onException A 由 onException 处理时,您可能会导致无限循环,这会导致一个新异常,然后可能由 onException A 再次处理,如此循环往复。

【讨论】:

  • 是的,你回答的很简单,但不是我的问题:stackoverflow.com/questions/56462217/… :-) 开玩笑的 ;-)。顺便说一句:你的书很好
  • 抱歉 - 我不确定处理 onException 块中引发的异常的最佳做法是什么?在我使用 Transacted AMQ 客户端的路由中,我可以看到 AMQ 重新传递/DLQ 策略启动,但我想知道是否有办法将这些异常直接发送到 DLQ 或其他错误队列?
猜你喜欢
  • 1970-01-01
  • 2014-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-07
  • 1970-01-01
  • 2016-05-26
相关资源
最近更新 更多