[jira] Created: (BEANUTILS-298) MethodUtils.getAccessibleMethod(Method method) could not find right public method

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

[jira] Created: (BEANUTILS-298) MethodUtils.getAccessibleMethod(Method method) could not find right public method

ASF GitHub Bot (Jira)
MethodUtils.getAccessibleMethod(Method method) could not find right public method
---------------------------------------------------------------------------------

                 Key: BEANUTILS-298
                 URL: https://issues.apache.org/jira/browse/BEANUTILS-298
             Project: Commons BeanUtils
          Issue Type: Bug
          Components: Bean / Property Utils
    Affects Versions: 1.8.0-BETA, 1.7.0
         Environment: Java 1.5, Windows XP
            Reporter: Roman Mukhin
            Priority: Minor


Let assume follows:

public interface IX {
  getName();
}

class BaseX {
  public getName();
}


class ImplX  extends BaseX implements IX {
}

For some reason I do not want that BaseX implements IX, but if we have a bean of type ImplX we can call getName().

PropertyUtils.getProperty(beanOfTypeBaseX, "name") could not get the value, because the method MethodUtils.getAccessibleMethod(Method method)  looks up only throunght supercalsses and interfaces of implementing class but not the subclasses and interfaces that they implement!

So PropertyUtils.getProperty(beanOfTypeBaseX, "name") throws an Exception that the method is not accessible, but at the same time I can call beanOfTypeBaseX.getName()

--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply | Threaded
Open this post in threaded view
|

[jira] Updated: (BEANUTILS-298) MethodUtils.getAccessibleMethod(Method method) could not find right public method

ASF GitHub Bot (Jira)

     [ https://issues.apache.org/jira/browse/BEANUTILS-298?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Niall Pemberton updated BEANUTILS-298:
--------------------------------------

    Fix Version/s: 1.8.0

> MethodUtils.getAccessibleMethod(Method method) could not find right public method
> ---------------------------------------------------------------------------------
>
>                 Key: BEANUTILS-298
>                 URL: https://issues.apache.org/jira/browse/BEANUTILS-298
>             Project: Commons BeanUtils
>          Issue Type: Bug
>          Components: Bean / Property Utils
>    Affects Versions: 1.7.0, 1.8.0-BETA
>         Environment: Java 1.5, Windows XP
>            Reporter: Roman Mukhin
>            Priority: Minor
>             Fix For: 1.8.0
>
>
> Let assume follows:
> public interface IX {
>   getName();
> }
> class BaseX {
>   public getName();
> }
> class ImplX  extends BaseX implements IX {
> }
> For some reason I do not want that BaseX implements IX, but if we have a bean of type ImplX we can call getName().
> PropertyUtils.getProperty(beanOfTypeBaseX, "name") could not get the value, because the method MethodUtils.getAccessibleMethod(Method method)  looks up only throunght supercalsses and interfaces of implementing class but not the subclasses and interfaces that they implement!
> So PropertyUtils.getProperty(beanOfTypeBaseX, "name") throws an Exception that the method is not accessible, but at the same time I can call beanOfTypeBaseX.getName()

--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply | Threaded
Open this post in threaded view
|

[jira] Resolved: (BEANUTILS-298) MethodUtils.getAccessibleMethod(Method method) could not find right public method

ASF GitHub Bot (Jira)
In reply to this post by ASF GitHub Bot (Jira)

     [ https://issues.apache.org/jira/browse/BEANUTILS-298?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Niall Pemberton resolved BEANUTILS-298.
---------------------------------------

    Resolution: Fixed
      Assignee: Niall Pemberton

Thanks for reporting this. Unfortunately in this scenario there is no fix for MethodUtils.getAccessibleMethod(Method) - since it can only check superclasses/interfaces of the class returned by Method.getDeclaringClass(). In your scenario the declaring class is BaseX and therefore the interface IX is not available. So I have added a new MethodUtils.getAccessibleMethod(Class, Method) method which can be used instead. I have changed PropertyUtils to use this new method so that now your PropertyUtils.getProperty(beanOfTypeBaseX, "name")  works:

http://svn.apache.org/viewvc?view=rev&revision=644143

Closing this as fixed.


> MethodUtils.getAccessibleMethod(Method method) could not find right public method
> ---------------------------------------------------------------------------------
>
>                 Key: BEANUTILS-298
>                 URL: https://issues.apache.org/jira/browse/BEANUTILS-298
>             Project: Commons BeanUtils
>          Issue Type: Bug
>          Components: Bean / Property Utils
>    Affects Versions: 1.7.0, 1.8.0-BETA
>         Environment: Java 1.5, Windows XP
>            Reporter: Roman Mukhin
>            Assignee: Niall Pemberton
>            Priority: Minor
>             Fix For: 1.8.0
>
>
> Let assume follows:
> public interface IX {
>   getName();
> }
> class BaseX {
>   public getName();
> }
> class ImplX  extends BaseX implements IX {
> }
> For some reason I do not want that BaseX implements IX, but if we have a bean of type ImplX we can call getName().
> PropertyUtils.getProperty(beanOfTypeBaseX, "name") could not get the value, because the method MethodUtils.getAccessibleMethod(Method method)  looks up only throunght supercalsses and interfaces of implementing class but not the subclasses and interfaces that they implement!
> So PropertyUtils.getProperty(beanOfTypeBaseX, "name") throws an Exception that the method is not accessible, but at the same time I can call beanOfTypeBaseX.getName()

--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.