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

Reply via email to