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
This commit is contained in:
Sam Brannen 2024-01-14 15:19:04 +01:00
parent 5d309d5724
commit 7daff59cb1
2 changed files with 12 additions and 24 deletions

View File

@ -172,7 +172,7 @@ public class SimpleAliasRegistry implements AliasRegistry {
throw new IllegalStateException( throw new IllegalStateException(
"Cannot register resolved alias '" + resolvedAlias + "' (original: '" + alias + "Cannot register resolved alias '" + resolvedAlias + "' (original: '" + alias +
"') for name '" + resolvedName + "': It is already registered for name '" + "') for name '" + resolvedName + "': It is already registered for name '" +
registeredName + "'."); existingName + "'.");
} }
checkForAliasCircle(resolvedName, resolvedAlias); checkForAliasCircle(resolvedName, resolvedAlias);
this.aliasMap.remove(alias); this.aliasMap.remove(alias);

View File

@ -192,36 +192,24 @@ class SimpleAliasRegistryTests {
} }
@Test @Test
void resolveAliasesWithComplexPlaceholderReplacementAndConfigurationError() { void resolveAliasesWithPlaceholderReplacementConflict() {
StringValueResolver valueResolver = new StubStringValueResolver(Map.of( StringValueResolver valueResolver = new StubStringValueResolver(Map.of(ALIAS1, ALIAS2));
NAME3, NAME4,
ALIAS3, ALIAS4,
ALIAS4, ALIAS5
));
registerAlias(NAME3, ALIAS3); registerAlias(NAME1, ALIAS1);
registerAlias(NAME4, ALIAS4); registerAlias(NAME2, ALIAS2);
registerAlias(NAME5, ALIAS5);
// Original state: // Original state:
// WARNING: Based on ConcurrentHashMap iteration order! // ALIAS1 -> NAME1
// ALIAS3 -> NAME3 // ALIAS2 -> NAME2
// ALIAS5 -> NAME5
// ALIAS4 -> NAME4
// State after processing original entry (ALIAS3 -> NAME3): // State after processing original entry (ALIAS1 -> NAME1):
// Note that duplicate entry (ALIAS4 -> NAME4) gets removed. // ALIAS2 -> NAME1 --> Conflict: entry for ALIAS2 already exists
// ALIAS5 -> NAME5 // ALIAS2 -> NAME2
// ALIAS4 -> NAME4
// State after processing original entry (ALIAS4 -> NAME4):
// ALIAS5 -> NAME5
// ALIAS4 -> NAME4
// ALIAS5 -> NAME4 --> Conflict: entry for ALIAS5 already exists
assertThatIllegalStateException() assertThatIllegalStateException()
.isThrownBy(() -> registry.resolveAliases(valueResolver)) .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 @Test