[
https://issues.apache.org/jira/browse/WW-5110?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17257874#comment-17257874
]
James Chaplin commented on WW-5110:
-----------------------------------
Hi.
The failure appears to be due to Tomcat 10 implementing the Jakarta EE 9
specification. The Jakarta EE 9 specification is not namespace-compatible with
previous EE versions (JEE 8 or Jakarta EE 8), which can produce the sorts of
failures reported in this JIRA.
Attempting to support Jakarta EE 9+ directly would likely require a newly
refactored branch of Struts 2, and such a branch would no longer be compatible
with JEE 8 / Jakarta EE 8 or earlier web containers / application servers.
Assuming that, it would probably be something to consider for a future Struts 2
branch (may after 2.6 is released ?).
Until a (future) Jakarta EE 9+ version (branch) of Struts 2 is created,
developers can still use application servers / web containers that support
Jakarta EE 8 / JEE 8 or earlier. For Tomcat, that means running on Tomcat 9.x
or earlier.
Note: There appear to be a few tools for transforming existing (compiled) web
applications to move them to the new Jakarta EE 9 namespace (by modifying the
application's bytecode), but I do not think any of those tools are considered
"official" (meaning any developer using them would, presumably, be assuming any
risk that might be involved in their usage).
> java.lang.ClassCastException:
> org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter cannot be
> cast to jakarta.servlet.Filter
> -----------------------------------------------------------------------------------------------------------------------------------------
>
> Key: WW-5110
> URL: https://issues.apache.org/jira/browse/WW-5110
> Project: Struts 2
> Issue Type: Bug
> Components: Integration
> Affects Versions: 2.5.26
> Reporter: Rsorrt
> Priority: Minor
> Fix For: 2.6
>
>
> *StrutsPrepareAndExecuteFilter is not compatible with jakarta servlet
> package*
> +in Web.xml+
> {quote}{{<filter> }}
> {{ <filter-name>struts2</filter-name> }}
>
> <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
>
> </filter>
> <filter-mapping>}}
> <filter-name>struts2</filter-name>
> <url-pattern>/*</url-pattern>
> </filter-mapping>
> {quote}
>
> *starting TOMCAT 10.0.0:*
> {{{color:#ff0000}java.lang.ClassCastException:
> org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter cannot be
> cast to jakarta.servlet.Filter{color}}}
> {quote}27-Dec-2020 12:27:01.005 [main]
> org.apache.catalina.core.StandardContext.filterStart Exception starting
> filter [struts2]
> java.lang.ClassCastException:
> org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter cannot be
> cast to jakarta.servlet.Filter
> at
> org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:250)
> at
> org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:103)
> at
> org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4515)
> at
> org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5152)
> at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
> at
> org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:717)
> at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:690)
> at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:706)
> at
> org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:631)
> at
> org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1830)
> at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
> at java.util.concurrent.FutureTask.run(Unknown Source)
> at
> org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
> at java.util.concurrent.AbstractExecutorService.submit(Unknown Source)
> at
> org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:526)
> at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:425)
> at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1576)
> at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:309)
> 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:936)
> at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:843)
> at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
> at
> org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)
> at
> org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)
> at java.util.concurrent.FutureTask.run(Unknown Source)
> at
> org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
> at java.util.concurrent.AbstractExecutorService.submit(Unknown Source)
> at
> org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)
> at
> org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
> at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
> at
> org.apache.catalina.core.StandardService.startInternal(StandardService.java:434)
> at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
> at
> org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930)
> at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
> at org.apache.catalina.startup.Catalina.start(Catalina.java:795)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> at java.lang.reflect.Method.invoke(Unknown Source)
> at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:342)
> at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:473)
> 27-Dec-2020 12:27:01.767 INFORMAZIONI [main]
> org.apache.catalina.core.ApplicationContext.log ContextListener:
> contextInitialized()
> 27-Dec-2020 12:27:01.767 INFORMAZIONI [main]
> org.apache.catalina.core.ApplicationContext.log SessionListener:
> contextInitialized()
> 27-Dec-2020 12:27:01.768 INFORMAZIONI [main]
> org.apache.catalina.core.ApplicationContext.log ContextListener:
> attributeAdded('StockTicker', 'async.Stockticker@28a16598')
> {quote}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)