Fix missing location in error reports 18/95118/1
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 10 Feb 2021 13:51:13 +0000 (14:51 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Wed, 10 Feb 2021 15:16:57 +0000 (16:16 +0100)
There are two places where we fail to propagate location:
- one is a pure omission
- one is a case of bad format
Fix both sites, improving our error reporting.

Change-Id: I65b52c69a6d6d7bb0fd8a9bc3956a2dab51d81c5
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit 33c07eff30a65dd0889cc08dc88ddad72039321d)

yang/yang-data-codec-xml/src/main/java/org/opendaylight/yangtools/yang/data/codec/xml/XmlParserStream.java
yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/StrictParsingModeTest.java
yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/XmlToNormalizedNodesTest.java

index 038299d6f9e5d068c6b7a424d610667450381552..5c3d7e3735b2fb0b64c919fb094d6855c002f20f 100644 (file)
@@ -487,7 +487,7 @@ public final class XmlParserStream implements Closeable, Flushable {
                         if (!added && !elementList) {
                             throw new XMLStreamException(String.format(
                                 "Duplicate element \"%s\" in namespace \"%s\" with parent \"%s\" in XML input",
-                                xmlElementName, elementNS, parent.getSchema()), in.getLocation());
+                                xmlElementName, elementNS, parentSchema), in.getLocation());
                         }
 
                         // We have a match, proceed with it
@@ -504,7 +504,8 @@ public final class XmlParserStream implements Closeable, Flushable {
                         } else if (parentSchema instanceof ListSchemaNode) {
                             optMount = MountPointSchemaNode.streamAll((ListSchemaNode) parentSchema).findFirst();
                         } else {
-                            throw new XMLStreamException("Unhandled mount-aware schema " + parentSchema);
+                            throw new XMLStreamException("Unhandled mount-aware schema " + parentSchema,
+                                in.getLocation());
                         }
 
                         if (optMount.isPresent()) {
@@ -530,7 +531,7 @@ public final class XmlParserStream implements Closeable, Flushable {
                     if (strictParsing) {
                         throw new XMLStreamException(String.format(
                             "Schema for node with name %s and namespace %s does not exist at %s", xmlElementName,
-                            elementNS, parentSchema.getPath(), in.getLocation()));
+                            elementNS, parentSchema.getPath()), in.getLocation());
                     }
 
                     LOG.debug("Skipping unknown node ns=\"{}\" localName=\"{}\" at path {}", elementNS, xmlElementName,
index c50593102e8af040abbd049f1b80d7b6daa1a3a9..17f23fac1195928acb5b4d4f39efc2e2e7225212 100644 (file)
@@ -5,12 +5,12 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.yangtools.yang.data.codec.xml;
 
-import static org.junit.Assert.assertEquals;
+import static org.hamcrest.CoreMatchers.containsString;
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
+import static org.junit.Assert.assertThrows;
 
 import java.io.InputStream;
 import javax.xml.stream.XMLStreamException;
@@ -72,12 +72,9 @@ public class StrictParsingModeTest {
         final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
 
         final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, topLevelContainer, true);
-        try {
-            xmlParser.parse(reader);
-            fail("XMLStreamException should have been thrown because of an unknown child node.");
-        } catch (XMLStreamException ex) {
-            assertEquals("Schema for node with name unknown-container-a and namespace foo does not exist at "
-                    + "AbsoluteSchemaPath{path=[(foo)top-level-container]}", ex.getMessage());
-        }
+
+        final XMLStreamException ex = assertThrows(XMLStreamException.class, () -> xmlParser.parse(reader));
+        assertThat(ex.getMessage(), containsString("Schema for node with name unknown-container-a and namespace foo "
+            + "does not exist at AbsoluteSchemaPath{path=[(foo)top-level-container]}"));
     }
 }
index 74eb0f4ccd2db58a5a6f0668155955d8c2b2e413..b3824db9800757e1acba913d50430e2b409f9676 100644 (file)
@@ -11,7 +11,7 @@ import static org.hamcrest.CoreMatchers.containsString;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
+import static org.junit.Assert.assertThrows;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
@@ -153,13 +153,9 @@ public class XmlToNormalizedNodesTest {
         final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
 
         final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, parentContainerSchema);
-        try {
-            xmlParser.parse(reader);
-            fail("XMLStreamException should have been thrown because of duplicate leaf.");
-        } catch (XMLStreamException ex) {
-            assertThat(ex.getMessage(), containsString("Duplicate element \"decimal64-leaf\" in namespace"
-                    + " \"foo-namespace\" with parent \"container leaf-container\" in XML input"));
-        }
+        final XMLStreamException ex = assertThrows(XMLStreamException.class, () -> xmlParser.parse(reader));
+        assertThat(ex.getMessage(), containsString("Duplicate element \"decimal64-leaf\" in namespace"
+            + " \"foo-namespace\" with parent \"container leaf-container\" in XML input"));
     }
 
     @Test
@@ -173,13 +169,9 @@ public class XmlToNormalizedNodesTest {
         final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
 
         final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, parentContainerSchema);
-        try {
-            xmlParser.parse(reader);
-            fail("XMLStreamException should have been thrown because of duplicate anyxml");
-        } catch (XMLStreamException ex) {
-            assertThat(ex.getMessage(), containsString("Duplicate element \"my-anyxml\" in namespace"
-                    + " \"foo-namespace\" with parent \"container anyxml-container\" in XML input"));
-        }
+        final XMLStreamException ex = assertThrows(XMLStreamException.class, () -> xmlParser.parse(reader));
+        assertThat(ex.getMessage(), containsString("Duplicate element \"my-anyxml\" in namespace"
+            + " \"foo-namespace\" with parent \"container anyxml-container\" in XML input"));
     }
 
     @Test
@@ -193,13 +185,9 @@ public class XmlToNormalizedNodesTest {
         final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
 
         final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, parentContainerSchema);
-        try {
-            xmlParser.parse(reader);
-            fail("XMLStreamException should have been thrown because of duplicate container");
-        } catch (XMLStreamException ex) {
-            assertThat(ex.getMessage(), containsString("Duplicate element \"leaf-container\" in namespace"
-                    + " \"foo-namespace\" with parent \"container parent-container\" in XML input"));
-        }
+        final XMLStreamException ex = assertThrows(XMLStreamException.class, () -> xmlParser.parse(reader));
+        assertThat(ex.getMessage(), containsString("Duplicate element \"leaf-container\" in namespace"
+            + " \"foo-namespace\" with parent \"container parent-container\" in XML input"));
     }
 
     @Test
@@ -213,12 +201,8 @@ public class XmlToNormalizedNodesTest {
         final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
 
         final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, outerContainerSchema);
-        try {
-            xmlParser.parse(reader);
-            fail("XMLStreamException should have been thrown because of unterminated leaf element.");
-        } catch (XMLStreamException ex) {
-            assertThat(ex.getMessage(), containsString(" START_ELEMENT "));
-        }
+        final XMLStreamException ex = assertThrows(XMLStreamException.class, () -> xmlParser.parse(reader));
+        assertThat(ex.getMessage(), containsString(" START_ELEMENT "));
     }
 
     @Test
@@ -232,12 +216,8 @@ public class XmlToNormalizedNodesTest {
         final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
 
         final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, outerContainerSchema);
-        try {
-            xmlParser.parse(reader);
-            fail("XMLStreamException should have been thrown because of unterminated leaf element.");
-        } catch (XMLStreamException ex) {
-            assertThat(ex.getMessage(), containsString("</my-leaf-1>"));
-        }
+        final XMLStreamException ex = assertThrows(XMLStreamException.class, () -> xmlParser.parse(reader));
+        assertThat(ex.getMessage(), containsString("</my-leaf-1>"));
     }
 
     @Test
@@ -251,12 +231,8 @@ public class XmlToNormalizedNodesTest {
         final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
 
         final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, outerContainerSchema);
-        try {
-            xmlParser.parse(reader);
-            fail("XMLStreamException should have been thrown because of unterminated container element.");
-        } catch (XMLStreamException ex) {
-            assertThat(ex.getMessage(), containsString("</my-container-1>"));
-        }
+        final XMLStreamException ex = assertThrows(XMLStreamException.class, () -> xmlParser.parse(reader));
+        assertThat(ex.getMessage(), containsString("</my-container-1>"));
     }
 
     @Test
@@ -270,14 +246,11 @@ public class XmlToNormalizedNodesTest {
         final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
 
         final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, outerContainerSchema);
-        try {
-            xmlParser.parse(reader);
-            fail("XMLStreamException should have been thrown because of an unknown child node.");
-        } catch (XMLStreamException ex) {
-            assertEquals("Schema for node with name my-container-1 and namespace baz-namespace does not exist at "
-                    + "AbsoluteSchemaPath{path=[(baz-namespace)outer-container, (baz-namespace)my-container-1]}",
-                    ex.getMessage());
-        }
+        final XMLStreamException ex = assertThrows(XMLStreamException.class, () -> xmlParser.parse(reader));
+
+        assertThat(ex.getMessage(), containsString("Schema for node with name my-container-1 and namespace "
+            + "baz-namespace does not exist at "
+            + "AbsoluteSchemaPath{path=[(baz-namespace)outer-container, (baz-namespace)my-container-1]}"));
     }
 
     private static NormalizedNode<?, ?> buildOuterContainerNode() {