Spring-ws返回不同的类型



我正在使用spring-ws作为web服务,似乎无法弄清楚如何为相同的初始请求返回不同的响应。假设我得到一个特定类型的请求,我们称它为FindGasRequest。现在我已经正确地设置了端点映射,这样当FindGasRequest进来时,它就映射到正确的端点,然后我执行一些业务逻辑,然后返回FindGasResponse。

这是我的问题。假设我得到一个FindGasRequest,然后在我的业务逻辑中,我决定不返回FindGasResponse,而是返回ListGasStationsResponse。如果@PayloadRoot标记的方法期望FindGasResponse,我该如何做到这一点?我想我怎样才能把有效载荷变成别的东西呢?

我确实设置了错误检查,以便我可以抛出异常,它将通过异常处理程序返回FindGasErrorResponse。所以我的第一个想法是做一些类似的事情,但似乎相当黑客抛出异常时,没有错误发生。

酱料,

假设您的消息模式和与客户端的契约允许在对FindGasRequest的响应中返回ListGasStationsResponse或FindGasResponse,那么您需要放弃基于注释的FindGas端点,而让端点扩展AbstractMarshallingPayloadEndpoint。

您应该重写AbstractMarshallingPayloadEndpoint。invokeInternal返回两种不同响应类型之一作为Object。然后,您的编组器(我使用Jaxb2Marshaller)应该能够自动接受该对象并为其中一种类型创建XML响应。

注意,您可能会混合使用基于注释的端点和xml配置的端点,在这种情况下,您应该按照下面的说明为它们设置映射:http://forum.springsource.org/showthread.php?78685-Mixing-annotations-with-xml-configuration-of-endpoints.

这个方法在Spring-WS 1.5中已经为我工作了。

最新更新