[SPR-6063] fixed issue with inconsistent views of PropertyDescriptors
This commit is contained in:
parent
aa08c11976
commit
01fb1825f5
|
|
@ -338,7 +338,7 @@ public abstract class BeanUtils {
|
||||||
*/
|
*/
|
||||||
public static PropertyDescriptor[] getPropertyDescriptors(Class<?> clazz) throws BeansException {
|
public static PropertyDescriptor[] getPropertyDescriptors(Class<?> clazz) throws BeansException {
|
||||||
CachedIntrospectionResults cr = CachedIntrospectionResults.forClass(clazz);
|
CachedIntrospectionResults cr = CachedIntrospectionResults.forClass(clazz);
|
||||||
return cr.getBeanInfo().getPropertyDescriptors();
|
return cr.getPropertyDescriptors();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -275,7 +275,7 @@ public class BeanWrapperImpl extends AbstractPropertyAccessor implements BeanWra
|
||||||
|
|
||||||
|
|
||||||
public PropertyDescriptor[] getPropertyDescriptors() {
|
public PropertyDescriptor[] getPropertyDescriptors() {
|
||||||
return getCachedIntrospectionResults().getBeanInfo().getPropertyDescriptors();
|
return getCachedIntrospectionResults().getPropertyDescriptors();
|
||||||
}
|
}
|
||||||
|
|
||||||
public PropertyDescriptor getPropertyDescriptor(String propertyName) throws BeansException {
|
public PropertyDescriptor getPropertyDescriptor(String propertyName) throws BeansException {
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,7 @@ import java.util.Iterator;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.WeakHashMap;
|
import java.util.WeakHashMap;
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
@ -268,4 +269,9 @@ public class CachedIntrospectionResults {
|
||||||
return this.propertyDescriptorCache.get(propertyName);
|
return this.propertyDescriptorCache.get(propertyName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PropertyDescriptor[] getPropertyDescriptors() {
|
||||||
|
Collection<PropertyDescriptor> descriptorCollection = this.propertyDescriptorCache.values();
|
||||||
|
return descriptorCollection.toArray(new PropertyDescriptor[descriptorCollection.size()]);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -249,6 +249,19 @@ public final class BeanUtilsTests {
|
||||||
assertSignatureEquals(desiredMethod, "doSomethingWithAMultiDimensionalArray(java.lang.String[][])");
|
assertSignatureEquals(desiredMethod, "doSomethingWithAMultiDimensionalArray(java.lang.String[][])");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSPR6063() {
|
||||||
|
PropertyDescriptor[] descrs = BeanUtils.getPropertyDescriptors(Bean.class);
|
||||||
|
|
||||||
|
PropertyDescriptor keyDescr = BeanUtils.getPropertyDescriptor(Bean.class, "value");
|
||||||
|
assertEquals(String.class, keyDescr.getPropertyType());
|
||||||
|
for (PropertyDescriptor propertyDescriptor : descrs) {
|
||||||
|
if (propertyDescriptor.getName().equals(keyDescr.getName())) {
|
||||||
|
assertEquals(propertyDescriptor.getName() + " has unexpected type", keyDescr.getPropertyType(), propertyDescriptor.getPropertyType());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void assertSignatureEquals(Method desiredMethod, String signature) {
|
private void assertSignatureEquals(Method desiredMethod, String signature) {
|
||||||
assertEquals(desiredMethod, BeanUtils.resolveSignature(signature, MethodSignatureBean.class));
|
assertEquals(desiredMethod, BeanUtils.resolveSignature(signature, MethodSignatureBean.class));
|
||||||
}
|
}
|
||||||
|
|
@ -330,4 +343,38 @@ public final class BeanUtilsTests {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private interface MapEntry<K, V> {
|
||||||
|
|
||||||
|
K getKey();
|
||||||
|
|
||||||
|
void setKey(V value);
|
||||||
|
|
||||||
|
V getValue();
|
||||||
|
|
||||||
|
void setValue(V value);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class Bean implements MapEntry<String, String> {
|
||||||
|
|
||||||
|
private String key;
|
||||||
|
|
||||||
|
private String value;
|
||||||
|
|
||||||
|
public String getKey() {
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setKey(String aKey) {
|
||||||
|
key = aKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValue(String aValue) {
|
||||||
|
value = aValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue