From 7daff59cb164aeb8fcd1a01c4150b8e5e6caca3f Mon Sep 17 00:00:00 2001 From: Sam Brannen <104798+sbrannen@users.noreply.github.com> Date: Sun, 14 Jan 2024 15:19:04 +0100 Subject: [PATCH] Fix alias resolution error message in SimpleAliasRegistry Prior to this commit, the alias resolution error message in SimpleAliasRegistry was misleading. When a resolution conflict is detected, the IllegalStateException thrown by resolveAliases(...) now states that the resolved alias is already registered for an `existingName` instead of the `registeredName`. See gh-31353 Closes gh-32025 --- .../core/SimpleAliasRegistry.java | 2 +- .../core/SimpleAliasRegistryTests.java | 34 ++++++------------- 2 files changed, 12 insertions(+), 24 deletions(-) diff --git a/spring-core/src/main/java/org/springframework/core/SimpleAliasRegistry.java b/spring-core/src/main/java/org/springframework/core/SimpleAliasRegistry.java index 15c93e74263..5f89a3bf098 100644 --- a/spring-core/src/main/java/org/springframework/core/SimpleAliasRegistry.java +++ b/spring-core/src/main/java/org/springframework/core/SimpleAliasRegistry.java @@ -172,7 +172,7 @@ public class SimpleAliasRegistry implements AliasRegistry { throw new IllegalStateException( "Cannot register resolved alias '" + resolvedAlias + "' (original: '" + alias + "') for name '" + resolvedName + "': It is already registered for name '" + - registeredName + "'."); + existingName + "'."); } checkForAliasCircle(resolvedName, resolvedAlias); this.aliasMap.remove(alias); diff --git a/spring-core/src/test/java/org/springframework/core/SimpleAliasRegistryTests.java b/spring-core/src/test/java/org/springframework/core/SimpleAliasRegistryTests.java index ed78f7fb8ef..8915044d90b 100644 --- a/spring-core/src/test/java/org/springframework/core/SimpleAliasRegistryTests.java +++ b/spring-core/src/test/java/org/springframework/core/SimpleAliasRegistryTests.java @@ -192,36 +192,24 @@ class SimpleAliasRegistryTests { } @Test - void resolveAliasesWithComplexPlaceholderReplacementAndConfigurationError() { - StringValueResolver valueResolver = new StubStringValueResolver(Map.of( - NAME3, NAME4, - ALIAS3, ALIAS4, - ALIAS4, ALIAS5 - )); + void resolveAliasesWithPlaceholderReplacementConflict() { + StringValueResolver valueResolver = new StubStringValueResolver(Map.of(ALIAS1, ALIAS2)); - registerAlias(NAME3, ALIAS3); - registerAlias(NAME4, ALIAS4); - registerAlias(NAME5, ALIAS5); + registerAlias(NAME1, ALIAS1); + registerAlias(NAME2, ALIAS2); // Original state: - // WARNING: Based on ConcurrentHashMap iteration order! - // ALIAS3 -> NAME3 - // ALIAS5 -> NAME5 - // ALIAS4 -> NAME4 + // ALIAS1 -> NAME1 + // ALIAS2 -> NAME2 - // State after processing original entry (ALIAS3 -> NAME3): - // Note that duplicate entry (ALIAS4 -> NAME4) gets removed. - // ALIAS5 -> NAME5 - // ALIAS4 -> NAME4 - - // State after processing original entry (ALIAS4 -> NAME4): - // ALIAS5 -> NAME5 - // ALIAS4 -> NAME4 - // ALIAS5 -> NAME4 --> Conflict: entry for ALIAS5 already exists + // State after processing original entry (ALIAS1 -> NAME1): + // ALIAS2 -> NAME1 --> Conflict: entry for ALIAS2 already exists + // ALIAS2 -> NAME2 assertThatIllegalStateException() .isThrownBy(() -> registry.resolveAliases(valueResolver)) - .withMessageStartingWith("Cannot register resolved alias"); + .withMessage("Cannot register resolved alias '%s' (original: '%s') for name '%s': " + + "It is already registered for name '%s'.", ALIAS2, ALIAS1, NAME1, NAME2); } @Test