in empire-db/src/main/java/org/apache/empire/commons/ClassUtils.java [252:291]
public static synchronized Object getFieldValue(Class<?> clazz, Object object, String property, boolean includePrivateFields)
{
// check arguments
if (clazz==null || (object!=null && !clazz.isInstance(object)))
throw new InvalidArgumentException("clazz", clazz);
if (StringUtils.isEmpty(property))
throw new InvalidArgumentException("property", property);
// begin
boolean accessible = true;
Field field = null;
try
{ // find and invoke
field = (includePrivateFields ? clazz.getDeclaredField(property) : clazz.getField(property));
accessible = field.isAccessible();
if (includePrivateFields && accessible==false)
field.setAccessible(true);
// invoke
return field.get(object);
}
catch (NoSuchFieldException e)
{ // No such Method
if (includePrivateFields)
{ // try superclass
clazz = clazz.getSuperclass();
if (clazz!=null && !clazz.equals(java.lang.Object.class))
return getFieldValue(clazz, object, property, true);
}
// not found
return null;
}
catch (IllegalAccessException e)
{ // Invalid Method definition
throw new NotSupportedException(object, property, e);
}
finally {
// restore accessible
if (field!=null && accessible==false)
field.setAccessible(false);
}
}