Test case: package util.net;
import java.io.IOException; import java.net.MalformedURLException; import java.net.Proxy; import java.net.ProxySelector; import java.net.SocketAddress; import java.net.URI; import java.net.URL; import java.net.URLConnection; import java.util.Collections; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; /** * * @author i30817 */ public class ProxySelectorBugTest { public ProxySelectorBugTest() { } @BeforeClass public static void setUpClass() throws Exception { } @AfterClass public static void tearDownClass() throws Exception { } @Before public void setUp() { } @After public void tearDown() { } /** * */ @Test public void testURLConnectionDoesntBypassProxySelector(){ ProxySelector proxySelector = ProxySelector.getDefault(); ProxySelector.setDefault(new UserProxySelector()); try { //This calls the installed proxy selector. URL u = new URL("http://www.yahoo.com"); URLConnection conn = u.openConnection(); conn.connect(); } catch (Exception ex) { Logger.getLogger(ProxySelectorBugTest.class.getName()).log(Level.SEVERE, null, ex); } ProxySelector.setDefault(proxySelector); } class UserProxySelector extends ProxySelector{ @Override public void connectFailed(URI uri, SocketAddress sa, IOException ioe) { } @Override public List<Proxy> select(URI uri) { try { //bug here, the java doc say that this will bypass the installed //proxyselector but it doesn't. URL u = new URL("http://www.google.com"); URLConnection conn = u.openConnection(Proxy.NO_PROXY); conn.connect(); } catch (Exception ex) { Logger.getLogger(UserProxySelector.class.getName()).log(Level.SEVERE, null, ex); } return Collections.singletonList(Proxy.NO_PROXY); } } }