diff --git a/src/main/java/org/apache/ibatis/scripting/xmltags/XMLScriptBuilder.java b/src/main/java/org/apache/ibatis/scripting/xmltags/XMLScriptBuilder.java index 50ffe66a86d..bff492afd8d 100644 --- a/src/main/java/org/apache/ibatis/scripting/xmltags/XMLScriptBuilder.java +++ b/src/main/java/org/apache/ibatis/scripting/xmltags/XMLScriptBuilder.java @@ -247,6 +247,8 @@ private void handleWhenOtherwiseNodes(XNode chooseSqlNode, List ifSqlNo handler.handleNode(child, ifSqlNodes); } else if (handler instanceof OtherwiseHandler) { handler.handleNode(child, defaultSqlNodes); + } else { + throw new BuilderException("Unknown element <" + nodeName + "> in SQL statement."); } } } diff --git a/src/test/java/org/apache/ibatis/scripting/xmltags/XMLScriptBuilderTest.java b/src/test/java/org/apache/ibatis/scripting/xmltags/XMLScriptBuilderTest.java index d85bb234bba..e53d5b17d4f 100644 --- a/src/test/java/org/apache/ibatis/scripting/xmltags/XMLScriptBuilderTest.java +++ b/src/test/java/org/apache/ibatis/scripting/xmltags/XMLScriptBuilderTest.java @@ -17,7 +17,9 @@ package org.apache.ibatis.scripting.xmltags; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import org.apache.ibatis.builder.BuilderException; import org.apache.ibatis.mapping.SqlSource; import org.apache.ibatis.parsing.XPathParser; import org.apache.ibatis.session.Configuration; @@ -42,4 +44,19 @@ void shouldWhereInsertWhitespace() throws Exception { .containsPattern("(?m)^\\s*select \\* from user\\s+WHERE\\s+id = 1\\s+and id > 0\\s*$"); } + @Test + void shouldThrowIfUnknownElementFound() { + String xml = """ + + """; + XMLScriptBuilder parser = new XMLScriptBuilder(new Configuration(), new XPathParser(xml).evalNode("/script")); + assertThatThrownBy(parser::parseScriptNode).isInstanceOf(BuilderException.class) + .hasMessage("Unknown element in SQL statement."); + } }