WebObjects/Web 服務/Web 服務消費者
外觀
1. WOWebServiceClient 類無法訪問安全的 HTTP Web 服務提供者(WO 5.2.2)
問題:com.webobjects.webservices.client.WOWebServiceClient 類在嘗試從安全的 HTTP Web 服務提供者讀取 WSDL 時,只丟擲類似這樣的異常
java.lang.IllegalArgumentException: Unable to open url: https:///cgi-bin/WebObjects/Test-Server.woa/ws/Test?wsdl at com.webobjects.webservices.client.WOWebServiceClient. initializeFromURL(WOWebServiceClient.java:72) at com.webobjects.webservices.client.WOWebServiceClient. <init>(WOWebServiceClient.java:59)
這個問題似乎與自簽名證書無關,因為我也用可信證書進行了測試。
這很奇怪。。。
當我嘗試在我的開發機器(它只有自簽名證書)上同時執行服務和客戶端,並指定 HTTPS WSDL 地址時,遇到了同樣的問題。但是在我將我的證書新增到 /Library/Java/Home/lib/security/cacerts 後
cd /Library/Java/Home/lib/security sudo keytool -import -keystore cacerts -alias myalias -file mycert.pem
(The default password for the cacerts keystore is "changeit")
一切正常。
當我透過 HTTPS 在具有有效可信證書的系統上執行服務時,我也沒有遇到訪問 WSDL 或服務的任何問題。
這最終不是一個真正的錯誤,感謝 PatrickRobinson 和 JAD 工具。這個異常通常在伺服器證書不可信時丟擲,即證書是自簽名的,沒有儲存在 Java 可信金鑰庫中,或者伺服器上的主機名與證書中的主機名不一致等等。
問題是 com.webobjects.webservices.client.WOWebServiceClient 類的 initializeFromURL() 方法沒有包裝和轉發捕獲的異常,它只丟擲 IllegalArgumentException,並顯示簡單的“無法開啟 url”或“無法從 url 建立服務”訊息,沒有任何詳細資訊。
為了避免此類問題,只需使用此處描述的程式碼放鬆 Java 安全管理器:如何信任任何 SSL 證書.