【发布时间】:2017-04-20 16:12:52
【问题描述】:
我有一个非常简单的集成流程:
<int:gateway id="integrationGateway"
service-interface="com.wheeler.fits.returns.messaging.MessagingGateway"
default-request-channel="transactionMatcher">
<int:method name="publishReturnedTransaction" request-channel="transactionMatcher"/>
</int:gateway>
<int:channel id="transactionMatcher"/>
<int:service-activator input-channel="transactionMatcher" requires-reply="true">
<bean class="com.wheeler.fits.returns.domain.MatchTransactionToOriginal">
<constructor-arg ref="achTransactionMapper"/>
<constructor-arg ref="bankTransactionDao"/>
<constructor-arg ref="clientMapper"/>
<constructor-arg ref="oldAchTransactionMapper"/>
</bean>
</int:service-activator>
服务激活器正在调用的方法尝试将消息中的数据与数据库中的某些数据进行匹配。如果是,则返回匹配的数据。如果没有,它将返回null。
如果我不设置required-reply=true,null 回复似乎会从集成流程中消失,导致服务接口永远不会返回,从而导致应用程序挂起。如果我确实设置了required-reply=true,我至少会得到一个异常,但应用程序仍然挂起,因为网关的服务接口永远不会返回:
[org.springframework.integration.handler.ReplyRequiredException: No reply produced by handler 'org.springframework.integration.config.ServiceActivatorFactoryBean#0', and its 'requiresReply' property is set to true.,
Spring 集成参考资料中的任何地方似乎都没有记录这种行为。我希望我的服务激活器将null 传递回网关,以便网关可以回复null。
这是我的网关服务接口:
public interface MessagingGateway {
RawMessageData publishReturnedTransaction(ReturnedTransactionData returnedTransactionData) throws ChannelPublishException;
}
如何让它像处理任何其他消息一样处理null?
【问题讨论】: