Spring Integration中的错误处理期间的MessageTransformation异常

时间:2017-07-03 19:37:06

标签: java spring spring-integration

我有一个http inboundgateway并定义了一个到网关的错误通道。

<int-http:inbound-gateway 
    request-channel="requestChannel"  reply-channel="replyChannel" 
        supported-methods="POST" request-payload-type="com.test.RequestWsDTO"
    path="/trips/modify" error-channel="errorChannel" >
    <int-http:request-mapping consumes="application/json" produces="application/json" />
</int-http:inbound-gateway>

从网关进入转换器,将消息转换为适合ws outboundgateway的请求

<int:transformer id="segmentCancelTransformer" ref="segmentCancelTransformerBean" input-channel="segmentCancelChannel"
             method="transform" output-channel="rcsChannel"/>
    <beans:bean id="segmentCancelTransformerBean" class="com.test.SegmentCancelRequestTransformer" />

我从Transformer中抛出一个运行时异常。

我已经定义了一个服务激活器来处理异常

   <int:service-activator input-channel="errorChannel" ref="exceptionhandler" method="createErrorResponse"/>
<beans:bean id="exceptionTransformer" class="com.test.ExceptionHandler" />

在ExceptionHandler类中,我正在处理像

这样的异常
public  ErrorDTO createErrorResponse(ErrorMessage msg) {
        System.out.println("Exception occured "+msg.getPayload());
        ErrorDTO dto=new ErrorDTO ();
      ......................

msg.getPayload()显示的异常是“org.springframework.integration.transformer.MessageTransformationException”

异常消息堆栈跟踪:

Exception occured org.springframework.integration.transformer.MessageTransformationException: Failed to transform Message; nested exception is org.springframework.messaging.MessageHandlingException: nested exception

我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

这是非常正确的,也很有用。首先,您处理消息传递,松散耦合是组件之间的第一个原则。另一个优点是failedMessage设置为MessagingException的属性,您可以使用它来确定问题。

由于错误可能来自另一个线程,因此仅通过自定义异常很难确定错误。无论如何,你总是可以在堆栈跟踪中找到自己的原因。