2014-07-22 61 views
0

我们有一个包含6个不同服务端点的Web服务,因此有6个不同的WSDL。我们正在为底层基础设施使用Spring集成。这个特定的项目将支持多个版本,这是正常工作。多版本化WSDL的最佳方法

据我了解,我可以服务器的WSDL的三种方式之一:

> - <static-wsdl> 
> - <dynamic-wsdl> 
> - custom servlet approach 

前两种方法不能很好地扩展,我将不得不增加一组新的WSDL定义每个版本和自该ID指定WSDL位置,用户必须访问像service1_v1.wsdl,service1_v2.wsdl等。例如,这里是配置会是什么样静态的WSDL的两个版本:

<sws:static-wsdl id="service1_v1" location="/WEB-INF/wsdl/v1/service1.wsdl"/> 
<sws:static-wsdl id="service2_v1" location="/WEB-INF/wsdl/v2/service2.wsdl"/> 
... 
<sws:static-wsdl id="service1_v2" location="/WEB-INF/wsdl/v2/service1.wsdl"/> 
<sws:static-wsdl id="service2_v2" location="/WEB-INF/wsdl/v2/service2.wsdl"/> 
... 
<sws:static-wsdl id="service1_v3" location="/WEB-INF/wsdl/v3/service1.wsdl"/> 
<sws:static-wsdl id="service2_v3" location="/WEB-INF/wsdl/v3/service2.wsdl"/> 

最后一种方法会涉及一个处理任何w的servlet sdl请求,并使用请求参数确定版本。但是,我将无法利用任何内置弹簧功能,比如transformLocations。

是否有可能以编程方式生成WSDL?我可以添加一个maven任务来生成WSDL并在启动时添加spring bean。

我想避免的是有很多配置,并且每次添加新版本或弃用一个配置时都必须更新此配置。我已经在SI中有一个机制来将消息正确地路由到适当的版本化端点,只需要最终确定WSDL映射。

回答

0

您应该能够以编程方式使用MessageDispatcherServlet使用的相同类作为documented in the Spring Web Services Reference

但是请注意,那里有关于动态创建WSDL的caution

+0

谢谢。对不起,我不是很清楚。我想通过某种构建以编程方式生成WSDL,在发布到生产之前将它们检入一次,然后在代码中创建static-wsdl bean。目的是为了最大限度地减少我们为映射WSDL而必须执行的大量配置。我们目前正在使用dynamic-wsdl,但由于涉及风险,这仅用于开发目的。在这一天结束时,我不想为新版本更新我们配置的多个部分,每次添加wsdl声明都会使问题复杂化。 –