Below is the exception you would get if the valueStack is not set to null.

Thanks,
Prasanth

13:17:52,070 ERROR [stderr] (default task-59) Caused by: 
java.lang.ClassCastException: com.opensymphony.xwork2.ognl.OgnlValueStack 
cannot be cast to com.opensymphony.xwork2.util.ValueStack
13:17:52,070 ERROR [stderr] (default task-59)     at 
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:546)
13:17:52,070 ERROR [stderr] (default task-59)     at 
org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:81)
13:17:52,070 ERROR [stderr] (default task-59)     at 
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)
13:17:52,070 ERROR [stderr] (default task-59)     at 
io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
13:17:52,071 ERROR [stderr] (default task-59)     at 
io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
13:17:52,071 ERROR [stderr] (default task-59)     at 
com.xxxxxxx.xxxxxx.LoginFilter.doFilter(LoginFilter.java:46)
13:17:52,071 ERROR [stderr] (default task-59)     at 
io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
13:17:52,071 ERROR [stderr] (default task-59)     at 
io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
13:17:52,071 ERROR [stderr] (default task-59)     at 
io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)
13:17:52,071 ERROR [stderr] (default task-59)     at 
io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
13:17:52,071 ERROR [stderr] (default task-59)     at 
io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
13:17:52,071 ERROR [stderr] (default task-59)     at 
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
13:17:52,071 ERROR [stderr] (default task-59)     at 
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
13:17:52,071 ERROR [stderr] (default task-59)     at 
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
13:17:52,071 ERROR [stderr] (default task-59)     at 
io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:274)
13:17:52,071 ERROR [stderr] (default task-59)     at 
io.undertow.servlet.handlers.ServletInitialHandler.dispatchToPath(ServletInitialHandler.java:209)
13:17:52,071 ERROR [stderr] (default task-59)     at 
io.undertow.servlet.spec.RequestDispatcherImpl.forwardImpl(RequestDispatcherImpl.java:221)
13:17:52,071 ERROR [stderr] (default task-59)     ... 128 more

On 03/01/2018 12:42 PM, Prasanth wrote:
> 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: user-unsubscr...@struts.apache.org
>>>>> For additional commands, e-mail: user-h...@struts.apache.org    
>>>>
>>>
>>
>

Reply via email to