On Fri, 30 May 2025 06:55:07 GMT, Jaikiran Pai <j...@openjdk.org> wrote:
>> Can I please get a review of this doc-only change which proposes to add an >> `@apiNote` on the constructors of `URLClassLoader` and `SecureClassLoader` >> to explain the current implementation of these constructors? This addresses >> https://bugs.openjdk.org/browse/JDK-8228773? >> >> As noted in that issue, this updated documentation is to help applications >> be aware that a `null` value which represents the bootstrap class loader >> when passed for `parent` class loader will mean that the constructed >> `URLClassLoader` may not be able to load all platform classes. >> >> Specifically, only a specific set of modules are mapped (at JDK build time) >> to the bootstrap class loader. Some modules like `java.sql` are visible to >> the platform class loader but not to the bootstrap classloader. The >> distinction between these class loaders is explained in the API >> documentation of `ClassLoader` class >> https://docs.oracle.com/en/java/javase/24/docs/api/java.base/java/lang/ClassLoader.html#builtinLoaders. >> >> Using `null` (which represents a bootstrap class loader) for `parent` when >> constructing the `URLClassLoader` then means that the class loader would not >> be able to load some of these platform classes. For example, consider: >> >> >> import java.net.*; >> >> public class Test { >> public static void main(String[] args) throws Exception { >> System.out.println("testing against Java " + >> System.getProperty("java.version")); >> >> final ClassLoader cl = new URLClassLoader(new URL[0], null); >> final Class<?> klass = cl.loadClass("java.sql.ResultSet"); // load a >> platform class that belongs to the java.sql module >> System.out.println("loaded " + klass + " using classloader: " + >> klass.getClassLoader()); >> >> } >> } >> >> which constructs the `URLClassLoader` with the bootstrap class loader as its >> parent and then attempts to load a platform class `java.sql.ResultSet`. >> Since this class' module is mapped to the platform class loader and not the >> bootstrap class loader, running this code against Java 9+ will result in a >> `ClassNotFoundException`: >> >> >> testing against Java 24 >> Exception in thread "main" java.lang.ClassNotFoundException: >> java.sql.ResultSet >> at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:349) >> at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:557) >> at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:490) >> at Test.main(Test.java:8) >> >> >> No new tests have been introduced and existing tes... > > Jaikiran Pai has updated the pull request incrementally with three additional > commits since the last revision: > > - replace system class loader reference with bootstrap class loader > - remove "the" > - {@code null} instead of null The CSR is now ready for review https://bugs.openjdk.org/browse/JDK-8358126 ------------- PR Comment: https://git.openjdk.org/jdk/pull/25517#issuecomment-2921445858