[ https://issues.apache.org/jira/browse/WW-5070?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17093046#comment-17093046 ]
ASF subversion and git services commented on WW-5070: ----------------------------------------------------- Commit 48435c42095b201f606eb39e86137cb213bfbd4d in struts's branch refs/heads/WW-5070-root-action-model from Lukasz Lenart [ https://gitbox.apache.org/repos/asf?p=struts.git;h=48435c4 ] WW-5070 Uses else if to avoid double operation on stack > 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 > > Time Spent: 1h > Remaining Estimate: 0h > > 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)