I would recommend submitting your fix as a bug report on bugzilla.
http://nagoya.apache.org/bugzilla/
It's much more likely to get dealt with if you submit it there.
Hal
> -----Original Message-----
> From: Rashid Desai [mailto:[EMAIL PROTECTED]]
> Sent: Tuesday, April 03, 2001 3:05 PM
> To: [EMAIL PROTECTED]
> Subject: PropertyUtils.java
>
>
> I have found out that the method getAccessibleMethod(Method
> method) in
> PropertyUtils.java does not return the method as acessible
> public method of
> the class if the class implements an interface which inherits
> from other
> interfaces.
>
> e.g. com.sun.xml.CommentNode implements org.w3c.dom.Comment
> Interface which
> implements org.w3c.dom.Node and org.w3c.dom.CharacterData Interfaces.
>
> The method getNodeName is a get (Read) Property of the Node
> Interface.
> Looking for that property/method returns null in the current
> implementation.
>
> I have modified the getAccessibleMethod() which uses the
> added new private
> method called getAccessibleMethodFromInterfaceNest(..) which
> recursively
> searches for the method through the interface heirarchy.
>
> I Would appreciate any feedback and hope that this change can be
> incorporated into the core.
>
> Rashid Desai
>
> /**
> * Return an accessible method (that is, one that can be invoked via
> * reflection) that implements the specified Method. If no such method
> * can be found, return null.
> *
> * @param method The method that we wish to call
> */
> private static Method getAccessibleMethod(Method method) {
> // Make sure we have a method to check
> if (method == null) {
> return (null);
> }
>
> // If the requested method is not public we cannot call it
> if (!Modifier.isPublic(method.getModifiers())) {
> return (null);
> }
>
> // If the declaring class is public, we are done
> Class clazz = method.getDeclaringClass();
> if (Modifier.isPublic(clazz.getModifiers())) {
> return (method);
> }
>
> // Check the implemented interfaces
> String methodName = method.getName();
> Class[] parameterTypes = method.getParameterTypes();
>
> //nest through interface heirarchy looking for the method
> method =
> getAccessibleMethodFromInterfaceNest(clazz,methodName,parameterTypes);
> return (method);
> }
>
> /**
> * Return an accessible method (that is, one that can be invoked via
> * reflection) by nesting from parent interface through
> Inherited interfaces
> * to look for the interface that implements the specific Method.
> * If no such method can be found, return null.
> *
> *@param parentInterfaceClass The parent Interface from which
> we nest through
> looking for accessible method
> *@param method The method that we wish to call
> */
> private static Method getAccessibleMethodFromInterfaceNest(Class
> parentInterfaceClass, String methodName, Class[] parameterTypes)
> {
> Method method=null;
> // Check the implemented interfaces
> Class[] interfaces = parentInterfaceClass.getInterfaces();
> for (int i = 0; i < interfaces.length; i++) {
>
> // Is this interface public?
> if (!Modifier.isPublic(interfaces[i].getModifiers())) {
> continue;
> }
>
> // Does the method exist on this interface?
> try {
> method = interfaces[i].getDeclaredMethod(methodName,
> parameterTypes);
> } catch (NoSuchMethodException e) {
>
> //try recursively looking for the method
> method =
> getAccessibleMethodFromInterfaceNest(interfaces[i],methodName,
> parameterTypes);
> }
> }
> // Return whatever we have null or a good method
> return (method);
> }
> _________________________________________________________________
> Get your FREE download of MSN Explorer at http://explorer.msn.com
>