From 997c3dcc75a593d285b61137bd3043e29c51b4de Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Thu, 12 Nov 2009 16:22:42 +0000 Subject: [PATCH] report error in case of constructor-arg index ambiguity (SPR-6329) git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@2404 50f2f4bb-b051-0410-bef5-90022cba6387 --- .../beans/factory/config/ConstructorArgumentValues.java | 8 ++++++++ .../beans/factory/xml/BeanDefinitionParserDelegate.java | 7 ++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/org.springframework.beans/src/main/java/org/springframework/beans/factory/config/ConstructorArgumentValues.java b/org.springframework.beans/src/main/java/org/springframework/beans/factory/config/ConstructorArgumentValues.java index 70d8f6e9ab8..f71eb5d178f 100644 --- a/org.springframework.beans/src/main/java/org/springframework/beans/factory/config/ConstructorArgumentValues.java +++ b/org.springframework.beans/src/main/java/org/springframework/beans/factory/config/ConstructorArgumentValues.java @@ -131,6 +131,14 @@ public class ConstructorArgumentValues { this.indexedArgumentValues.put(key, newValue); } + /** + * Check whether an argument value has been registered for the given index. + * @param index the index in the constructor argument list + */ + public boolean hasIndexedArgumentValue(int index) { + return this.indexedArgumentValues.containsKey(index); + } + /** * Get argument value for the given index in the constructor argument list. * @param index the index in the constructor argument list diff --git a/org.springframework.beans/src/main/java/org/springframework/beans/factory/xml/BeanDefinitionParserDelegate.java b/org.springframework.beans/src/main/java/org/springframework/beans/factory/xml/BeanDefinitionParserDelegate.java index c28f0b18a28..827ce97566a 100644 --- a/org.springframework.beans/src/main/java/org/springframework/beans/factory/xml/BeanDefinitionParserDelegate.java +++ b/org.springframework.beans/src/main/java/org/springframework/beans/factory/xml/BeanDefinitionParserDelegate.java @@ -778,7 +778,12 @@ public class BeanDefinitionParserDelegate { valueHolder.setName(nameAttr); } valueHolder.setSource(extractSource(ele)); - bd.getConstructorArgumentValues().addIndexedArgumentValue(index, valueHolder); + if (bd.getConstructorArgumentValues().hasIndexedArgumentValue(index)) { + error("Ambiguous constructor-arg entries for index " + index, ele); + } + else { + bd.getConstructorArgumentValues().addIndexedArgumentValue(index, valueHolder); + } } finally { this.parseState.pop();