diff --git a/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java b/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java index 7d71bee6e..443287044 100644 --- a/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java +++ b/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java @@ -413,9 +413,8 @@ public class PackageBasedActionConfigBuilder implements ActionConfigBuilder { Map packageConfigs = new HashMap(); for (Class actionClass : classes) { - // Skip all interfaces, enums, annotations, and abstract classes - if (actionClass.isAnnotation() || actionClass.isInterface() || actionClass.isEnum() || - (actionClass.getModifiers() & Modifier.ABSTRACT) != 0) { + // Skip classes that can't be instantiated + if (cannotInstantiate(actionClass)) { continue; } @@ -507,6 +506,14 @@ public class PackageBasedActionConfigBuilder implements ActionConfigBuilder { } } + /** + * Interfaces, enums, annotations, and abstract classes cannot be instantiated. + */ + protected boolean cannotInstantiate(Class actionClass) { + return actionClass.isAnnotation() || actionClass.isInterface() || actionClass.isEnum() || + (actionClass.getModifiers() & Modifier.ABSTRACT) != 0; + } + /** * Determines the namespace(s) for the action based on the action class. If there is a {@link Namespace} * annotation on the class (including parent classes) or on the package that the class is in, than