ObjectFactory.buildResult not correctly configuring Result instance properties
------------------------------------------------------------------------------
Key: WW-2170
URL: https://issues.apache.org/struts/browse/WW-2170
Project: Struts 2
Issue Type: Bug
Components: Actions
Affects Versions: 2.0.9
Environment: WIndows Server 2003
Reporter: Aaron Brown
Hi, I think I have stumbled across a bug in the ObjectFactory.
ObjectFactory.buildResult() invokes
OgnlUtil.setProperties(resultConfig.getParams(), result, extraContext, true) to
populate a Result instance with a parameter map. In addition, the call to
OgnlUtil.setProperties forces exceptions to be thrown when necessary, by
setting the last parameter in the method call to 'true'.
If an exception is thrown, it is caught by the ObjectFactory and logged with a
level of DEBUG. Further, in the ObjectFactory.buildResult() method the
following comment appears: "ognl exceptions could be thrown and be ok if, for
example, the result uses parameters in ways other than as properties for the
result object."
However, throwing exceptions is not ok. The Ognl.setProperties method will stop
execution if an exception is thrown. As such, it is possible that not all
properties specified in the ResultConfig parameter map will be set on the
Result instance.
For example, I am trying to set a property on a JSONResult class. However, the
ResultConfig parameter map has a 'location' property in addition to the
property in my Result action annotation. (I havne't tracked down where this
location is being set in the ResultConfig). The 'location' property is the
first thing that OgnlUtils tries to set and an error is thrown. Loop iteration
stops, and the "enableSMD" property in the params map is ignored and the Result
class is incorrectly configured.
Here is my Action class:
@Result(name = "success", value = "", type = JSONResult.class, params =
{"enableSMD", "true"})
public class JsonAction extends ActionSupport {
@SMDMethod
public String getName(String client) {
return "testName";
}
}
If all you want to do is log an erroneous attempt to set a property, why are
you throwing exceptions? The OgnlUtil.internalSetProperty() method will do that
for you if it configured not to throw exceptions.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.