On 10/11/2015 09:06, Paul Sandoz wrote:
:

It’s more common to register a URLStreamHandlerFactory via 
URL.setURLStreamHandlerFactory. I suspect that is used more for supporting different 
URL schemes than for overriding the “jar” scheme. This is a very delicate area, 
override the “jar" scheme might be risky given the interaction with class 
loaders. IMO the URLs returned from JDK ClassLoaders should be using URL schemes 
that are not overridable, but it’s probably too late to change that.

We had to re-examine this area in preparation for modules and java.net.URL has the following in its javadoc:

     * Some protocol handlers, for example those used for loading platform
* classes or classes on the class path, may not be overridden. The details
     * of such restrictions, and when those restrictions apply (during
* initialization of the runtime for example), are implementation specific
     * and therefore not specified.

At things stand then the file and jrt protocol handlers are not overridable. The jar protocol handler can be overridden but not via the ServiceLoader mechanism (for obvious reasons) and only after the VM/runtime has been initialized.

The Java Plugin and Java Web Start in Oracle's builds is the only case that I'm aware of where the jar protocol handler is overridden.

-Alan

Reply via email to