我最近解决了 problem of the direct streaming with Spring WS ,感谢 Arjen 的快速响应。技巧是在 Axiom 消息工厂中禁用负载缓存。
我现在正在为那个全局决定而苦恼,我们必须为整个系统启用或禁用有效负载缓存。我们希望拥有带有流式传输的 Web 服务以及一些启用验证的 Web 服务(如果禁用有效负载缓存,这是不可能的)
那么是否可以将特定的端点映射到特定的消息工厂?使用 Web 服务客户端很容易,但是端点呢?有什么想法吗?
谢谢!
最佳答案
你是对的,在客户端将特定的 WebServiceMessageFactory
实例传递给 WebServiceTemplate
构造函数非常容易。
无论如何,我想在服务器端也是可能的。
如果您可以使用不同的 url 映射,我发现最简单的方法是基于 web.xml
中两个(或更多)不同的 MessageDispatcherServlet
的配置。然后您只需将您喜欢的 WebServiceMessageFactory
实例的特定 bean 名称作为 init 参数传递。像这样:
<servlet>
<servlet-name>ws1</servlet-name>
<servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/conf/ws1-servlet.xml</param-value>
</init-param>
<init-param>
<param-name>messageFactoryBeanName</param-name>
<param-value>defaultMessageFactory</param-value>
</init-param>
</servlet>
<servlet>
<servlet-name>ws2</servlet-name>
<servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/conf/ws2-servlet.xml</param-value>
</init-param>
<init-param>
<param-name>messageFactoryBeanName</param-name>
<param-value>streamingMessageFactory</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>ws1</servlet-name>
<url-pattern>/ws1</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ws2</servlet-name>
<url-pattern>/ws2</url-pattern>
</servlet-mapping>
然后,您只需将不同的消息工厂 bean 添加到您的 spring-ws 上下文中即可。
希望这对您有所帮助。
关于java - 我们可以在 Spring WS 中使用多个消息工厂吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6775332/