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