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)