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. >> >> --------- >> - [x] I confirm that I make this contribution in accordance with the >> [OpenJDK Interim AI Policy](https://openjdk.org/legal/ai). > > Alan Bateman has updated the pull request incrementally with one additional > commit since the last revision: > > Move test sources into text blocks Thank you Alan! ------------- PR Comment: https://git.openjdk.org/jdk/pull/30405#issuecomment-4234568612
