2014-07-22 60 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聲明都會使問題複雜化。 –