WOWebServiceClient constructor hanging
It is possible to hang your WO app instance with the WOWebServiceClient constructor unless you set a connection timeout to something other than the java default. To do this, you need to set the command line flag
By default, the timeout is infinite. In this instance, you would be setting the timeout to 30 seconds. If you do not set a fixed time for the timeout, a refused connection attempt (caused by a non responsive web services server, for instance) will hang your application instance.
SSL WebServices Problems
1. WOWebServiceClient class can't access to a secure HTTP Web service provider (WO 5.2.2):
The com.webobjects.webservices.client.WOWebServiceClient class just throws exception like this one when it tries to read the WSDL from a secure HTTP Web service provider:
java.lang.IllegalArgumentException: Unable to open url: https://localhost/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
This problem doesn't seem related to self signed certificate, since I've performed tests with trusted certificate as well.
That's strange . . .
I had the same problem when I was trying to run both service and client on my development machine (which has only a self-signed cert), and specifying an HTTPS WSDL address. But after adding my cert to /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")
everything works fine.
I also had no trouble accessing either the WSDL or the service, via HTTPS, when the service was run on a system with a valid, trusted cert.
It's finally not a real bug, thanks to Patrick Robinson and to the JAD tool. This exception is typically thrown when the server certificate is not trusted, i.e. the certificate is self-signed and not stored in the Java trusted keystore, or the hostname is not the same on the server and in the certificate, etc.
The problem is that the initializeFromURL() method of the com.webobjects.webservices.client.WOWebServiceClient class doesn't wrap and forward the catched exceptions, it only throws IllegalArgumentException with a simple " Unable to open url" or " Unable to create service from url" message, without any details.
To avoid such problem, just relax the Java security manager using code like one described here: How to Trust Any SSL Certificate.