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

Don Brown commented on WW-2170:
-------------------------------

The reason exceptions are ignored is result parameters are not always meant to 
be applied as setters.  For example, the redirect results programatically 
access the parameters and interpret them as parameters to set on the redirect 
request.  Therefore, there is no corresponding setter and OGNL will throw an 
exception.  Certainly, the current implementation is ideal, but just having 
exceptions thrown is not the solution.  Perhaps we let results declare 
themselves as supporting "strict" parameter assignments? 

> 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: Core Actions
>    Affects Versions: 2.0.9
>         Environment: WIndows Server 2003
>            Reporter: Aaron Brown
>             Fix For: 2.1.1
>
>         Attachments: ww-2170.patch, ww-2170.patch, 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.

Reply via email to