/** * Recursively looks for a named field in a class hierarchy. */ protected Field lookupFieldInHierarchy(Class<?> beanClass, String fieldName) throws SecurityException, NoSuchFieldException { // TODO: support property names following other common naming patterns, such as // "_propertyName" try { return beanClass.getDeclaredField(fieldName); } catch (NoSuchFieldException e) { Class<?> superClass = beanClass.getSuperclass(); if (superClass == null || superClass.getName().equals(Object.class.getName())) { throw e; } return lookupFieldInHierarchy(superClass, fieldName); } }
field = lookupFieldInHierarchy(beanClass, propertyName);