Browse Source

Fixed primitive type assignability in BeanUtils.copyProperties

Issue: SPR-11231
pull/106/merge
Juergen Hoeller 12 years ago
parent
commit
8a3b4c69c8
  1. 2
      spring-beans/src/main/java/org/springframework/beans/BeanUtils.java
  2. 24
      spring-beans/src/test/java/org/springframework/beans/BeanUtilsTests.java

2
spring-beans/src/main/java/org/springframework/beans/BeanUtils.java

@ -600,7 +600,7 @@ public abstract class BeanUtils { @@ -600,7 +600,7 @@ public abstract class BeanUtils {
if (sourcePd != null) {
Method readMethod = sourcePd.getReadMethod();
if (readMethod != null &&
writeMethod.getParameterTypes()[0].isAssignableFrom(readMethod.getReturnType())) {
ClassUtils.isAssignable(writeMethod.getParameterTypes()[0], readMethod.getReturnType())) {
try {
if (!Modifier.isPublic(readMethod.getDeclaringClass().getModifiers())) {
readMethod.setAccessible(true);

24
spring-beans/src/test/java/org/springframework/beans/BeanUtilsTests.java

@ -189,9 +189,13 @@ public final class BeanUtilsTests { @@ -189,9 +189,13 @@ public final class BeanUtilsTests {
public void testCopyPropertiesWithInvalidProperty() {
InvalidProperty source = new InvalidProperty();
source.setName("name");
source.setFlag1(true);
source.setFlag2(true);
InvalidProperty target = new InvalidProperty();
BeanUtils.copyProperties(source, target);
assertEquals(target.getName(), "name");
assertTrue(target.getFlag1());
assertTrue(target.getFlag2());
}
@Test
@ -308,6 +312,10 @@ public final class BeanUtilsTests { @@ -308,6 +312,10 @@ public final class BeanUtilsTests {
private String value;
private boolean flag1;
private boolean flag2;
public void setName(String name) {
this.name = name;
}
@ -323,6 +331,22 @@ public final class BeanUtilsTests { @@ -323,6 +331,22 @@ public final class BeanUtilsTests {
public String getValue() {
return this.value;
}
public void setFlag1(boolean flag1) {
this.flag1 = flag1;
}
public Boolean getFlag1() {
return this.flag1;
}
public void setFlag2(Boolean flag2) {
this.flag2 = flag2;
}
public boolean getFlag2() {
return this.flag2;
}
}

Loading…
Cancel
Save