On Tue, 24 Mar 2026 15:31:38 GMT, Alan Bateman <[email protected]> wrote:

> 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.

test/jdk/java/util/ServiceLoader/linkageerrors/LinkageErrorsTest.java line 111:

> 109:      * provider class names.
> 110:      */
> 111:     private void createServicesonfigFile(Class<?> service,

Suggestion:

    private void createServicesConfigFile(Class<?> service,

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/30405#discussion_r3058050353

Reply via email to