多版本化WSDL的最佳方法

时间:2014-07-22 13:09:02

标签: spring-integration

我们有一个包含6个不同服务端点的Web服务,因此有6个不同的WSDL。我们正在为底层基础架构使用spring集成。此特定项目将支持多个版本,这些版本正常运行。

据我所知,我可以通过以下三种方式为WSDL提供服务:

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

前两种方法不能很好地扩展,我必须为每个版本添加一组新的WSDL定义,并且由于id指定了WSDL位置,因此用户必须访问诸如service1_v1.wsdl,service1_v2.wsdl之类的内容。等等。例如,以下是两个版本的静态wsdls的配置:

<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"/>

最后一种方法涉及处理任何wsdl请求的servlet,并使用request参数确定版本。但是,我无法使用任何内置的spring功能,例如transformLocations。

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

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

1 个答案:

答案 0 :(得分:0)

您应该能够以MessageDispatcherServlet使用的documented in the Spring Web Services Reference使用相同的类,以编程方式执行此操作。

但请注意,caution有关于动态创建WSDL的信息。