Sebastian Götz created WW-5497:
----------------------------------

             Summary: 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


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 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)

Reply via email to