处理Spring-Integration转换器中的异常

时间:2011-06-27 09:29:24

标签: spring-integration

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

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

我可以:

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

然而,这意味着要两次解析文档并稍微重写一次。

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分: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>

此链将在调用变换器之前分配错误通道标头。如果变换器成功,它继续向下链,但如果它抛出异常,MessagingException将作为消息发送到myErrorChannel。 (如果您想要在链中稍后处理异常的方式,则可以在转换器之后使用另一个标头扩充器将errorChannel标头更新到您要发送异常的下一个位置。)

请参阅Spring Integration文档的Error Handling部分中的详细信息。