【问题标题】:How can i preserve the payload in Mule when an Exception is caught?当捕获到异常时,如何在 Mule 中保留有效负载?
【发布时间】:2015-12-08 18:34:47
【问题描述】:

我使用了“捕获异常策略”来捕获流程中出现的任何异常。现在我想在引发异常之前打印有效负载。有没有办法在 mule 中实现这一点?

【问题讨论】:

    标签: exception-handling mule esb


    【解决方案1】:

    将有效负载存储在会话变量中并在捕获异常策略中打印。

    【讨论】:

    • 感谢您的回复。我的原始有效载荷经过了一些处理。现在一个例外来了。那么我如何能够在不知道异常发生在哪里的情况下将这个处理过的有效负载存储在一个变量中呢?
    【解决方案2】:

    您可以使用 message.getExceptionPayload() 从 MuleMessage 获取异常有效负载,但是,当发生异常时,有效负载会被消耗,并且为了获得异常之前的原始有效负载,您必须求助于有效负载的存储在像 <set-variable variableName="originalPayload" value="#[message.payload]" /> 这样的变量中,然后在发生异常后使用 MEL #[flowVars.originalPayload] 访问它(如果您在 JAVA 组件中,则使用 message.getInvocationProperty("originalPayload"))。

    这里有一些链接供您参考,尽管这会更深入地了解该主题:

    https://docs.mulesoft.com/mule-user-guide/v/3.6/exception-strategy-most-common-use-cases

    Why is Mule payload getting lost in <catch-exception-strategy> for java.net.ConnectException

    Mule ESB - Catch Exception Strategy block and Payload

    您可以对变量使用会话作用域,这样它就不会丢失。

    -Shanky G.

    【讨论】:

    • 感谢您的回复。我的原始有效载荷经过了一些处理。现在一个例外来了。那么我如何能够在不知道异常发生在哪里的情况下将这个处理过的有效负载存储在一个变量中呢?
    • 抱歉回复晚了。我遇到了 Mule 服务器通知,您可以使用它来监听某些事件甚至异常。如果您还没有找到任何满足您要求的解决方案,也许这可以帮助您。
    【解决方案3】:

    您可以通过拖动“捕获异常策略”来尝试以下操作

     <catch-exception-strategy doc:name="Catch_Exception_Strategy">
            <logger message="Exception---" level="INFO" doc:name="Logger"/>
            <set-variable variableName="SetException" value="#[exception.message]" doc:name="SetException"/>
            <set-payload value="#[payload]" doc:name="FailedToEvaluateTheTask"/>
        </catch-exception-strategy>
    

    希望对你有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-16
      • 2014-03-04
      • 1970-01-01
      • 1970-01-01
      • 2015-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多