RFR JDK-8035158: Remove dependency on sun.misc.RegexpPool and friends

Pavel Rappo pavel.rappo at oracle.com
Wed Mar 19 18:03:41 UTC 2014


Hi everyone,

could you please review my change for JDK-8035158?

DefaultProxySelector uses sun.misc.RegexpPool to parse properties that 
configure the proxy settings. This code should be changed to use 
java.util.regex public API so that the classes in sun.misc.Regex* can be 
removed.

http://cr.openjdk.java.net/~chegar/8035158/webrev.00/

The main idea was to get rid of dependency on private regex engine and 
to use public API which is available since jdk4 -- java.util.regex.Pattern.

Thanks
Pavel

P.S. During this refactoring I may have found an erroneous behavior. In 
the current implementation when a duplicate disjunct is added into 
http.nonProxyHosts (as well as into ftp.nonProxyHosts) property, 
sun.misc.RegexpPool throws an exception:

throw new java.misc.REException(re + " is a duplicate");

Later while slicing pattern into a sequence of disjuncts 
sun.net.spi.DefaultProxySelector silently swallows this exception:

StringTokenizer st = new StringTokenizer(nphosts, "|", false);
try {
     while (st.hasMoreTokens()) {
     pool.add(st.nextToken().toLowerCase(), Boolean.TRUE);
     }
} catch (sun.misc.REException ex) {} // ***

That leads to a situation where resulting pattern is broken. Moreover 
the final result depends on a position of the duplicate in the property 
-- as the while loop abrupted as a whole, not just a single iteration.

In my case I was testing with http.nonProxyHosts=localhost when noticed 
this issue. In the list of default loopback aliases localhost happens to 
sit first:

String defStringVal = "localhost|127.*|[::1]|0.0.0.0|[::0];

So when you set a value of http.nonProxyHosts to a "localhost", the only 
host you'll be able to go directly to will be that localhost. Because 
nothing else will have chance to be added into the pool after the 
exception is thrown.

That's the only behavior I've modified by now.


More information about the net-dev mailing list