From 22939b6d05bc226f47e4714f9ebcdc709de3ab16 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Sun, 3 Jul 2011 20:24:12 +0000 Subject: [PATCH] properly wrap IndexOutOfBoundsException even for List --- .../org/springframework/beans/BeanWrapperImpl.java | 8 +++++++- .../springframework/validation/DataBinderTests.java | 12 ++++++------ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/org.springframework.beans/src/main/java/org/springframework/beans/BeanWrapperImpl.java b/org.springframework.beans/src/main/java/org/springframework/beans/BeanWrapperImpl.java index e00b9ba1ad9..5dfd2b5b6f1 100644 --- a/org.springframework.beans/src/main/java/org/springframework/beans/BeanWrapperImpl.java +++ b/org.springframework.beans/src/main/java/org/springframework/beans/BeanWrapperImpl.java @@ -1005,7 +1005,13 @@ public class BeanWrapperImpl extends AbstractPropertyAccessor implements BeanWra list.add(convertedValue); } else { - list.set(index, convertedValue); + try { + list.set(index, convertedValue); + } + catch (IndexOutOfBoundsException ex) { + throw new InvalidPropertyException(getRootClass(), this.nestedPath + propertyName, + "Invalid list index in property path '" + propertyName + "'", ex); + } } } else if (propValue instanceof Map) { diff --git a/org.springframework.context/src/test/java/org/springframework/validation/DataBinderTests.java b/org.springframework.context/src/test/java/org/springframework/validation/DataBinderTests.java index c1436825f78..c02fc3ce2fd 100644 --- a/org.springframework.context/src/test/java/org/springframework/validation/DataBinderTests.java +++ b/org.springframework.context/src/test/java/org/springframework/validation/DataBinderTests.java @@ -1501,10 +1501,10 @@ public class DataBinderTests extends TestCase { DataBinder binder = new DataBinder(testBean, "testBean"); MutablePropertyValues mpvs = new MutablePropertyValues(); - mpvs.add("stringArray[4]", ""); + mpvs.add("friends[4]", ""); binder.bind(mpvs); - assertEquals(5, testBean.getStringArray().length); + assertEquals(5, testBean.getFriends().size()); } public void testAutoGrowBeyondDefaultLimit() throws Exception { @@ -1512,7 +1512,7 @@ public class DataBinderTests extends TestCase { DataBinder binder = new DataBinder(testBean, "testBean"); MutablePropertyValues mpvs = new MutablePropertyValues(); - mpvs.add("stringArray[256]", ""); + mpvs.add("friends[256]", ""); try { binder.bind(mpvs); fail("Should have thrown InvalidPropertyException"); @@ -1529,10 +1529,10 @@ public class DataBinderTests extends TestCase { binder.setAutoGrowCollectionLimit(10); MutablePropertyValues mpvs = new MutablePropertyValues(); - mpvs.add("stringArray[4]", ""); + mpvs.add("friends[4]", ""); binder.bind(mpvs); - assertEquals(5, testBean.getStringArray().length); + assertEquals(5, testBean.getFriends().size()); } public void testAutoGrowBeyondCustomLimit() throws Exception { @@ -1541,7 +1541,7 @@ public class DataBinderTests extends TestCase { binder.setAutoGrowCollectionLimit(10); MutablePropertyValues mpvs = new MutablePropertyValues(); - mpvs.add("stringArray[16]", ""); + mpvs.add("friends[16]", ""); try { binder.bind(mpvs); fail("Should have thrown InvalidPropertyException");