>> Issue: https://bugs.openjdk.java.net/browse/JDK-8151542
>> <https://bugs.openjdk.java.net/browse/JDK-8151542>
>>
>> Webrev: http://cr.openjdk.java.net/~sdrach/8151542/webrev/
>> <http://cr.openjdk.java.net/~sdrach/8151542/webrev/>
>>
>> This changeset causes the URL returned from a ClassLoader.getResource(name)
>> invocation to be reified, that is the URL is a direct pointer to either a
>> versioned or unversioned entry in the jar file. The patch also assures that
>> jar URL’s are always processed by the URLClassPath.JarLoader. The
>> MultiReleaseJarURLConnection test was enhanced to demonstrate that reified
>> URLs are returned. The SimpleHttpServer test helper class was moved into
>> it’s own file.
> I was happy to see John's note on diction so I assume the method will be
> renamed. Have you considered making it public so that tools and libraries
> outside of the JDK can use this?
I opened an issue to track this — JDK-8155657. We’d like to get this
changeset, including the name change for getReifieidName, integrated as soon as
we can.
>
> One question on URLClassPath getLoader as it's not immediately obvious that
> this is needed. URLClassLoader specifies that any URL ending with "/" is
> assumed to be a directory.
Yes, and for regular jar files, that worked fine, but when we tried it with a
multi-release jar we found it by passed the part of JarLoader where we open the
jar file as a runtime jar, so, for example, this code fails to retrieve the
correct versioned entry, returning instead the base entry.
URL[] urls = { new URL(“jar:file:/foo/multi-release.jar!/“) };
URLClassLoader cldr = new URLClassLoader(urls);
Class<?> vcls = cldr.loadClass("version.Version”);
The change just corrects the logic when working with a “jar:…..!/“ URL.
> Are you planning to update java.net.JarURLConnection as that has special
> handling for #runtime that will need to be replaced.
No, we are not. Appending the #runtime fragment in URLClassPath is the way we
communicate to URLJarFile that the jar should be opened as a runtime versioned
JarFile. All this changeset does is assure that the internal implementation
details are not leaked to the outside world.
>
> -Alan