我目前正在使用Maven的jaxws-maven-plugin自動化Web服務客戶端生成的項目。目前,Web服務客戶端是使用用於Web服務客戶端生成的IBM RAD 8.0內部工具生成的。將wsimport綁定文件更改爲指向本地資源
這工作正常,但隨着Web服務數量的增加,這個過程變得太慢了。儘管我們可以讓Maven插件在客戶端項目中生成Java類,並在本地開發本地服務器時使用它們,但是當我們嘗試部署Web服務時,驗證Web服務失敗。 這是由於服務器基礎結構,當項目需要逐步完成測試,階段和生產服務器時,需要進一步部署,以便在每臺服務器上成功進行測試。
部署後,Websphere Portal Servr會嘗試根據包中生成的綁定Java文件中給出的WSDL定義來驗證生成的Web服務客戶端。當運行Maven插件,下面bindung產生:
MyProjectHttpService
static {
URL url = null;
WebServiceException e = null;
try {
url = new URL("http://localhost:9080/MyProjectWeb/sca/MyProjectExportWS?wsdl");
} catch (MalformedURLException ex) {
e = new WebServiceException(ex);
}
因爲生成的Web項目需要從同樣的EAR文件中的每個服務器上運行,我們無法改變的URL服務器之間的WSDL文件。
RAD的進口工具產生使用類加載器來獲取文件綁定文件:
MyProjectHttpService
static {
URL url = null;
try {
url = com.my.package.portal.MyProjectHttpService.class.getResource("/WEB-INF/wsdl/project/interfaces/MyProjectExport1.wsdl");
if (url == null) throw new MalformedURLException("/WEB-INF/wsdl/project/interfaces/MyProjectExport1.wsdl does not exist in the module.");
} catch (MalformedURLException e) {
...
}
爲了找到我們儘量去爲自己編寫Maven插件的解決方案它會下載XSD和WSDL文件並將它們放入構建包中,以便它們可以用於隨後使用wsimport插件生成Web服務客戶端,但是使用它們而不是。然而,這不是successull爲好,因爲綁定文件會以絕對路徑產生:
static {
URL url = null;
WebServiceException e = null;
try {
url = new URL("file:/D:/mavenworkspace/testproject/target/META-INF/wsdl/com/my/package/portal/ws/interfaces/MyProjectExport1.wsdl");
} catch (MalformedURLException ex) {
e = new WebServiceException(ex);
}
}
對我們如何才能解決這個問題將受到歡迎任何幫助。我們並不關心如何實現將我們的jar中的所有XSD和WSDL文件相對引用的結果,因此,當Web服務器嘗試驗證Web服務客戶端時,環境並不重要。
PS:不幸的是,我們也無法爲不同環境使用多個配置文件。