【问题标题】:Handling exceptions in a Spring-Integration transformer处理 Spring-Integration 转换器中的异常
【发布时间】:2011-06-27 09:29:23
【问题描述】:

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

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

我可以:

  • 通过路由器传递消息以检查转换器之前(或之后)是否缺少元素
  • 路由消息

但是,这意味着需要对文档进行两次解析和重新编写。

【问题讨论】:

    标签: spring-integration spring-integration


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      为了确定异常消息应该去哪里,您需要设置“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。 (如果您希望在链中稍后处理异常的方式有所不同,则可以在转换器之后使用另一个 header-enricher 将 errorChannel 标头更新到您要发送异常的下一个位置。)

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

      【讨论】:

        猜你喜欢
        • 2019-03-11
        • 2021-04-12
        • 1970-01-01
        • 2014-03-03
        • 1970-01-01
        • 2017-11-15
        • 2016-07-11
        • 1970-01-01
        相关资源
        最近更新 更多