Lukasz Lenart created WW-5594:
---------------------------------

             Summary: Convention plugin exclusion pattern org.apache.struts2.* 
doesn't match root package classes
                 Key: WW-5594
                 URL: https://issues.apache.org/jira/browse/WW-5594
             Project: Struts 2
          Issue Type: Bug
          Components: Plugin - Convention
            Reporter: Lukasz Lenart
             Fix For: 7.2.0


The default exclusion pattern "org.apache.struts2.*" in struts-plugin.xml 
doesn't properly 
  exclude classes directly in the org.apache.struts2 package (without 
subpackages), such as 
  org.apache.struts2.XWorkTestCase.

  *Root cause*:
  PackageBasedActionConfigBuilder.includeClassNameInActionScan() extracts 
package names using 
  StringUtils.substringBeforeLast(className, "."), then matches against 
exclusion patterns. 
  For class "org.apache.struts2.XWorkTestCase", this produces package 
"org.apache.struts2" 
  (no trailing dot). The pattern "org.apache.struts2.*" expects something after 
the dot,
  causing a mismatch.

  *Impact*:
  - Test classes like XWorkTestCase in root Struts packages are not excluded 
from scanning
  - Can trigger the NoClassDefFoundError issue when combined with includeJars 
configuration
  - Affects any classes directly in excluded root packages

  *Current configuration* (struts-plugin.xml:57):
  {code:xml}
  <constant name="struts.convention.exclude.packages" 
            value="org.apache.struts.*,org.apache.struts2.*,..." />
  {code}

  *Proposed fix*:
  Add root packages without wildcards to default exclusions:
  {code:xml}
  <constant name="struts.convention.exclude.packages" 
            
value="org.apache.struts,org.apache.struts.*,org.apache.struts2,org.apache.struts2.*,
                   
org.springframework.web.struts,org.springframework.web.struts.*,
                   
org.springframework.web.struts2,org.springframework.web.struts2.*,
                   org.hibernate,org.hibernate.*" />
  {code}

  *Workaround*:
  Users can manually add root packages to their struts.xml:
  {code:xml}
  <constant name="struts.convention.exclude.packages" 
            value="org.apache.struts2,org.apache.struts2.*" />
  {code}

  *Related classes*:
  - PackageBasedActionConfigBuilder.java (includeClassNameInActionScan method, 
line 558-584)
  - WildcardHelper.java (pattern matching implementation)
  - struts-plugin.xml (default configuration, line 57)




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

Reply via email to