Buggy code:
public class BeanWrapperImpl extends AbstractPropertyAccessor implements BeanWrapper { private static final Log logger = LogFactory . getLog ( BeanWrapperImpl . class ) ; private Object object ; private String nestedPath = "" ; private Object rootObject ; private TypeConverterDelegate typeConverterDelegate ; private CachedIntrospectionResults cachedIntrospectionResults ; private Map < String , BeanWrapperImpl > nestedBeanWrappers ; private AccessControlContext acc ; public BeanWrapperImpl ( ) { } public BeanWrapperImpl ( boolean registerDefaultEditors ) { } public BeanWrapperImpl ( Object object ) { } public BeanWrapperImpl ( Class < ? > clazz ) { } public BeanWrapperImpl ( Object object , String nestedPath , Object rootObject ) { } private BeanWrapperImpl ( Object object , String nestedPath , BeanWrapperImpl superBw ) { } public void setWrappedInstance ( Object object ) { } public void setWrappedInstance ( Object object , String nestedPath , Object rootObject ) { } public void setSecurityContext ( AccessControlContext acc ) { } public final Object getWrappedInstance ( ) { } public final Class getWrappedClass ( ) { } public final String getNestedPath ( ) { } public final Object getRootInstance ( ) { } public final Class getRootClass ( ) { } protected void setIntrospectionClass ( Class clazz ) { } private CachedIntrospectionResults getCachedIntrospectionResults ( ) { } public PropertyDescriptor [ ] getPropertyDescriptors ( ) { <START_BUG> return getCachedIntrospectionResults ( ) . getBeanInfo ( ) . getPropertyDescriptors ( ) ; <END_BUG> } public PropertyDescriptor getPropertyDescriptor ( String propertyName ) throws BeansException { } protected PropertyDescriptor getPropertyDescriptorInternal ( String propertyName ) throws BeansException { } @ Override public Class getPropertyType ( String propertyName ) throws BeansException { } public TypeDescriptor getPropertyTypeDescriptor ( String propertyName ) throws BeansException { } public boolean isReadableProperty ( String propertyName ) { } public boolean isWritableProperty ( String propertyName ) { } public < T > T convertIfNecessary ( Object value , Class < T > requiredType , MethodParameter methodParam ) throws TypeMismatchException { } public Object convertForProperty ( Object value , String propertyName ) throws TypeMismatchException { } private String getFinalPath ( BeanWrapper bw , String nestedPath ) { } protected BeanWrapperImpl getBeanWrapperForPropertyPath ( String propertyPath ) { } private BeanWrapperImpl getNestedBeanWrapper ( String nestedProperty ) { } protected BeanWrapperImpl newNestedBeanWrapper ( Object object , String nestedPath ) { } private BeanWrapperImpl . PropertyTokenHolder getPropertyNameTokens ( String propertyName ) { } @ Override public Object getPropertyValue ( String propertyName ) throws BeansException { } private Object getPropertyValue ( BeanWrapperImpl . PropertyTokenHolder tokens ) throws BeansException { } @ Override public void setPropertyValue ( String propertyName , Object value ) throws BeansException { } @ Override public void setPropertyValue ( PropertyValue pv ) throws BeansException { } @ SuppressWarnings ( "unchecked" ) private void setPropertyValue ( BeanWrapperImpl . PropertyTokenHolder tokens , PropertyValue pv ) throws BeansException { } @ Override public String toString ( ) { } private static class PropertyTokenHolder { public String canonicalName ; public String actualName ; public String [ ] keys ; } }

Fix:
return getCachedIntrospectionResults ( ) . getPropertyDescriptors ( ) ;