From: Robert Varga Date: Wed, 10 Feb 2021 13:51:13 +0000 (+0100) Subject: Fix missing location in error reports X-Git-Tag: v6.0.5~8 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=yangtools.git;a=commitdiff_plain;h=9f8750841e646bf5fdf93890f393ddfa1bf5d9a7 Fix missing location in error reports 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 (cherry picked from commit 33c07eff30a65dd0889cc08dc88ddad72039321d) --- diff --git a/yang/yang-data-codec-xml/src/main/java/org/opendaylight/yangtools/yang/data/codec/xml/XmlParserStream.java b/yang/yang-data-codec-xml/src/main/java/org/opendaylight/yangtools/yang/data/codec/xml/XmlParserStream.java index 038299d6f9..5c3d7e3735 100644 --- a/yang/yang-data-codec-xml/src/main/java/org/opendaylight/yangtools/yang/data/codec/xml/XmlParserStream.java +++ b/yang/yang-data-codec-xml/src/main/java/org/opendaylight/yangtools/yang/data/codec/xml/XmlParserStream.java @@ -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, diff --git a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/StrictParsingModeTest.java b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/StrictParsingModeTest.java index c50593102e..17f23fac11 100644 --- a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/StrictParsingModeTest.java +++ b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/StrictParsingModeTest.java @@ -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]}")); } } diff --git a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/XmlToNormalizedNodesTest.java b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/XmlToNormalizedNodesTest.java index 74eb0f4ccd..b3824db980 100644 --- a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/XmlToNormalizedNodesTest.java +++ b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/XmlToNormalizedNodesTest.java @@ -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("")); - } + final XMLStreamException ex = assertThrows(XMLStreamException.class, () -> xmlParser.parse(reader)); + assertThat(ex.getMessage(), containsString("")); } @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("")); - } + final XMLStreamException ex = assertThrows(XMLStreamException.class, () -> xmlParser.parse(reader)); + assertThat(ex.getMessage(), containsString("")); } @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() {