ServiceLoader specifies its iterator methods to throw ServiceConfigurationError (SCE) when there is an error locating, loading or instantiating a service provider.
There are linkage error cases where the LinkageError is propagated rather than throwing SCE with the LinkageError as cause. These typically arise in "bad environments" such as a mismatch between compile-time and run-time, missing dependencies, or maybe instrumentation/injection that has modified classes with references to classes that are not visible at run-time. The behavior for these cases has varied a bit over time. Since JDK 9 (when ServiceLoader was significantly re-implemented), a LinkageError thrown by Class.forName when attempting to load a service provider class is propagated without throwing SCE. Since JDK 24 (when support for the security manager was removed), if getting the no-arg the constructor triggers class loading and a LinkageError is thrown then is propagated without throwing SCE. The proposal here is to change the implementation to throw SCE consistently for these cases. This would be observable change so there is a CSR to review the impact. One of the existing tests for "bad" annotation processors needed to be updated to handle the ServiceConfigurationError as that test had worked around the issue and was handling the cause instead. ------------- Commit messages: - Merge branch 'master' into JDK-8350481 - Test cleanup - Merge branch 'master' into JDK-8350481 - Merge branch 'master' into JDK-8350481 - Update - Merge branch 'master' into JDK-8350481 - Add JDK-8196182 - Move test to new directory/name - Merge branch 'master' into JDK-8350481 - JDK-8350481 only Changes: https://git.openjdk.org/jdk/pull/30405/files Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=30405&range=00 Issue: https://bugs.openjdk.org/browse/JDK-8196182 Stats: 304 lines in 11 files changed: 279 ins; 4 del; 21 mod Patch: https://git.openjdk.org/jdk/pull/30405.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/30405/head:pull/30405 PR: https://git.openjdk.org/jdk/pull/30405
