I am trying to forward the request to another action that is present in a different context. It works in struts1 but when trying in struts 2.3.34 I am getting a class cast exception. Both the projects
(contexts) have the same version of struts2.

Exception: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.ClassCastException: org.apache.struts2.dispatcher.mapper.ActionMapping cannot be cast to org.apache.struts2.dispatcher.mapper.ActionMapping
at io.undertow.servlet.spec.ServletContextImpl.invokeAction(ServletContextImpl.java:888
at io.undertow.servlet.spec.RequestDispatcherImpl.forwardImplSetup(RequestDispatcherImpl.java:134
at io.undertow.servlet.spec.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:111
at com.mypackage.LoginAction.execute(LoginAction.java:139
at sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethodAccessorImpl.java:-2
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43
at java.lang.reflect.Method.invoke(Method.java:498
at ognl.OgnlRuntime.invokeMethod(OgnlRuntime.java:897
at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1299
at ognl.ObjectMethodAccessor.callMethod(ObjectMethodAccessor.java:68
at com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor.callMethodWithDebugInfo(XWorkMethodAccessor.java:117
at com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor.callMethod(XWorkMethodAccessor.java:108
at ognl.OgnlRuntime.callMethod(OgnlRuntime.java:1375
at ognl.ASTMethod.getValueBody(ASTMethod.java:91
at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212
at ognl.SimpleNode.getValue(SimpleNode.java:258
at ognl.Ognl.getValue(Ognl.java:470
at ognl.Ognl.getValue(Ognl.java:434
at com.opensymphony.xwork2.ognl.OgnlUtil$3.execute(OgnlUtil.java:362
at com.opensymphony.xwork2.ognl.OgnlUtil.compileAndExecuteMethod(OgnlUtil.java:414
at com.opensymphony.xwork2.ognl.OgnlUtil.callMethod(OgnlUtil.java:360
at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:430
at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:290
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:251
at org.apache.struts2.interceptor.DeprecationInterceptor.intercept(DeprecationInterceptor.java:41
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245
at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:168
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:76
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:229
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:229
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245
at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245
at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245
at org.apache.struts2.interceptor.DateTextFieldInterceptor.intercept(DateTextFieldInterceptor.java:125
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245
at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245
at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:253
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245
at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245
at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245
at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245
at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245
at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:140
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245
at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245
at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245
at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:189
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:575
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:81
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131
at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84
at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62
at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36
at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43
at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131
at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43
at io.undertow.security.handlers.AuthenticationConstraintHandler.handleRequest(AuthenticationConstraintHandler.java:53
at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46
at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64
at io.undertow.servlet.handlers.security.ServletSecurityConstraintHandler.handleRequest(ServletSecurityConstraintHandler.java:59
at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60
at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77
at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50
at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43
at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43
at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292
at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81
at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138
at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135
at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48
at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43
at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44
at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44
at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44
at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44
at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44
at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272
at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81
at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104
at io.undertow.server.Connectors.executeRootHandler(Connectors.java:202
at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:805
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624
at java.lang.Thread.run(Thread.java:748

Caused by: java.lang.RuntimeException: java.lang.ClassCastException: org.apache.struts2.dispatcher.mapper.ActionMapping cannot be cast to org.apache.struts2.dispatcher.mapper.ActionMapping
at io.undertow.servlet.spec.RequestDispatcherImpl.forwardImpl(RequestDispatcherImpl.java:245)
at io.undertow.servlet.spec.RequestDispatcherImpl.access$100(RequestDispatcherImpl.java:54)
at io.undertow.servlet.spec.RequestDispatcherImpl$2.call(RequestDispatcherImpl.java:137)
at io.undertow.servlet.spec.RequestDispatcherImpl$2.call(RequestDispatcherImpl.java:134)
at io.undertow.servlet.spec.ServletContextImpl$5.call(ServletContextImpl.java:175)
at io.undertow.servlet.spec.ServletContextImpl$5.call(ServletContextImpl.java:172)
at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
at io.undertow.servlet.spec.ServletContextImpl.invokeAction(ServletContextImpl.java:886)
... 115 more
Caused by: java.lang.ClassCastException: org.apache.struts2.dispatcher.mapper.ActionMapping cannot be cast to org.apache.struts2.dispatcher.mapper.ActionMapping
at org.apache.struts2.dispatcher.ng.PrepareOperations.findActionMapping(PrepareOperations.java:163)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:92)
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)
at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:274)
at io.undertow.servlet.handlers.ServletInitialHandler.dispatchToPath(ServletInitialHandler.java:209)
at io.undertow.servlet.spec.RequestDispatcherImpl.forwardImpl(RequestDispatcherImpl.java:221)
... 128 more

I found [1]:
> usually when you get ClassCastExceptions you cannot explain you have loaded the class with one classloader then try to cast it to the same class loaded by another classloader. This will not work - they are represented by two different Class objects inside the JVM and the cast will fail.

> > ServletContext sContext = context.getContext("/context2");
> > RequestDispatcher rd = sContext.getRequestDispatcher(resource);
> > rd.forward(request, response);
> >
> > Thanks,
> > Prasanth
> >
> > Exception: java.lang.RuntimeException: java.lang.RuntimeException:
> java.lang.ClassCastException:
> org.apache.struts2.dispatcher.mapper.ActionMapping cannot be cast to
> org.apache.struts2.dispatcher.mapper.ActionMapping
>
>
> I found [1]:
> > usually when you get ClassCastExceptions you cannot explain you have
> loaded the class with one classloader then try to cast it to the same class
> loaded by another classloader. This will not work - they are represented by
> two different Class objects inside the JVM and the cast will fail.
>
> [1] https://stackoverflow.com/a/826345/1362623

This usually happens when struts jar is included in application server's lib directory.

>
>
> On 12/15/2017 2:16 AM, Prasanth Pasala wrote:
>> ServletContext sContext = context.getContext("/context2");
>> RequestDispatcher rd = sContext.getRequestDispatcher(resource);
>> rd.forward(request, response);
>>
>> Thanks,
>> Prasanth
>>
>> Exception: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.ClassCastException: org.apache.struts2.dispatcher.mapper.ActionMapping cannot be cast to org.apache.struts2.dispatcher.mapper.ActionMapping
>
>
> I found [1]:
>> usually when you get ClassCastExceptions you cannot explain you have loaded the class with one classloader then try to cast it to the same class loaded by another classloader. This will not work - they are represented by two different Class objects inside the JVM and the cast will fail.
>
> [1] https://stackoverflow.com/a/826345/1362623>

... do you try to dispatch request to another Struts application? I
remember e.g. for Tomcat, it uses different classloaders for each app.

I think you can ask and continue with your container (e.g. Tomcat,
Jetty, WebSphere, etc) for a solution.

Thanks for the prompt response. Tried removing the attribute from the request, but still getting the class cast exception. Is it possible it is being set after I have called the forward?
request.removeAttribute("struts.actionMapping"); // FORWARD THE REQUEST ServletContext sContext = context.getContext("/context2"); RequestDispatcher rd =
sContext.getRequestDispatcher("/Login.action"); rd.forward(request, response); [show/hide original text]
No it's not a Struts issue. You don't see this in Struts1 because maybe
it doesn't use any object bounded to dispatched request. But Struts2
wants to

It seems like removeAttribute or setAttribute is not getting rid of the attribute from request. See below. If I set the value to a random string then I get a String can't be cast to ActionMapping
exception.

> Thanks for the prompt response. Tried removing the attribute from the request, but still getting the class cast exception. Is it possible it is being set after I have called the forward?
> request.removeAttribute("struts.actionMapping"); // FORWARD THE REQUEST ServletContext sContext = context.getContext("/context2"); RequestDispatcher rd =
> sContext.getRequestDispatcher("/Login.action"); rd.forward(request, response); [show/hide original text]
> No it's not a Struts issue. You don't see this in Struts1 because maybe
> it doesn't use any object bounded to dispatched request. But Struts2
> wants to
>
> ActionMapping mapping =
> (ActionMapping)request.getAttribute("struts.actionMapping");
>
> A workaround would be removing object with key "struts.actionMapping"
> from request before dispatching.
>
> I hope this helps.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [hidden email]> For additional commands, e-mail: [hidden email]

Added the below two lines to my filter (before the struts2 filter) in context2 app. That seems to do the trick. Thought it might create a problem as I am setting a new ActionMapping in the request,
but seems to work fine. Do you see any side effects of this?

Added it to Struts JIRA (WW-4904) If I set the struts.actionMapping attribute to null it still causes the class cast exception. What I have seen is that after setting it to null if you call
getAttribute you would still get the old ActionMapping object, not sure how that is possible. Thanks, Prasanth --------------------------------------------------------------------------- [show/hide
original text]
No it's not a Struts issue. You don't see this in Struts1 because maybe
it doesn't use any object bounded to dispatched request. But Struts2
wants to

> If I set the struts.actionMapping attribute to null it still causes the class cast exception. What I have seen is that after setting it to null if you call
> getAttribute you would still get the old ActionMapping object, not sure how that is possible.

Hmm... so how and why `request.setAttribute("struts.valueStack", null)`
works.

That's weird and so very important to me :)

Could you please see what is the type of request when you receive it in
your second context filter? e.g. println(request.getType()) before those
your two lines (I could see myself but maybe it will be different from
your one!)

Sorry didn't check the website, I am not getting the emails to my inbox, will try to subscribe again. I will get back to you with the exception I was getting if you don't set the valueStack to null.
Thanks, Prasanth ------------------------------------------------------------------ [show/hide original text]

Thank you very much for your time and report!
[show/hide original text]

Hmm... so how and why `request.setAttribute("struts.valueStack", null)`
works.

That's weird and so very important to me :)

Could you please see what is the type of request when you receive it in
your second context filter? e.g. println(request.getType()) before those
your two lines (I could see myself but maybe it will be different from
your one!)

Thanks in advance!

On 12/18/2017 11:03 AM, Prasanth Pasala wrote:

> Added it to Struts JIRA (WW-4904) If I set the struts.actionMapping attribute to null it still causes the class cast exception. What I have seen is that after setting it to null if you call
> getAttribute you would still get the old ActionMapping object, not sure how that is possible. Thanks, Prasanth --------------------------------------------------------------------------- [show/hide
> original text]
> No it's not a Struts issue. You don't see this in Struts1 because maybe
> it doesn't use any object bounded to dispatched request. But Struts2
> wants to
>
> ActionMapping mapping =
> (ActionMapping)request.getAttribute("struts.actionMapping");
>
> A workaround would be removing object with key "struts.actionMapping"
> from request before dispatching.
>
> I hope this helps.
>
>
> On 12/15/2017 04:54 PM, Prasanth Pasala wrote:
>> Added the below two lines to my filter (before the struts2 filter) in context2 app. That seems to do the trick. Thought it might create a problem as I am setting a new ActionMapping in the request,
>> but seems to work fine. Do you see any side effects of this?
>>
>> request.setAttribute("struts.actionMapping", new ActionMapping());
>> request.setAttribute("struts.valueStack", null);
>>
>> Thanks,
>> Prasanth
>>
>> On 12/15/2017 04:10 PM, Prasanth Pasala wrote:
>>> It seems like removeAttribute or setAttribute is not getting rid of the attribute from request. See below. If I set the value to a random string then I get a String can't be cast to ActionMapping
>>> exception.
>>>
>>> Enumeration<String> attrs = request.getAttributeNames();
>>> while(attrs.hasMoreElements()) {
>>> System.out.println(attrs.nextElement());
>>> }
>>> System.out.println(request.getAttribute("struts.actionMapping"));
>>> request.setAttribute("struts.actionMapping", null);
>>> System.out.println(request.getAttribute("struts.actionMapping"));
>>>
>>> Output:
>>> 16:05:05,300 INFO [stdout] (default task-13) javax.servlet.forward.context_path
>>> 16:05:05,302 INFO [stdout] (default task-13) javax.servlet.forward.servlet_path
>>> 16:05:05,303 INFO [stdout] (default task-13) javax.servlet.forward.request_uri
>>> 16:05:05,303 INFO [stdout] (default task-13) javax.servlet.forward.path_info
>>> 16:05:05,303 INFO [stdout] (default task-13) javax.servlet.forward.query_string
>>> 16:05:05,303 INFO [stdout] (default task-13) javax.servlet.request.key_size
>>> 16:05:05,303 INFO [stdout] (default task-13) __cleanup_recursion_counter
>>> 16:05:05,303 INFO [stdout] (default task-13) javax.servlet.request.cipher_suite
>>> 16:05:05,304 INFO [stdout] (default task-13) struts.valueStack
>>> 16:05:05,308 INFO [stdout] (default task-13) javax.servlet.request.ssl_session_id
>>> 16:05:09,121 INFO [stdout] (default task-13) ActionMapping{name='Login', namespace='/', method='null', extension='action', params=null, result=null}
>>> 16:05:10,960 INFO [stdout] (default task-13) ActionMapping{name='Login', namespace='/', method='null', extension='action', params=null, result=null}
>>>
>>>
>>> On 12/15/2017 02:28 PM, Prasanth Pasala wrote:
>>>> Thanks for the prompt response. Tried removing the attribute from the request, but still getting the class cast exception. Is it possible it is being set after I have called the forward?
>>>> request.removeAttribute("struts.actionMapping"); // FORWARD THE REQUEST ServletContext sContext = context.getContext("/context2"); RequestDispatcher rd =
>>>> sContext.getRequestDispatcher("/Login.action"); rd.forward(request, response); [show/hide original text]
>>>> No it's not a Struts issue. You don't see this in Struts1 because maybe
>>>> it doesn't use any object bounded to dispatched request. But Struts2
>>>> wants to
>>>>
>>>> ActionMapping mapping =
>>>> (ActionMapping)request.getAttribute("struts.actionMapping");
>>>>
>>>> A workaround would be removing object with key "struts.actionMapping"
>>>> from request before dispatching.
>>>>
>>>> I hope this helps.
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: [hidden email]>>>> For additional commands, e-mail: [hidden email]>>>
>>
>

> Sorry didn't check the website, I am not getting the emails to my inbox, will try to subscribe again. I will get back to you with the exception I was getting if you don't set the valueStack to
> null. Thanks, Prasanth ------------------------------------------------------------------ [show/hide original text]
>
> Thank you very much for your time and report!
> [show/hide original text]
>
> Hmm... so how and why `request.setAttribute("struts.valueStack", null)`
> works.
>
> That's weird and so very important to me :)
>
> Could you please see what is the type of request when you receive it in
> your second context filter? e.g. println(request.getType()) before those
> your two lines (I could see myself but maybe it will be different from
> your one!)
>
> Thanks in advance!
>
>
> On 12/18/2017 11:03 AM, Prasanth Pasala wrote:
>> Added it to Struts JIRA (WW-4904) If I set the struts.actionMapping attribute to null it still causes the class cast exception. What I have seen is that after setting it to null if you call
>> getAttribute you would still get the old ActionMapping object, not sure how that is possible. Thanks, Prasanth --------------------------------------------------------------------------- [show/hide
>> original text]
>> No it's not a Struts issue. You don't see this in Struts1 because maybe
>> it doesn't use any object bounded to dispatched request. But Struts2
>> wants to
>>
>> ActionMapping mapping =
>> (ActionMapping)request.getAttribute("struts.actionMapping");
>>
>> A workaround would be removing object with key "struts.actionMapping"
>> from request before dispatching.
>>
>> I hope this helps.
>>
>>
>> On 12/15/2017 04:54 PM, Prasanth Pasala wrote:
>>> Added the below two lines to my filter (before the struts2 filter) in context2 app. That seems to do the trick. Thought it might create a problem as I am setting a new ActionMapping in the
>>> request, but seems to work fine. Do you see any side effects of this?
>>>
>>> request.setAttribute("struts.actionMapping", new ActionMapping());
>>> request.setAttribute("struts.valueStack", null);
>>>
>>> Thanks,
>>> Prasanth
>>>
>>> On 12/15/2017 04:10 PM, Prasanth Pasala wrote:
>>>> It seems like removeAttribute or setAttribute is not getting rid of the attribute from request. See below. If I set the value to a random string then I get a String can't be cast to ActionMapping
>>>> exception.
>>>>
>>>> Enumeration<String> attrs = request.getAttributeNames();
>>>> while(attrs.hasMoreElements()) {
>>>> System.out.println(attrs.nextElement());
>>>> }
>>>> System.out.println(request.getAttribute("struts.actionMapping"));
>>>> request.setAttribute("struts.actionMapping", null);
>>>> System.out.println(request.getAttribute("struts.actionMapping"));
>>>>
>>>> Output:
>>>> 16:05:05,300 INFO [stdout] (default task-13) javax.servlet.forward.context_path
>>>> 16:05:05,302 INFO [stdout] (default task-13) javax.servlet.forward.servlet_path
>>>> 16:05:05,303 INFO [stdout] (default task-13) javax.servlet.forward.request_uri
>>>> 16:05:05,303 INFO [stdout] (default task-13) javax.servlet.forward.path_info
>>>> 16:05:05,303 INFO [stdout] (default task-13) javax.servlet.forward.query_string
>>>> 16:05:05,303 INFO [stdout] (default task-13) javax.servlet.request.key_size
>>>> 16:05:05,303 INFO [stdout] (default task-13) __cleanup_recursion_counter
>>>> 16:05:05,303 INFO [stdout] (default task-13) javax.servlet.request.cipher_suite
>>>> 16:05:05,304 INFO [stdout] (default task-13) struts.valueStack
>>>> 16:05:05,308 INFO [stdout] (default task-13) javax.servlet.request.ssl_session_id
>>>> 16:05:09,121 INFO [stdout] (default task-13) ActionMapping{name='Login', namespace='/', method='null', extension='action', params=null, result=null}
>>>> 16:05:10,960 INFO [stdout] (default task-13) ActionMapping{name='Login', namespace='/', method='null', extension='action', params=null, result=null}
>>>>
>>>>
>>>> On 12/15/2017 02:28 PM, Prasanth Pasala wrote:
>>>>> Thanks for the prompt response. Tried removing the attribute from the request, but still getting the class cast exception. Is it possible it is being set after I have called the forward?
>>>>> request.removeAttribute("struts.actionMapping"); // FORWARD THE REQUEST ServletContext sContext = context.getContext("/context2"); RequestDispatcher rd =
>>>>> sContext.getRequestDispatcher("/Login.action"); rd.forward(request, response); [show/hide original text]
>>>>> No it's not a Struts issue. You don't see this in Struts1 because maybe
>>>>> it doesn't use any object bounded to dispatched request. But Struts2
>>>>> wants to
>>>>>
>>>>> ActionMapping mapping =
>>>>> (ActionMapping)request.getAttribute("struts.actionMapping");
>>>>>
>>>>> A workaround would be removing object with key "struts.actionMapping"
>>>>> from request before dispatching.
>>>>>
>>>>> I hope this helps.
>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: [hidden email]>>>>> For additional commands, e-mail: [hidden email]>>>>
>>>
>>
>

You have two the same JARs on a class path but in different versions
(probably xwork-core-*.jar) or JARs were loaded by different
classloaders which means some framework's JARs were included inside
Wildfly

2018-03-02 15:16 GMT+01:00 Prasanth <[hidden email]>:
> There are two applications on different contexts. Each have their own struts jars. The exception happens when a request to one context is forwarded to another context.

On 03/02/2018 09:31 AM, Lukasz Lenart wrote:
> 2018-03-02 15:16 GMT+01:00 Prasanth <[hidden email]>:
>> There are two applications on different contexts. Each have their own struts jars. The exception happens when a request to one context is forwarded to another context.
> What do you mean by "forwarded"?
>
>
> Regards

On 3/1/2018 10:12 PM, Prasanth wrote:
> I will get back to you with the exception I was getting if you don't set the valueStack to null.

No, I meant why request.setAttribute("struts.actionMapping", null) not
work there (like your request.setAttribute("struts.valueStack", null))?
Why request.removeAttribute not work there?

So I asked below ....

> Could you please see what is the type of request when you receive it in
> your second context filter? e.g. println(request.getType()) before those
> your two lines (I could see myself but maybe it will be different from
> your one!)
>
> Thanks in advance!