diff --git a/org.springframework.beans/src/main/java/org/springframework/beans/TypeConverterDelegate.java b/org.springframework.beans/src/main/java/org/springframework/beans/TypeConverterDelegate.java index 5ffbad61b21f3b2b5c3bd4e8044d4d4b900c6459..8d888edc6fe9073cdb79d3b54e2a1672d9047eab 100644 --- a/org.springframework.beans/src/main/java/org/springframework/beans/TypeConverterDelegate.java +++ b/org.springframework.beans/src/main/java/org/springframework/beans/TypeConverterDelegate.java @@ -132,7 +132,7 @@ class TypeConverterDelegate { // No custom editor but custom ConversionService specified? ConversionService conversionService = this.propertyEditorRegistry.getConversionService(); - if (editor == null && conversionService != null && convertedValue != null) { + if (editor == null && conversionService != null && convertedValue != null && typeDescriptor != null) { TypeDescriptor sourceTypeDesc = TypeDescriptor.forObject(newValue); TypeDescriptor targetTypeDesc = typeDescriptor; if (conversionService.canConvert(sourceTypeDesc, targetTypeDesc)) { diff --git a/org.springframework.beans/src/test/java/org/springframework/beans/BeanWrapperTests.java b/org.springframework.beans/src/test/java/org/springframework/beans/BeanWrapperTests.java index 69fbafdf7d33794235dbed50110fd09064e945f3..49c301284a57e9f1b822648477851fef6234078e 100644 --- a/org.springframework.beans/src/test/java/org/springframework/beans/BeanWrapperTests.java +++ b/org.springframework.beans/src/test/java/org/springframework/beans/BeanWrapperTests.java @@ -70,20 +70,41 @@ import test.beans.TestBean; public final class BeanWrapperTests { @Test - @Ignore public void testNullNestedTypeDescriptor() { Foo foo = new Foo(); BeanWrapperImpl wrapper = new BeanWrapperImpl(foo); wrapper.setConversionService(new DefaultConversionService()); wrapper.setAutoGrowNestedPaths(true); wrapper.setPropertyValue("listOfMaps[0]['luckyNumber']", "9"); - assertEquals(9, foo.listOfMaps.get(0).get("luckyNumber")); + assertEquals("9", foo.listOfMaps.get(0).get("luckyNumber")); + } + + @Test + public void testNullNestedTypeDescriptor2() { + Foo foo = new Foo(); + BeanWrapperImpl wrapper = new BeanWrapperImpl(foo); + wrapper.setConversionService(new DefaultConversionService()); + wrapper.setAutoGrowNestedPaths(true); + Map map = new HashMap(); + map.put("favoriteNumber", "9"); + wrapper.setPropertyValue("list[0]", map); + assertEquals(map, foo.list.get(0)); } static class Foo { + private List list; + private List listOfMaps; + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + public List getListOfMaps() { return listOfMaps; }