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 <[EMAIL PROTECTED]> 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: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]