【发布时间】:2014-01-22 19:00:05
【问题描述】:
我正在使用基于 Spring 集成的组件。该组件接收一些 XML 并用更多内容丰富了该 XML。
但是,如果发生异常,那么我想将接收到的输入 XML 作为失败消息发送,但是在当前场景中,它将保留部分丰富的 XML,因为有失败消息。
有什么方法可以更改 Exception 的失败消息,而后者又被消息异常包装。
【问题讨论】:
标签: java spring error-handling spring-integration
我正在使用基于 Spring 集成的组件。该组件接收一些 XML 并用更多内容丰富了该 XML。
但是,如果发生异常,那么我想将接收到的输入 XML 作为失败消息发送,但是在当前场景中,它将保留部分丰富的 XML,因为有失败消息。
有什么方法可以更改 Exception 的失败消息,而后者又被消息异常包装。
【问题讨论】:
标签: java spring error-handling spring-integration
由于情况如此特殊,我们需要查看您的配置,尤其是error-channel 的位置以及您如何丰富 XML。
但是,请记住,Message 是不可变对象,与它的每次交互都会提供一个新消息。但是payload 超出了消息传递的范围,它可能不是一成不变的。如果您的负载的某些属性发生更改,然后您遇到一些异常,您最终会收到带有inbound 消息的ErrorMessage(失败),但负载可能会更改其状态。
看起来是你的情况。
在开始丰富它之前,您应该考虑一些 payload-cloning 变体。
以下是关于此事的一些建议:https://jira.springsource.org/browse/INT-2979
【讨论】:
<header name="orig" expression="payload"/> 的标头丰富器)。然后,它将作为 failedMessage 上的标头(原始)可用。如果它是一个可变对象,那么这两个地方都会发生变化,所以你需要克隆,正如 Artem 建议的那样。