spring-ws返回不同的类型

时间:2011-10-17 17:42:12

标签: xml spring spring-ws

我使用spring-ws进行Web服务,似乎无法弄清楚如何为同一个初始请求返回不同的响应。让我们说我收到某种类型的请求,我们称之为FindGasRequest。现在我已经正确设置了端点映射,以便当FindGasRequest进入时,它会映射到正确的端点,然后执行一些业务逻辑,然后返回FindGasResponse。

这是我的问题。假设我得到了一个FindGasRequest,然后在我的业务逻辑中,我确定我想要返回一个ListGasStationsResponse而不是返回一个FindGasResponse。如果@PayloadRoot标记的方法期望FindGasResponse,我该怎么做?我想如何将有效载荷更改为其他内容?

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

1 个答案:

答案 0 :(得分:2)

酱,

假设您的消息架构和与客户端的契约允许返回ListGasStationsResponse或FindGasResponse以响应FindGasRequest,您将需要放弃基于注释的FindGas端点,而是使您的端点扩展AbstractMarshallingPayloadEndpoint。

然后,您应该覆盖AbstractMarshallingPayloadEndpoint.invokeInternal以将两种不同的响应类型之一作为Object返回。您的marshaller(这对我来说适用于Jaxb2Marshaller)应该能够自动获取该Object并为其中一种类型创建XML响应。

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

这种方法在Spring-WS 1.5中对我有用。