> On 9 Nov 2015, at 21:53, Steve Drach <steve.dr...@oracle.com> wrote:
> 
>>>> As to whether this is implementation vs. JAR URL spec then I assume it 
>>>> needs to be spec so that libraries can create URLs that will use runtime 
>>>> versioning when access the JAR.
>>>> 
>>> 
>>> Yeah, i don’t think we can avoid it.
>> 
>> Ok.  I guess I should put the information in JarURLConnection.
> 
> Actually it’s a bit strange documenting the #runtime fragment in 
> JarURLConnection, because none of the changes are in that class.  The changes 
> are in the sun.net.www.protocol.jar.JarURLConnection class that is not 
> publicly documented.
> 

You can document it as a “should” requirement for subclasses of 
j.n.JarURLConnection. For example:

  Subclasses of JarURLConnection that support multi-release JAR files should 
support URLs that refer to
  JAR runtime versioned entries. Such a URL is a URL referring to an entry 
modified to include the fragment “runtime”.
  Subclasses that do not support multi-release JAR files should ignore the 
fragment and process such URLs as if the
  fragment were not present.

Then you can refer to an example.

There is a chance that the fragment might perturb existing subclasses, likely 
only if the URL parsing is buggy. Grepcode does not report many external 
subclasses:

http://grepcode.com/search/usages?id=repository.grepcode.com$java$root@jdk$openjdk@7u40-b43@java$net@JarURLConnection&start=0&type=type&k=d

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.

Paul.

Reply via email to