You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@struts.apache.org by "Lukasz Lenart (Jira)" <ji...@apache.org> on 2025/12/02 17:43:00 UTC

[jira] [Created] (WW-5593) Convention plugin fails with NoClassDefFoundError when scanning classes with missing dependencies

Lukasz Lenart created WW-5593:
---------------------------------

             Summary: Convention plugin fails with NoClassDefFoundError when scanning classes with missing dependencies
                 Key: WW-5593
                 URL: https://issues.apache.org/jira/browse/WW-5593
             Project: Struts 2
          Issue Type: Bug
          Components: Plugin - Convention
            Reporter: Lukasz Lenart
             Fix For: 7.2.0


The convention plugin's {{PackageBasedActionConfigBuilder}} catches only {{ClassNotFoundException}} but not {{NoClassDefFoundError}} when testing action class candidates. This causes complete application startup failures instead of graceful degradation when classes have missing optional dependencies.

*Impact*:
- Application fails to start when convention plugin encounters classes with unavailable dependencies
- Particularly affects users setting struts.convention.action.includeJars
- Common during redeployment or with optional dependencies (e.g., JUnit for test classes)

*Current behavior* (PackageBasedActionConfigBuilder.java:664):

{code:java}
  } catch (ClassNotFoundException ex) {
      LOG.error("Unable to load class [{}]", classInfo.getName(), ex);
      return false;
  }
{code}

*Expected behavior*:
Should also catch NoClassDefFoundError, following the pattern used in DefaultClassFinder and other Struts core classes (DefaultInterceptorFactory, XmlDocConfigurationProvider).

*Proposed fix*:
{code:java}
  } catch (ClassNotFoundException | NoClassDefFoundError ex) {
      LOG.error("Unable to load class [{}]. Perhaps it exists but certain dependencies are not available?",
                classInfo.getName(), ex);
      return false;
  }
{code}

*Reproduction*:
1. Use convention plugin with struts.convention.action.includeJars configured
2. Deploy application without JUnit dependency at runtime
3. Convention plugin attempts to scan org.apache.struts2.XWorkTestCase
4. Application fails with NoClassDefFoundError instead of logging and continuing

*Related classes*:
- PackageBasedActionConfigBuilder.java (line 664)
- DefaultClassFinder.java (correct pattern at line 283-286)




--
This message was sent by Atlassian Jira
(v8.20.10#820010)