[ 
https://issues.apache.org/jira/browse/WW-5070?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17092096#comment-17092096
 ] 

ASF subversion and git services commented on WW-5070:
-----------------------------------------------------

Commit bd8ab61f8f8299a7f78518e495578d6921a69844 in struts's branch 
refs/heads/WW-5070-root-action-model from Lukasz Lenart
[ https://gitbox.apache.org/repos/asf?p=struts.git;h=bd8ab61 ]

WW-5070 Adds more sophisticated logic to search for the Root


> JSONResult default root object should be set explicitly, rather than from 
> result of ValueStack.peek()
> -----------------------------------------------------------------------------------------------------
>
>                 Key: WW-5070
>                 URL: https://issues.apache.org/jira/browse/WW-5070
>             Project: Struts 2
>          Issue Type: Improvement
>          Components: Core Results
>    Affects Versions: 2.5.17
>         Environment: Struts 2.5.17
> Tomcat 8.0.24
>            Reporter: Michael Hum
>            Priority: Minor
>             Fix For: 2.6
>
>
> JSONResult#setRoot() is documented as follows:
> {quote}
> Sets the root object to be serialized, defaults to the Action
> {quote}
> This is implemented in {{org.apache.struts2.json.JSONResult#findRootObject}}:
> {code:java}
>         if (this.root != null) {
>             ValueStack stack = invocation.getStack();
>             rootObject = stack.findValue(root);
>         } else {
>             rootObject = invocation.getStack().peek(); // model overrides 
> action
>         }
> {code}
> We have just run into an issue with our application where this expectation 
> did not turn out to be true, due to a race condition in some of our custom 
> results/interceptors (triggered by multiple requests) that results in the top 
> of the stack not being the action. We've mitigated the issue by explicitly 
> setting the root for serialization as the action:
> {code:java}
> @Result(name = FooAction.JSON, type = "json", params = {"root", "#action", 
> "noCache", "true", "ignoreHierarchy", "false"}),
> {code}
> While not a bug triggered by any struts code, it would make more sense in 
> this case to explicitly find the action instead of assuming that the top of 
> the stack is the action. The ValueStack is able to be manipulated freely by 
> developers, so this would guarantee that the default be correct regardless of 
> external manipulation.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to