我有一个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
我在这里做错了什么?
答案 0 :(得分:0)
这是非常正确的,也很有用。首先,您处理消息传递,松散耦合是组件之间的第一个原则。另一个优点是failedMessage
设置为MessagingException
的属性,您可以使用它来确定问题。
由于错误可能来自另一个线程,因此仅通过自定义异常很难确定错误。无论如何,你总是可以在堆栈跟踪中找到自己的原因。