diff --git a/src/main/java/org/apache/ibatis/builder/xml/XMLMapperBuilder.java b/src/main/java/org/apache/ibatis/builder/xml/XMLMapperBuilder.java index ea2577381e3..a652a13b0e0 100644 --- a/src/main/java/org/apache/ibatis/builder/xml/XMLMapperBuilder.java +++ b/src/main/java/org/apache/ibatis/builder/xml/XMLMapperBuilder.java @@ -239,7 +239,7 @@ private ResultMap resultMapElement(XNode resultMapNode, List addi resultMappings.add(buildResultMappingFromContext(resultChild, typeClass, flags)); } } - String id = resultMapNode.getStringAttribute("id", resultMapNode.getValueBasedIdentifier()); + String id = resultMapNode.getStringAttribute("id", resultMapNode::getValueBasedIdentifier); String extend = resultMapNode.getStringAttribute("extends"); Boolean autoMapping = resultMapNode.getBooleanAttribute("autoMapping"); ResultMapResolver resultMapResolver = new ResultMapResolver(builderAssistant, id, typeClass, extend, discriminator, @@ -289,8 +289,7 @@ private Discriminator processDiscriminatorElement(XNode context, Class result Map discriminatorMap = new HashMap<>(); for (XNode caseChild : context.getChildren()) { String value = caseChild.getStringAttribute("value"); - String resultMap = caseChild.getStringAttribute("resultMap", - processNestedResultMappings(caseChild, resultMappings, resultType)); + String resultMap = caseChild.getStringAttribute("resultMap", () -> processNestedResultMappings(caseChild, resultMappings, resultType)); discriminatorMap.put(value, resultMap); } return builderAssistant.buildDiscriminator(resultType, column, javaTypeClass, jdbcTypeEnum, typeHandlerClass, diff --git a/src/test/java/org/apache/ibatis/type/TypeAliasRegistryTest.java b/src/test/java/org/apache/ibatis/type/TypeAliasRegistryTest.java index b2b2b8df982..b70b1a2153d 100644 --- a/src/test/java/org/apache/ibatis/type/TypeAliasRegistryTest.java +++ b/src/test/java/org/apache/ibatis/type/TypeAliasRegistryTest.java @@ -15,6 +15,7 @@ */ package org.apache.ibatis.type; +import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -75,4 +76,21 @@ void shouldFetchCharType() { assertEquals(char[].class, typeAliasRegistry.resolveAlias("_char[]")); } + @Test + void shouldNotBeAbleToRegisterAliasWithEmptyString() { + TypeAliasRegistry typeAliasRegistry = new TypeAliasRegistry(); + + assertThatThrownBy(() -> typeAliasRegistry.registerAlias("foo", "")) + .isInstanceOf(TypeException.class) + .hasMessageContaining("Error registering type alias foo for"); + } + + @Test + void shouldNotBeAbleToResolveNotExistsAlias() { + TypeAliasRegistry typeAliasRegistry = new TypeAliasRegistry(); + + assertThatThrownBy(() -> typeAliasRegistry.resolveAlias("abc")) + .isInstanceOf(TypeException.class) + .hasMessageContaining("Could not resolve type alias 'abc'. Cause: java.lang.ClassNotFoundException: Cannot find class: abc"); + } }