From ca00d83911b31cf0b9df2350d1c14413d3d82295 Mon Sep 17 00:00:00 2001 From: iMouseWu Date: Fri, 29 Dec 2017 20:17:44 +0800 Subject: [PATCH 1/2] print error detail when xmlConfigBuilder parse error --- .../ibatis/builder/xml/XMLMapperBuilder.java | 2 +- .../apache/ibatis/builder/ProblemMapper.xml | 28 +++++++++++++++++++ .../ibatis/builder/XmlMapperBuilderTest.java | 16 +++++++++++ 3 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 src/test/java/org/apache/ibatis/builder/ProblemMapper.xml 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 575b288268e..de2e677d180 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." + ErrorContext.instance() + " 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 fb6e96867cb..b157abe13e2 100644 --- a/src/test/java/org/apache/ibatis/builder/XmlMapperBuilderTest.java +++ b/src/test/java/org/apache/ibatis/builder/XmlMapperBuilderTest.java @@ -20,10 +20,15 @@ import org.apache.ibatis.builder.xml.XMLMapperBuilder; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.Configuration; +import org.junit.Rule; import org.junit.Test; +import org.junit.rules.ExpectedException; public class XmlMapperBuilderTest { + @Rule + public ExpectedException expectedEx = ExpectedException.none(); + @Test public void shouldSuccessfullyLoadXMLMapperFile() throws Exception { Configuration configuration = new Configuration(); @@ -33,6 +38,17 @@ public void shouldSuccessfullyLoadXMLMapperFile() throws Exception { builder.parse(); } + @Test + public void shouldFailedLoadXMLMapperFile() throws Exception { + expectedEx.expect(BuilderException.class); + expectedEx.expectMessage("The error may exist in 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(); From e218f103936fc6afc53bf2869e2b46a19fb1d88b Mon Sep 17 00:00:00 2001 From: iMouseWu Date: Fri, 5 Jan 2018 18:55:19 +0800 Subject: [PATCH 2/2] modify get location from context to variables --- .../java/org/apache/ibatis/builder/xml/XMLMapperBuilder.java | 2 +- .../java/org/apache/ibatis/builder/XmlMapperBuilderTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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 52dfcbcd693..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." + ErrorContext.instance() + " 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/XmlMapperBuilderTest.java b/src/test/java/org/apache/ibatis/builder/XmlMapperBuilderTest.java index 7ea3a6234e0..b1e8b4b4aa4 100644 --- a/src/test/java/org/apache/ibatis/builder/XmlMapperBuilderTest.java +++ b/src/test/java/org/apache/ibatis/builder/XmlMapperBuilderTest.java @@ -175,7 +175,7 @@ public void useCacheRefNamespaceIsUndefined() { @Test public void shouldFailedLoadXMLMapperFile() throws Exception { expectedEx.expect(BuilderException.class); - expectedEx.expectMessage("The error may exist in org/apache/ibatis/builder/ProblemMapper.xml"); + 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);