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 790bfa9de52..2b544f41b61 100644 --- a/src/main/java/org/apache/ibatis/builder/xml/XMLMapperBuilder.java +++ b/src/main/java/org/apache/ibatis/builder/xml/XMLMapperBuilder.java @@ -117,7 +117,7 @@ private void configurationElement(XNode context) { sqlElement(context.evalNodes("/mapper/sql")); buildStatementFromContext(context.evalNodes("select|insert|update|delete")); } catch (Exception e) { - throw new BuilderException("Error parsing Mapper XML. Cause: " + e, e); + throw new BuilderException("Error parsing Mapper XML.The XML location is " + resource + " Cause: " + e, e); } } diff --git a/src/test/java/org/apache/ibatis/builder/ProblemMapper.xml b/src/test/java/org/apache/ibatis/builder/ProblemMapper.xml new file mode 100644 index 00000000000..a7f7145dacc --- /dev/null +++ b/src/test/java/org/apache/ibatis/builder/ProblemMapper.xml @@ -0,0 +1,28 @@ + + + + + + + diff --git a/src/test/java/org/apache/ibatis/builder/XmlMapperBuilderTest.java b/src/test/java/org/apache/ibatis/builder/XmlMapperBuilderTest.java index 5719eda30aa..b1e8b4b4aa4 100644 --- a/src/test/java/org/apache/ibatis/builder/XmlMapperBuilderTest.java +++ b/src/test/java/org/apache/ibatis/builder/XmlMapperBuilderTest.java @@ -24,8 +24,10 @@ import org.apache.ibatis.mapping.ResultSetType; import org.apache.ibatis.mapping.StatementType; import org.apache.ibatis.session.Configuration; +import org.junit.Rule; import org.apache.ibatis.type.TypeHandler; import org.junit.Test; +import org.junit.rules.ExpectedException; import static com.googlecode.catchexception.apis.BDDCatchException.*; import static org.assertj.core.api.BDDAssertions.then; @@ -34,6 +36,9 @@ public class XmlMapperBuilderTest { + @Rule + public ExpectedException expectedEx = ExpectedException.none(); + @Test public void shouldSuccessfullyLoadXMLMapperFile() throws Exception { Configuration configuration = new Configuration(); @@ -167,6 +172,17 @@ public void useCacheRefNamespaceIsUndefined() { .hasMessage("No cache for namespace 'eee' could be found."); } + @Test + public void shouldFailedLoadXMLMapperFile() throws Exception { + expectedEx.expect(BuilderException.class); + expectedEx.expectMessage("Error parsing Mapper XML.The XML location is org/apache/ibatis/builder/ProblemMapper.xml"); + Configuration configuration = new Configuration(); + String resource = "org/apache/ibatis/builder/ProblemMapper.xml"; + InputStream inputStream = Resources.getResourceAsStream(resource); + XMLMapperBuilder builder = new XMLMapperBuilder(inputStream, configuration, resource, configuration.getSqlFragments()); + builder.parse(); + } + // @Test // public void shouldNotLoadTheSameNamespaceFromTwoResourcesWithDifferentNames() throws Exception { // Configuration configuration = new Configuration();