Spring-WS:带有 WSDL 多节点分类的 SimpleWsdl11Definition
Spring-WS 1.5:使用 SimpleWsdl11Definition,在 XML 配置中公开 WSDL 非常简单(来自 Spring-WS 文档):
<bean id="orders" class="org.springframework.ws.wsdl.wsdl11.SimpleWsdl11Definition">
<constructor-arg value="/WEB-INF/wsdl/Orders.wsdl"/>
</bean>
生成一个公开 WSDL 的 URL:
http://localhost:8080/spring-ws/orders.wsdl
SimpleWsdl11Definition bean id +“.wsdl”在部署时成为 WSDL URL 的叶子,它涵盖了单节点分类法。
我需要支持具有多节点分类法的 WSDL 的公开。
例如:
http://localhost:8080/spring-ws/domain/subdomain/foo.wsdl
在 Spring-WS 中这是如何实现的? Bean ID 属性不允许使用“/”字符,因此我想知道有什么方法可以影响 WSDL URL。
注意:不能选择使用生成的 WSDL(出于向后一致性的原因),例如使用 DefaultWsdl11Definition。与 SimpleWsdl11Definition 一样,我想将对 WSDL 的请求映射到静态 WSDL。
谢谢。
Spring-WS 1.5: Using SimpleWsdl11Definition, exposing a WSDL is straightforward (from Spring-WS doc) in XML configuration:
<bean id="orders" class="org.springframework.ws.wsdl.wsdl11.SimpleWsdl11Definition">
<constructor-arg value="/WEB-INF/wsdl/Orders.wsdl"/>
</bean>
Yields a URL exposing the WSDL at:
http://localhost:8080/spring-ws/orders.wsdl
The SimpleWsdl11Definition bean id + ".wsdl" becomes the leaf of the WSDL's URL when deployed, which covers a single-node taxonomy.
I need to support exposure of WSDLs that have multi-node taxonomies.
For instance:
http://localhost:8080/spring-ws/domain/subdomain/foo.wsdl
How is this accomplished in Spring-WS? Bean ID attributes do not allow "/" characters, so I wonder what ways exist to influence the WSDL URL.
Note: Using generated WSDLs will not be on option (for backward-consistency reasons), for instance with DefaultWsdl11Definition. As with SimpleWsdl11Definition, I'd like to map requests for the WSDL to the static WSDL.
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我遇到了同样的问题,使用不同的 url 公开两个版本的 Web 服务。
我的解决方案不是使用通用的 org.springframework.ws.transport.http.MessageDispatcherServletservlet 而是使用默认的 org.springframework.web.servlet.DispatcherServlet 并在我的 bean 配置中配置 url 映射到不同的 wsdl 版本。
我更喜欢这个解决方案,因为它无需子类化任何 spring 类即可工作。
web.xml:
beans.xml
因此,每个 wsdl 都在 SimpleUrlHandlerMapping-Bean 中配置的给定路径中公开。
I got the same problem exposing two versions of a webservice with different urls.
My solution was not using the generic org.springframework.ws.transport.http.MessageDispatcherServletservlet but the default org.springframework.web.servlet.DispatcherServlet and configuring the url mappings to the different wsdl versions in my bean config.
I prefer this solution because it works without subclassing any spring classes.
web.xml:
beans.xml
Thus each wsdl is exposed at the given path configured in the SimpleUrlHandlerMapping-Bean.
在研究了 spring-ws 源代码后,我发现不支持为静态源 WSDL 配置公开多节点路径。
因此,我对 MessageDispatcherServlet 和 SimpleWsdl11Definition 进行了子类化,并在我的 servlet 中提供了我自己的 WSDL 请求映射器,该映射器支持现有的 WsdlDefinition bean 以及我的“位置指定”WsdlDefinition bean。
产生以这种方式配置的能力:
一切都很好。
After poking around spring-ws source, I found there is no support for exposing a multi-node path for static-sourced WSDL configuration.
So I subclassed MessageDispatcherServlet and SimpleWsdl11Definition, and in my servlet, provided my own WSDL-request mapper that supports existing WsdlDefinition beans, as well as my "location-specified" WsdlDefinition bean.
Yields ability to configure in this sort of manner:
All is well.