in src/main/java/org/apache/sling/models/impl/via/BeanPropertyViaProvider.java [42:65]
public Object getAdaptable(Object original, String value) {
if (StringUtils.isBlank(value)) {
return ORIGINAL;
}
// support nested values, e.g. requestPathInfo.suffixResource.path
if (StringUtils.contains(value, '.')) {
String[] parts = StringUtils.split(value, ".", 2);
Object adaptable = getAdaptable(original, parts[0]);
return getAdaptable(adaptable, parts[1]);
}
try {
BeanInfo beanInfo = Introspector.getBeanInfo(original.getClass());
for (PropertyDescriptor desc : beanInfo.getPropertyDescriptors()) {
if (desc.getName().equals(value)) {
return desc.getReadMethod().invoke(original);
}
}
} catch (Exception e) {
log.error("Unable to execution projection " + value, e);
}
return null;
}