[ 
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)

Reply via email to