JDK-8073667 : URL should not use service loader to lookup the jar protocol handler
  • Type: Bug
  • Component: core-libs
  • Sub-Component: java.net
  • Affected Version: 9
  • Priority: P3
  • Status: Closed
  • Resolution: Fixed
  • Submitted: 2015-02-23
  • Updated: 2016-06-13
  • Resolved: 2015-02-23
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 9
9 b53Fixed
Related Reports
Relates :  
Description
JDK-8064924 changed the way protocol handlers are being discovered. Protocol handlers are now being looked up using service loader. It is not appropriate to use service loader to look for 'jar' handlers, as services are typically deployed as jar files.  The following changes were accidentially omitted from the original changes for JDK-8064924.

diff --git a/src/java.base/share/classes/java/net/URL.java b/src/java.base/share/classes/java/net/URL.java
--- a/src/java.base/share/classes/java/net/URL.java
+++ b/src/java.base/share/classes/java/net/URL.java
@@ -1248,7 +1248,7 @@
                 checkedWithFactory = true;
             }
 
-            if (handler == null) {
+            if (handler == null && !protocol.equalsIgnoreCase("jar")) {
                 handler = lookupViaProviders(protocol);
             }
         }

Comments
#Test Results (version 2) #Mon Feb 23 17:19:03 GMT 2015 #checksum:85acb2272da93b7 #-----testdescription----- $file=/home/chhegar/repos/jdk9/dev/dev/jdk/test/java/util/stream/boottest/java/util/stream/DoubleNodeTest.java $root=/home/chhegar/repos/jdk9/dev/dev/jdk/test ... java.lang.Error: Circular loading of URL stream handler providers detected at java.net.URL.lookupViaProviders(URL.java:1191) at java.net.URL.getURLStreamHandler(URL.java:1252) at java.net.URL.<init>(URL.java:417) at sun.misc.URLClassPath$JarLoader.<init>(URLClassPath.java:636) at sun.misc.URLClassPath$3.run(URLClassPath.java:391) at sun.misc.URLClassPath$3.run(URLClassPath.java:377) at java.security.AccessController.doPrivileged(Native Method) at sun.misc.URLClassPath.getLoader(URLClassPath.java:376) at sun.misc.URLClassPath.getLoader(URLClassPath.java:353) at sun.misc.URLClassPath.access$000(URLClassPath.java:80) at sun.misc.URLClassPath$2.next(URLClassPath.java:293) at sun.misc.URLClassPath$2.hasMoreElements(URLClassPath.java:304) at java.lang.ClassLoader$2.hasMoreElements(ClassLoader.java:1273) at sun.misc.CompoundEnumeration.next(CompoundEnumeration.java:45) at sun.misc.CompoundEnumeration.hasMoreElements(CompoundEnumeration.java:54) at sun.misc.CompoundEnumeration.next(CompoundEnumeration.java:45) at sun.misc.CompoundEnumeration.hasMoreElements(CompoundEnumeration.java:54) at java.util.ServiceLoader$LazyIterator.hasNextService(ServiceLoader.java:352) at java.util.ServiceLoader$LazyIterator.hasNext(ServiceLoader.java:391) at java.util.ServiceLoader$1.hasNext(ServiceLoader.java:472) at java.net.URL$1.getNext(URL.java:1155) at java.net.URL$1.hasNext(URL.java:1170) at java.net.URL$2.run(URL.java:1199) at java.net.URL$2.run(URL.java:1196) at java.security.AccessController.doPrivileged(Native Method) at java.net.URL.lookupViaProviders(URL.java:1195) at java.net.URL.getURLStreamHandler(URL.java:1252) at java.net.URL.<init>(URL.java:417) at sun.misc.URLClassPath$JarLoader.<init>(URLClassPath.java:636) at sun.misc.URLClassPath$3.run(URLClassPath.java:391) at sun.misc.URLClassPath$3.run(URLClassPath.java:377) at java.security.AccessController.doPrivileged(Native Method) at sun.misc.URLClassPath.getLoader(URLClassPath.java:376) at sun.misc.URLClassPath.getLoader(URLClassPath.java:353) at sun.misc.URLClassPath.getResource(URLClassPath.java:219) at sun.misc.URLClassPath.getResource(URLClassPath.java:272) at java.lang.ClassLoader.getBootstrapResource(ClassLoader.java:1256) at java.lang.ClassLoader.getResource(ClassLoader.java:1085) at java.lang.ClassLoader.getResource(ClassLoader.java:1083) at java.net.URLClassLoader.getResourceAsStream(URLClassLoader.java:232) at org.testng.log4testng.Logger.initialize(Logger.java:322) at org.testng.log4testng.Logger.getLogger(Logger.java:147) at org.testng.TestNG.<clinit>(TestNG.java:106) at com.sun.javatest.regtest.TestNGAction$TestNGRunner.main(TestNGAction.java:155) at com.sun.javatest.regtest.TestNGAction$TestNGRunner.main(TestNGAction.java:145) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.sun.javatest.regtest.MainWrapper$MainThread.run(MainWrapper.java:94) at java.lang.Thread.run(Thread.java:745)
23-02-2015