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]>
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
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.