Action class finder issue

Florian Schlittgen <[email protected]>
Newsgroups gmane.comp.jakarta.struts.devel
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?

kind regards, Florian
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.