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)

Reply via email to