Re: Re: Struts 7: action class finder

Florian Schlittgen <[email protected]>
Newsgroups gmane.comp.jakarta.struts.devel
Organization Dr. Lippke & Dr. Wagner GmbH
Message-ID <[email protected]>
You're right, the package is supposed to be excluded. So I started 
debugging and tracked it down to the 
org.apache.struts2.util.WildcardHelper. There seems to be an issue, as 
you can see in this example:

     public static void main(String[] args) {
         String packageExclude = "org.apache.struts2.*";
         String classPackageName = "org.apache.struts2";

         WildcardHelper wildcardHelper = new WildcardHelper();
         int[] packagePattern = 
wildcardHelper.compilePattern(packageExclude);
         System.out.println(wildcardHelper.match(new HashMap<>(), 
classPackageName, packagePattern));
     }

The output is 'false', so the pattern "org.apache.struts2.*" does not 
match with the package "org.apache.struts2".
Maybe you'll know immediately what the problem is. Otherwise, I can take 
another look and find the error in the match method... just let me know.


On 19.12.24 19:11, Lukasz Lenart wrote:
> Hm... but classes in org.apache.struts2 are excluded from scanning
> https://github.com/apache/struts/blob/main/plugins/convention/src/main/resources/struts-plugin.xml#L57
>
> Could you double check if you don't have a copy of older JARs somewhere
>
> czw., 19 gru 2024 o 17:27 Florian Schlittgen <[email protected]> napisał(a):
>> Hi,
>>
>> I currently migrating an application from struts 6 to 7 using the
>> pre-release. I am using the convention plugin and I am getting the
>> following error:
>>
>> ERROR [org.apache.struts2.convention.DefaultClassFinder] (default
>> task-1) Error loading class [org.apache.struts2.XWorkTestCase]:
>> java.lang.NoClassDefFoundError: Failed to link
>> org/apache/struts2/XWorkTestCase (Module "deployment.coreweb.war" from
>> Service Module Loader): junit/framework/TestCase
>>       at java.base/java.lang.ClassLoader.defineClass1(Native Method)
>>       at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
>>       at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1095)
>>       at
>> org.jboss.modules.ModuleClassLoader.doDefineOrLoadClass(ModuleClassLoader.java:351)
>>       at
>> org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:482)
>>       at
>> org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:276)
>>       at
>> org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:79)
>>       at org.jboss.modules.Module.loadModuleClass(Module.java:797)
>>       at
>> org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:192)
>>       at
>> org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:408)
>>       at
>> org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:396)
>>       at
>> org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:115)
>>       at
>> deployment.coreweb.war//org.apache.struts2.util.finder.ClassLoaderInterfaceDelegate.loadClass(ClassLoaderInterfaceDelegate.java:38)
>>       at
>> deployment.coreweb.war//org.apache.struts2.util.finder.ClassFinder$ClassInfo.get(ClassFinder.java:228)
>>       at
>> deployment.coreweb.war//org.apache.struts2.convention.PackageBasedActionConfigBuilder$1.test(PackageBasedActionConfigBuilder.java:663)
>>       at
>> deployment.coreweb.war//org.apache.struts2.convention.PackageBasedActionConfigBuilder$1.test(PackageBasedActionConfigBuilder.java:650)
>>       at
>> deployment.coreweb.war//org.apache.struts2.convention.DefaultClassFinder.findClasses(DefaultClassFinder.java:280)
>>       at
>> deployment.coreweb.war//org.apache.struts2.convention.PackageBasedActionConfigBuilder.findActions(PackageBasedActionConfigBuilder.java:432)
>>       at
>> deployment.coreweb.war//org.apache.struts2.convention.PackageBasedActionConfigBuilder.buildActionConfigs(PackageBasedActionConfigBuilder.java:388)
>>       at
>> deployment.coreweb.war//org.apache.struts2.convention.ClasspathPackageProvider.loadPackages(ClasspathPackageProvider.java:55)
>>       at
>> deployment.coreweb.war//org.apache.struts2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:317)
>>       at
>> deployment.coreweb.war//org.apache.struts2.config.ConfigurationManager.reload(ConfigurationManager.java:227)
>>       at
>> deployment.coreweb.war//org.apache.struts2.config.ConfigurationManager.initialiseConfiguration(ConfigurationManager.java:84)
>>       at
>> deployment.coreweb.war//org.apache.struts2.config.ConfigurationManager.wasConfigInitialised(ConfigurationManager.java:72)
>>       at
>> deployment.coreweb.war//org.apache.struts2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:61)
>>       at
>> deployment.coreweb.war//org.apache.struts2.dispatcher.Dispatcher.getContainer(Dispatcher.java:1141)
>>       at
>> deployment.coreweb.war//org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:643)
>>       at
>> deployment.coreweb.war//org.apache.struts2.dispatcher.InitOperations.initDispatcher(InitOperations.java:43)
>>       at
>> deployment.coreweb.war//org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:58)
>>
>> In PackageBasedActionConfigBuilder, all potential action classes are
>> being checked (line 663). XWorkTestCase is in the candidates list but
>> without having junit:junit as a dependency (which is declared as
>> optional) this class cannot be loaded and tested. In this case,
>> NoClassDefFoundError is thrown which is not being caught (line 664). I
>> think the catch statement has to be extended to handle
>> NoClassDefFoundError accordingly.
>> What do you think, do you want me to create a JIRA ticket? (or pull
>> request?)
>>
>> regards,
>> Florian
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
smime.p7s (application/pkcs7-signature, 4.6 KB) - not displayed
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.