2010-05-11 90 views
1

內調用Web服務,我有一個簡單的Web服務坐在我們的內部網絡上。我使用SOAPUI做了一些測試,從WSDL生成了服務類,並編寫了一些Java代碼來訪問服務。一切都如預期一樣,因爲我能夠創建服務代理類並撥打電話。很簡單的東西。唯一的減速是讓java信任來自提供Web服務的機器的證書。這不是一個技術問題,而是我缺乏基於SSL的Web服務的經驗。 現在到我的問題。我編寫了一個簡單的EJB服務並將其部署到JBoss應用服務器4.3中,現在在之前的代碼中出現以下錯誤。問題從JBOSS EJB服務

12:21:50,235 WARN [ServiceDelegateImpl] Cannot access wsdlURL: https://WS-Test/TestService/v2/TestService?wsdl 

我可以在同一臺計算機使用錯誤消息的URL的應用服務器上運行的Web瀏覽器訪問的WSDL文件。我也可以在應用程序服務器所在的機器上運行訪問應用服務器之外的web服務的代碼(而不是從內部)。我不知道該從哪裏出發。我打開JBOSS中的調試日誌,沒有比上面顯示的更多。我在網上進行了一些搜索,發現在某些問題上有同樣的錯誤,但這些問題沒有答案。其中使用的wsimport ant任務與JAX-WS 2.2產生並且放置在包含在EJB封裝的罐子web服務類。 JBoss部署在RHEL 5.4中。我在JBOSS community forum上發佈了這篇文章,但在撰寫本文時沒有收到任何回覆。

回答

1

在看看ServiceDelegateImpl它試圖做的事:

InputStream爲= wsdlURL.openStream();

其中WSDLURL是一個非空URL。這意味着問題在於openStream()。我希望問題在於https根證書;我可以想象,JBoss在某處擁有可接受的根證書的存儲空間,並且你的根目錄不在那裏。

我會做的測試,這是一個HTTP服務器上部署該服務,使WSDLURL一個http URL。如果可行,那就是SSL層。

如果的SSL層,嘗試在答案手動添加密鑰庫,通過定義它在命令行上,喜歡this SO question

+0

感謝您的建議。我將嘗試通過HTTP部署該服務,以排除JBoss中的SSL層。我已經開始運行的服務器,並在詳細模式下我的測試客戶端,看看我能看到正在加載的類/瓶的差異,但這似乎看起來更合乎邏輯的地方。將回報。再次感謝 – 2010-05-18 12:47:42

+0

是的,錯誤在於JBoss不信任Web服務機器。 JBoss吞下了解決問題的例外。通過嘗試打開上面指出的流會產生以下異常。 javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路徑建設失敗:sun.security.provider.certpath.SunCertPathBuilderException:無法找到所以一旦我弄清楚如何要求的目標 有效證書路徑爲了正確讓JBoss服務器信任Web服務服務器證書,我將發佈該信息並將其標記爲已回答 – 2010-05-20 12:56:15

+0

@Rob Goodwin我鏈接的SO問題應該能夠回答這個問題。原則上,您可以在該密鑰庫中導入受信任的根證書以供JBoss使用。您當然也可以切換SSL驗證器實現,並將其設計爲接受任何內容,但這有點破解:) – extraneon 2010-05-20 13:21:19