in src/main/java/org/apache/commons/beanutils2/PropertyUtilsBean.java [1053:1111]
public Class<?> getPropertyType(Object bean, String name)
throws IllegalAccessException, InvocationTargetException,
NoSuchMethodException {
if (bean == null) {
throw new IllegalArgumentException("No bean specified");
}
if (name == null) {
throw new IllegalArgumentException("No name specified for bean class '" +
bean.getClass() + "'");
}
// Resolve nested references
while (resolver.hasNested(name)) {
final String next = resolver.next(name);
final Object nestedBean = getProperty(bean, next);
if (nestedBean == null) {
throw new NestedNullException
("Null property value for '" + next +
"' on bean class '" + bean.getClass() + "'");
}
bean = nestedBean;
name = resolver.remove(name);
}
// Remove any subscript from the final name value
name = resolver.getProperty(name);
// Special handling for DynaBeans
if (bean instanceof DynaBean) {
final DynaProperty descriptor =
((DynaBean) bean).getDynaClass().getDynaProperty(name);
if (descriptor == null) {
return null;
}
final Class<?> type = descriptor.getType();
if (type == null) {
return null;
}
if (type.isArray()) {
return type.getComponentType();
}
return type;
}
final PropertyDescriptor descriptor =
getPropertyDescriptor(bean, name);
if (descriptor == null) {
return null;
}
if (descriptor instanceof IndexedPropertyDescriptor) {
return ((IndexedPropertyDescriptor) descriptor).
getIndexedPropertyType();
}
if (descriptor instanceof MappedPropertyDescriptor) {
return ((MappedPropertyDescriptor) descriptor).
getMappedPropertyType();
}
return descriptor.getPropertyType();
}