4

我有一个接受 org.w3c.dom.Document 并返回域对象的这很好。如果缺少元素,我会引发应用程序异常。

但是,我想将该异常放到错误通道上,而不是通过一系列处理程序冒泡返回它当前的工作方式。如果有一种方法可以在转换失败的情况下指定错误通道,那就太好了。

我可以:

  • 通过路由器传递消息以在变压器之前(或之后)检查缺失的元素
  • 路由消息

然而,这意味着既要对文档进行两次解析,又要进行一些重写。

4

2 回答 2

5

我想出的答案是将转换器的返回类型从域 POJO 更改为 Message。然后,在异常情况下,返回一条消息。然后异常由有效负载类型路由器路由到正确的处理程序。

于 2011-07-04T08:00:02.850 回答
0

为了确定异常消息应该去哪里,您需要设置“errorChannel”标头。例如,

<int:chain input-channel="myInputChannel">
    <int:header-enricher>
        <int:error-channel ref="myErrorChannel" />
    </int:header-enricher>
    <int:transformer ref="myTransformer" />
    <!-- Further actions after the transformer here -->
</int:chain>

该链将在调用转换器之前分配错误通道标头。如果转换器成功,它会继续沿链向下运行,但如果它抛出异常,aMessagingException将作为消息发送到 myErrorChannel。(如果您希望在链中稍后处理异常的方式有所不同,则可以在转换器之后使用另一个标头丰富器将 errorChannel 标头更新到您要发送异常的下一个位置。)

请参阅 Spring Integration 文档的错误处理部分中的详细信息。

于 2015-09-23T19:52:15.207 回答