Apache camel 如何在apache camel中处理异常块中的异常

Apache camel 如何在apache camel中处理异常块中的异常,apache-camel,onexception,Apache Camel,Onexception,我试图在OneException中处理apache camel中的异常。如果可能的话,有人能指导我吗 我已经编写了另一个OneException,它将处理所有异常,但流不会传输到该异常块 onException(SchemaValidationException.class) .to("xslt:stylesheet/example/TransformErrorBlock.xsl?saxon=true") .log("Validation error in rec

我试图在OneException中处理apache camel中的异常。如果可能的话,有人能指导我吗

我已经编写了另一个OneException,它将处理所有异常,但流不会传输到该异常块

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

我的期望是,如果此块中存在异常,它应该被另一个OneException块捕获

您不能这样做,因为根据设计,Camel只允许OneException块处理异常,否则,当OneException A处理OneException A时,您可能会以无休止的循环结束,这会导致新的异常,然后可能会再次由OneException A处理,从而在循环中产生无休止的循环。

这是您的路线上方定义的
OneException
?据我所知,在RouteBuilder级别上,它必须在路由之前定义。或者,尝试在路由级别定义on异常(至少测试行为),如所述。-编辑:该链接帖子确认,在routeOP期望将其
OneException
块中的异常连接到同一
routebuilder
中的另一个catch all
OneException
子句之前,必须定义routebuilder级别的异常处理程序。正如下面@Claus Ibsen所确认的那样,它不会工作.onException(SchemaValidationException.class).doTry().to(“xslt:stylesheet/example/TransformErrorBlock.xsl?saxon=true”).log(“接收消息中的验证错误,发送的响应:${body}”).doCatch(Exception.class).log(“无法处理输入文件”).handled(true);我做过类似的事情,但似乎不是一种优雅的处理方式。汉克斯,我误解了这个问题。是的,你回答的容易,但不是我的问题::-)只是开玩笑而已;-)。顺便说一句:你的书很好抱歉-我不确定处理OneException块中引发的异常的最佳实践是什么?在我使用事务性AMQ客户端的过程中,我可以看到AMQ重新交付/DLQ策略起作用,但我想知道是否有办法将这些异常直接发送到DLQ或其他错误队列?
onException(SchemaValidationException.class)
        .to("xslt:stylesheet/example/TransformErrorBlock.xsl?saxon=true")
        .log("Validation error in received message, response sent: ${body}")
        .handled(true);