title: How can I use an HTTP proxy for a JAX-WS request without setting a system-wide property?
body: <p>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.</p>
  
  <p>One can do this by setting system-wide values such as system properties:</p>
  
  <pre><code>// 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);
  </code></pre>
  
  <p>Or by setting the default ProxySelector (also a system-wide setting):</p>
  
  <pre><code>// More Cowboy-style!  Every thing Google has found says to do it this way!?!?!
  ProxySelector.setDefault(new MyProxySelector(HTTPS_PROXY_HOST, HTTPS_PROXY_PORT));
  </code></pre>
  
  <p>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 <code>ProxySelector</code> 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.</p>
  
  <p>A reasonable API would have a method that took a <code>java.net.Proxy</code> object just like the <code>java.net.Socket(java.net.Proxy proxy)</code> 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?</p>
  
  <p>I do not want to set a system-wide proxy configuration.</p>