gpt4 book ai didi

error-handling - Camel try catch onException

转载 作者:行者123 更新时间:2023-12-03 08:16:54 26 4
gpt4 key购买 nike

我在 Camel 环境中遇到onException问题。我使用的是通用错误处理程序,它会在发生异常时尝试使用xpath从交换中提取其他错误信息。 onException包含try/catch子句,可防止引发其他错误。

<onException>
<exception>java.lang.Exception</exception>
<handled>
<constant>true</constant>
</handled>
<!-- Try to get additional error information from the exchange-->
<doTry>
<setProperty name="error.code">
<xpath resultType="java.lang.String">//*[local-name()='error'][1]/@code</xpath>
</setProperty>
<doCatch>
<exception>java.lang.Exception</exception>
</doCatch>
</doTry>
</onException>
问题是,当xpath失败时(例如,当body不是xml时),try/catch似乎没有捕获异常。而是调用FatalFallbackErrorHandler并记录以下异常:
Content is not allowed in prolog.: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.

最佳答案

如您所见,onException块中的try/catch没有任何帮助。
每当处理错误期间发生异常时,FatalFallbackErrorHandler就会加入。这是Camel的“紧急中断”。您无法更改,它会执行以下操作:

  • 捕获异常
  • 记录警告
  • 在Exchange上设置异常(exception)
  • 停止任何进一步的路由

  • 这是为了防止错误处理程序之间发生无休止的循环循环,或者防止错误处理程序引发错误时可能出现的其他问题。

    您可以尝试做的(我想我从未尝试过)是为收集错误信息创建专用的 direct路由。
    您可以使用 .to("direct:collectErrorInformation")从错误处理程序中调用它。
    如果xpath引发错误,则您处于正常路由中,并且如果还为验证错误添加了 onException块,则可以正常处理。
    如果您愿意,请尝试一下。

    关于error-handling - Camel try catch onException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65406299/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com