private Method findAnyMethodMatch(Class<?> clz,String name,Class<?>[] classes){
  try {
    Method m=clz.getDeclaredMethod(name,classes);
    if (m != null) {
      return m;
    }
  }
 catch (  NoSuchMethodException ignored) {
  }
  Class<?> sup=clz.getSuperclass();
  if (sup != null) {
    Method m=findAnyMethodMatch(sup,name,classes);
    if (m != null) {
      return m;
    }
  }
  Class<?>[] itfs=clz.getInterfaces();
  if (itfs != null && itfs.length > 0) {
    for (    Class<?> itf : itfs) {
      Method m=findAnyMethodMatch(itf,name,classes);
      if (m != null) {
        return m;
      }
    }
  }
  return null;
}

private Method findAnyMethodMatch ( Class < ? > clz , String name , Class < ? > [ ] classes ) { try { Method m = clz . getDeclaredMethod ( name , classes ) ; if ( m != null ) { return m ; } } catch ( NoSuchMethodException ignored ) { } Class < ? > sup = clz . getSuperclass ( ) ; if ( sup != null ) { Method m = findAnyMethodMatch ( sup , name , classes ) ; if ( m != null ) { return m ; } } Class < ? > [ ] itfs = clz . getInterfaces ( ) ; if ( itfs != null && itfs . length > 0 ) { for ( Class < ? > itf : itfs ) { Method m = findAnyMethodMatch ( itf , name , classes ) ; if ( m != null ) { return m ; } } } return null ; }
fix for issue 216 , travel all the parent of class and use getdeclaredmethod to find methods
