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 8906a45299..2ad4877376 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 @@ -437,6 +437,16 @@ class TypeConverterDelegate { protected Collection convertToTypedCollection( Collection original, String propertyName, Class requiredType, MethodParameter methodParam) { + boolean originalAllowed = requiredType.isInstance(original); + Class elementType = null; + if (methodParam != null) { + elementType = GenericCollectionTypeResolver.getCollectionParameterType(methodParam); + } + if (elementType == null && originalAllowed && + !this.propertyEditorRegistry.hasCustomEditorForElement(null, propertyName)) { + return original; + } + Iterator it; try { it = original.iterator(); @@ -473,16 +483,6 @@ class TypeConverterDelegate { return original; } - boolean originalAllowed = requiredType.isInstance(original); - Class elementType = null; - if (methodParam != null) { - elementType = GenericCollectionTypeResolver.getCollectionParameterType(methodParam); - } - if (elementType == null && originalAllowed && - !this.propertyEditorRegistry.hasCustomEditorForElement(null, propertyName)) { - return original; - } - int i = 0; for (; it.hasNext(); i++) { Object element = it.next(); @@ -503,6 +503,18 @@ class TypeConverterDelegate { @SuppressWarnings("unchecked") protected Map convertToTypedMap(Map original, String propertyName, Class requiredType, MethodParameter methodParam) { + boolean originalAllowed = requiredType.isInstance(original); + Class keyType = null; + Class valueType = null; + if (methodParam != null) { + keyType = GenericCollectionTypeResolver.getMapKeyParameterType(methodParam); + valueType = GenericCollectionTypeResolver.getMapValueParameterType(methodParam); + } + if (keyType == null && valueType == null && originalAllowed && + !this.propertyEditorRegistry.hasCustomEditorForElement(null, propertyName)) { + return original; + } + Iterator it; try { it = original.entrySet().iterator(); @@ -539,18 +551,6 @@ class TypeConverterDelegate { return original; } - boolean originalAllowed = requiredType.isInstance(original); - Class keyType = null; - Class valueType = null; - if (methodParam != null) { - keyType = GenericCollectionTypeResolver.getMapKeyParameterType(methodParam); - valueType = GenericCollectionTypeResolver.getMapValueParameterType(methodParam); - } - if (keyType == null && valueType == null && originalAllowed && - !this.propertyEditorRegistry.hasCustomEditorForElement(null, propertyName)) { - return original; - } - while (it.hasNext()) { Map.Entry entry = (Map.Entry) it.next(); Object key = entry.getKey(); diff --git a/org.springframework.beans/src/test/java/test/beans/DerivedTestBean.java b/org.springframework.beans/src/test/java/test/beans/DerivedTestBean.java index 0dc065dd7b..74aebf7515 100644 --- a/org.springframework.beans/src/test/java/test/beans/DerivedTestBean.java +++ b/org.springframework.beans/src/test/java/test/beans/DerivedTestBean.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2007 the original author or authors. + * Copyright 2002-2009 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -60,6 +60,10 @@ public class DerivedTestBean extends TestBean implements Serializable, BeanNameA return beanName; } + public void setActualSpouse(TestBean spouse) { + setSpouse(spouse); + } + public void setSpouseRef(String name) { setSpouse(new TestBean(name)); } @@ -82,4 +86,4 @@ public class DerivedTestBean extends TestBean implements Serializable, BeanNameA return destroyed; } -} \ No newline at end of file +} diff --git a/org.springframework.beans/src/test/java/test/beans/TestBean.java b/org.springframework.beans/src/test/java/test/beans/TestBean.java index d1f191549c..7e8089e6e7 100644 --- a/org.springframework.beans/src/test/java/test/beans/TestBean.java +++ b/org.springframework.beans/src/test/java/test/beans/TestBean.java @@ -200,10 +200,6 @@ public class TestBean implements BeanNameAware, BeanFactoryAware, ITestBean, IOt this.spouses = new ITestBean[] {spouse}; } - public void setActualSpouse(TestBean spouse) { - this.spouses = new ITestBean[] {spouse}; - } - public ITestBean getSpouse() { return (spouses != null ? spouses[0] : null); } diff --git a/org.springframework.beans/src/test/resources/org/springframework/beans/factory/xml/collections.xml b/org.springframework.beans/src/test/resources/org/springframework/beans/factory/xml/collections.xml index 2aa3ba5dee..33d2f20698 100644 --- a/org.springframework.beans/src/test/resources/org/springframework/beans/factory/xml/collections.xml +++ b/org.springframework.beans/src/test/resources/org/springframework/beans/factory/xml/collections.xml @@ -44,7 +44,7 @@ - + David 27