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
src/java.base/share/classes/java/util/ServiceLoader.java line 624:
> 622: try {
> 623: ctor = clazz.getConstructor();
> 624: } catch (NoSuchMethodException | LinkageError e) {
Hello Alan, unlike `Class.forName(...)` which specifies the `LinkageError` from
that method, the `Class.getConstructor()` doesn't currently specify this error.
Should that documentation be updated (as a separate work) to specify this?
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/30405#discussion_r3062434660