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://127.0.0.1/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 证书.