I have an application that needs to make a SOAP client request to a system on the Internet, so it needs to go though our HTTP proxy.
One can do this by setting system-wide values such as system properties:
// Cowboy-style. Blow away anything any other part of the application has set.
System.getProperties().put("proxySet", "true");
System.getProperties().put("https.proxyHost", HTTPS_PROXY_HOST);
System.getProperties().put("https.proxyPort", HTTPS_PROXY_PORT);
Or by setting the default ProxySelector (also a system-wide setting):
// More Cowboy-style! Every thing Google has found says to do it this way!?!?!
ProxySelector.setDefault(new MyProxySelector(HTTPS_PROXY_HOST, HTTPS_PROXY_PORT));
Neither of these is a wise choice if there is the possibility of other subsystems wanting to access web servers via different HTTP proxies or without any proxy. Using the ProxySelector
would let me configure which connections use the proxy, but I would have to figure that out for every single thing in the huge application.
A reasonable API would have a method that took a java.net.Proxy
object just like the java.net.Socket(java.net.Proxy proxy)
constructor does. That way the necessary settings are local to the part of the system that needs to set them. Is there some way to do this with a JAX-WS?
I do not want to set a system-wide proxy configuration.