Hannes Wellmann created ARIES-2108:
--------------------------------------
Summary: Catch 'NoClassDefFoundError' when loading
Service-Provider instances
Key: ARIES-2108
URL: https://issues.apache.org/jira/browse/ARIES-2108
Project: Aries
Issue Type: Bug
Components: SPI Fly
Affects Versions: spifly-1.3.6
Reporter: Hannes Wellmann
Loading ServiceProvider instances that depend on classes that are absent at
runtime (e.g. because they are contained in an optional dependency) throws a
{{NoClassDefFoundError}} instead of a {{{}ClassNotFoundException{}}}, which is
propagated to the caller and leads to an empty list of providers. Instead a
{{NoClassDefFoundError}} should be handled like a
{{{}ClassNotFoundException{}}}.
The reason for this different exception in this case is that although the
service class is found it cannot be defined.
The javadoc of {{NoClassDefFoundError}} states:
{code:java}
Thrown if the Java Virtual Machine or a ClassLoader instance tries to load in
the definition of a class
(as part of a normal method call or as part of creating a new instance using
the new expression)
and no definition of the class could be found.{code}
The javadoc of {{ClassNotFoundException}} states:
{code:java}
Thrown when an application tries to load in a class through its string name
using:
- The forName method in class Class.
- The findSystemClass method in class ClassLoader .
- The loadClass method in class ClassLoader.
but no definition for the class with the specified name could be found.{code}
One example where this scenario occurs is Logback for SLF4J-2. Besides the
{{SLF4JServiceProvider}} service this bundle also provides a
{{{}ServletContainerInitializer{}}}, which is only relevant/intended for
server/web-app environments where an implementation of the
{{jakarta./javax.servlet}} API is provided.
Therefore the maven dependencies for {{jakarta./javax.servlet}} are in the
provided scope and optional and correspondingly the {{jakarta./javax.servlet}}
packages are only optionally imported in the MANIFEST.MF.
https://github.com/qos-ch/logback/blob/4e069d34d9422a43511ae7d6242a27caa8834e14/logback-classic/pom.xml#L335-L356
--
This message was sent by Atlassian Jira
(v8.20.10#820010)