0

我是 Spring 集成的新手,所以我可能会滥用术语。我有一个 ws:inbound-gateway 监听肥皂网络服务请求。

<int-ws:inbound-gateway id="myInGW"
                        request-channel="headersMapPopulationChannel"
                        reply-channel="ws-response-channel"
                        marshaller="marshaller"
                        unmarshaller="marshaller"/>

它将传入请求发送到 headersMapPopulationChannel,并将消息发送到适配器(用于从 JAXB 类转换为域),然后拆分器将其拆分为验证、日志记录和持久性。坚持不懈后,我正在根据请求运行与业务相关的事情。我想对所有这些都有异常控制点,这样我就可以管理在异常情况下该怎么做。我故意在业务类中放了一个 throw 异常语句。抛出异常,但我的频道似乎没有得到它。配置:

<int-ws:inbound-gateway id="myInGW"
                        request-channel="headersMapPopulationChannel"
                        reply-channel="ws-response-channel"
                        error-channel="ws-error-channel"
                        marshaller="marshaller"
                        unmarshaller="marshaller"/>

<int:channel id="ws-error-channel"/>

<int:service-activator input-channel="ws-error-channel"
                       expression="@exceptionHandlerService.handleThrowable(payload)"/>
<bean id="exceptionHandlerService" class="pack.integration.service.ExceptionHandlerService"/>

另外我不知道在我最外面的频道中控制异常是否正确。我应该在转发消息的任何地方收听异常吗?

4

2 回答 2

1

这是处理异常的正确方法。

异常将被包装在 a 中并作为 a 的有效负载MessagingException发送到。有两个属性(原始异常)和(导致异常的消息)。error-channelErrorMessageMessagingExceptioncausefailedMessage

如果要向客户端返回 SOAP 错误,错误通道流必须抛出异常。

如果您没有ErrorMessage在频道上看到 ,则肯定有其他东西正在捕获异常。

我建议您打开调试日志并通过系统跟踪消息。

于 2013-04-04T12:46:04.490 回答
0

我还使用分段网关将所有异常重定向到另一个消息流,并从那里决定如何处理它们。

于 2013-04-12T16:36:03.270 回答