You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Don Brown <do...@gmail.com> on 2007/07/10 16:07:26 UTC

Re: Caught OgnlException while setting property 'imageServletUrl'

Ah, good catch.  Well darn, the reason I changed them to return the
object instance was to make it easier to initialise results
programmatically (action methods can return Result objects directly,
not just Strings), but looks like that broke this case.  Please file a
JIRA ticket so this gets addressed.  Patches are always appreciated :)

Don

On 6/29/07, Patrick J Kobly <pa...@kobly.com> wrote:
> G'day,
>
> I appear to have resolved this issue that I kept running into with the
> Jasper Reports plugin...
>
> If I have an action defined as:
>
>         <action name="foo_*" method="{1}" class="com.xxx.foo">
>             <result name="success" type="jasper">
>               <param name="location">WEB-INF/foo.jasper</param>
>                 <param name="format">${contentType}</param>
>               <param name="dataSource">dataSource</param>
>               <param name="imageServletUrl">/servlets/image?image=</param>
>               </result>
>         </action>
> Using the Jasper Reports plugin that ships with S2 current, I get:
>
> 16:02:13,220 WARN  [OgnlUtil] Caught OgnlException while setting
> property 'imageServletUrl' on type
> 'org.apache.struts2.views.jasperreports.JasperReportsResult'.
> java.lang.IllegalAccessException: Class ognl.OgnlRuntime can not access
> a member of class
> org.apache.struts2.views.jasperreports.JasperReportsResult with
> modifiers "protected"
>     at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:65)
>     at java.lang.reflect.Field.doSecurityCheck(Field.java:960)
>     at java.lang.reflect.Field.getFieldAccessor(Field.java:896)
>     at java.lang.reflect.Field.set(Field.java:657)
>     at ognl.OgnlRuntime.setFieldValue(OgnlRuntime.java:1140)
> ...
>
> And the imageServletUrl param does not take effect.
>
> The issue appears to be that all of the setters in JasperReportsResult
> return a JasperReportsResult.  The JavaBeans spec identifies that the
> setter for a simple property must return void.  As a result,
> BeanInfo.getPropertyDescriptors won't see these setters as write methods
> for properties.  With the other props in this class, that's not a
> problem - since they don't have getters, we don't get any
> propertyDescriptors for the properties, and proceed to look for methods
> individually (OgnlRuntime.java:1296).  For imageServletUrl, however,
> there _is_ a valid getter.  BeanInfo sees this as a read-only prop and
> returns a property descriptor for it, showing exactly that.  Back in
> OGNL code, we see that we got a PropertyDescriptor, and don't bother
> asking for all methods.  getSetMethod says "I don't have a set method,"
> so OGNL eventually tries to just poke the field, resulting in the above
> error because the field is protected.
>
> Solution: modify the setters in JasperReportsResult to return void.
> This has been confirmed to fix the above problem.
>
> PK
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org