[
https://issues.apache.org/struts/browse/WW-2170?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Aaron Brown updated WW-2170:
----------------------------
Attachment: ww-2170.patch
Patch for project created from project root, includes proposed fix and test
case.
Proposed fix is simply to call to a more restrictive setProperties() on the
OgnlUtils class which prevents exceptions from being thrown during binding.
> 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
> Fix For: 2.0.11
>
> Attachments: ww-2170.patch
>
>
> 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.