On Fri, 10 Apr 2026 05:20:15 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.
>
> Alan Bateman has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   Move test sources into text blocks

This looks good to me.

Looking briefly at the implementation in the ServiceLoader, this change even 
impacts services provided by modules. The new test exercises the services in 
service configuration files. So at a future date we could probably introduce a 
test which exercises the services provided by modules too.

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

Marked as reviewed by jpai (Reviewer).

PR Review: https://git.openjdk.org/jdk/pull/30405#pullrequestreview-4087750338

Reply via email to