We have taken over several Java 6 webservices using Tomcat 6, in production at a customer site, which we’re attempting to upgrade to Java 11 and Tomcat 10
This software currently includes a custom XxxxxxWebActionServlet class, which extends from an old version of org.apache.struts.action.ActionServlet – this old version of struts ActionServlet currently used in production, and our current production XxxxxxWebActionServlet, both import javax.servlet.* classes
For Java 11 we have upgraded our XxxxxxWebActionServlet to import jakarta.servlet.* classes
Our upgrade results in the run-time ClassCastException shown below (from Tomcat 10’s localhost.yyyy-mm-dd.log)
Our guess is that this ClassCastException occurs because our upgraded XxxxxxWebActionServlet, which now imports jakarta.servlet., continues to extend the same older version of struts ActionServlet which imports javax.servlet. classes
After much web searching, we can’t seem to find a version of org.apache.struts.action.ActionServlet which imports jakarta.servlet.*
The last version of org.apache.struts.action.ActionServlet that we can find (in https://archive.apache.org/dist/struts/1.3.10) imports javax.servlet.* - ActionFormValidationInterceptor.java in struts-2.3.20.1 imports (but does not seem to use) org.apache.struts.action.ActionServlet, but ActionServlet.java itself does not seem to be present within struts-2.3.20.1/src
#1) Would a version of org.apache.struts.action.ActionServlet which imports jakarta.servlet.* exist somewhere else ?
#2) If not, we’d be very appreciative of any suggestions for how to circumvent this ClassCastException
Thanks very much in advance
22-Jun-2022 11:29:26.084 INFO [main] org.apache.catalina.core.ApplicationContext.log Marking servlet [action] as unavailable 22-Jun-2022 11:29:26.084 SEVERE [main] org.apache.catalina.core.StandardContext.loadOnStartup Servlet [action] in web application [/xxware] threw load() exception java.lang.ClassCastException: class com.xxxxxx.ui.web.jspframework.XxxxxxWebActionServlet cannot be cast to class jakarta.servlet.Servlet (com.xxxxxx.ui.web.jspframework.XxxxxxWebActionServlet is in unnamed module of loader org.apache.catalina.loader.ParallelWebappClassLoader @3ce3b176; jakarta.servlet.Servlet is in unnamed module of loader java.net.URLClassLoader @6ddf90b0) at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1071) at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1011) at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4906) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5213) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:726) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:698) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:747) at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1027) at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:2001) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:118) at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:828) at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:478) at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1708) at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:320) at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123) at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:423) at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:366) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:946) at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:886) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1396) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1386) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:919) at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:263) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.core.StandardService.startInternal(StandardService.java:432) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:927) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.startup.Catalina.start(Catalina.java:795) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:476)