From 5d772554aeacc790a6ef18a079485ac0ccce4bde 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) --- .../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();