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
> 

Reply via email to