[ https://issues.apache.org/jira/browse/WW-5497?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17906364#comment-17906364 ]
Lukasz Lenart edited comment on WW-5497 at 1/5/25 4:49 PM: ----------------------------------------------------------- Obviously this was introduced with commit [c85d7ebf5dbe9e3e85a464d17b123a7dc3cd4b3a|https://github.com/apache/struts/commit/c85d7ebf5dbe9e3e85a464d17b123a7dc3cd4b3a] related to WW-5350. was (Author: s.goetz): Obviously this was introduced with commit [c85d7ebf5dbe9e3e85a464d17b123a7dc3cd4b3a|https://github.com/apache/struts/commit/c85d7ebf5dbe9e3e85a464d17b123a7dc3cd4b3a] related to [WW-5350|https://issues.apache.org/jira/browse/WW-5350]. > Access to non-static members of class objects fails with > IllegalArgumentException > --------------------------------------------------------------------------------- > > Key: WW-5497 > URL: https://issues.apache.org/jira/browse/WW-5497 > Project: Struts 2 > Issue Type: Bug > Components: Value Stack > Affects Versions: 6.7.0 > Reporter: Sebastian Götz > Priority: Major > Fix For: 6.7.1 > > > When using non-static methods of class objects in OGNL expressions, the > evaluation fails in > {code:java} > com.opensymphony.xwork2.ognl.SecurictyMemberAccess.isAccessible{code} > because only static members and constructors are allowed at this location. > > {code:java} > if (target != null) { > // Special case: Target is a Class object but not Class.class > if (Class.class.equals(target.getClass()) && !Class.class.equals(target)) > { > if (!isStatic(member) && > !Constructor.class.equals(member.getClass())) { > throw new IllegalArgumentException("Member expected to be static > or constructor!"); > } > if (!member.getDeclaringClass().equals(target)) { > throw new IllegalArgumentException("Target class does not match > member!"); > } > target = null; // This information is not useful to us and conflicts > with following logic which expects target to be null or an instance > containing the member > // Standard case: Member should exist on target > } else if > (!member.getDeclaringClass().isAssignableFrom(target.getClass())) { > throw new IllegalArgumentException("Member does not exist on > target!"); > } > }{code} > > In my concrete use-case I want to access the name of the class of an object > from within the UI rendering with a simple OGNL expression: > {noformat} > <s:property value="#attr.node.type.name"/>{noformat} > The object is on the stack and found by the ValueStack and resolve to > java.lang.Object.class. Access to the {{getName()}} method is failing in this > line > {code:java} > if (!isStatic(member) && !Constructor.class.equals(member.getClass()) {code} > Is this the desired behavior or is the implementation not considering class > objects having non-static members as well? -- This message was sent by Atlassian Jira (v8.20.10#820010)