From: Igor Foltin Date: Thu, 15 Jun 2017 14:51:24 +0000 (+0200) Subject: Bug 8675: Fix a design flaw of the new XML parser X-Git-Tag: release/nitrogen~35 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=f7132512adc35b5bc2628bf1cfd5f740e06e34cb;p=yangtools.git Bug 8675: Fix a design flaw of the new XML parser The actual flaw is that the parser wraps the parentNode SchemaNode inside a CompositeNodeDataWithSchema which emits only its child nodes into the provided NormalizedNodeStreamWriter. The parentNode itself is not emitted which is a problem. Therefore we need to check the parentNode type and put it into a corresponding ...NodeDataWithSchema. Bug description on bugzilla has been updated with a more thorough explanation. Adjust existing unit tests accordingly. Add javadocs to ...NodeDataWithSchema classes. Change-Id: I900717f652cd93e36c229bc91d3854b5ab99f09a Signed-off-by: Igor Foltin --- diff --git a/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/YangModeledAnyXmlSupportTest.java b/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/YangModeledAnyXmlSupportTest.java index bb459fc960..5eb6782a54 100644 --- a/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/YangModeledAnyXmlSupportTest.java +++ b/yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/YangModeledAnyXmlSupportTest.java @@ -29,6 +29,7 @@ import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; import org.junit.BeforeClass; import org.junit.Test; +import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; @@ -38,6 +39,8 @@ import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWrit import org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult; +import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; +import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException; @@ -53,6 +56,10 @@ public class YangModeledAnyXmlSupportTest { public static void init() throws IOException, URISyntaxException, ReactorException, SAXException, XMLStreamException, ParserConfigurationException { schemaContext = YangParserTestUtils.parseYangSources("/yang-modeled-anyxml/yang"); + final Module bazModule = schemaContext.findModuleByName("baz", null); + final ContainerSchemaNode bazCont = (ContainerSchemaNode) bazModule.getDataChildByName( + QName.create(bazModule.getQNameModule(), "baz")); + assertNotNull(bazCont); final InputStream resourceAsStream = YangModeledAnyXmlSupportTest.class.getResourceAsStream( "/yang-modeled-anyxml/xml/baz.xml"); @@ -64,7 +71,7 @@ public class YangModeledAnyXmlSupportTest { final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result); - final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, schemaContext); + final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, bazCont); xmlParser.parse(reader); assertNotNull(result.getResult()); diff --git a/yang/yang-data-codec-gson/src/test/resources/yang-modeled-anyxml/xml/baz.xml b/yang/yang-data-codec-gson/src/test/resources/yang-modeled-anyxml/xml/baz.xml index 16029d103b..82f99d5777 100644 --- a/yang/yang-data-codec-gson/src/test/resources/yang-modeled-anyxml/xml/baz.xml +++ b/yang/yang-data-codec-gson/src/test/resources/yang-modeled-anyxml/xml/baz.xml @@ -1,21 +1,19 @@ - - - - value1 - - - - value2 - - value3 - + + + value1 + + + + value2 + + value3 + - - - any-xml-leaf-2-value - - any-xml-leaf-3-value - - - \ No newline at end of file + + + any-xml-leaf-2-value + + any-xml-leaf-3-value + + \ No newline at end of file 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 57bcafa7b0..1d2b1daa84 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 @@ -32,6 +32,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStre import org.opendaylight.yangtools.yang.data.util.AbstractNodeDataWithSchema; import org.opendaylight.yangtools.yang.data.util.AnyXmlNodeDataWithSchema; import org.opendaylight.yangtools.yang.data.util.CompositeNodeDataWithSchema; +import org.opendaylight.yangtools.yang.data.util.ContainerNodeDataWithSchema; import org.opendaylight.yangtools.yang.data.util.LeafListEntryNodeDataWithSchema; import org.opendaylight.yangtools.yang.data.util.LeafListNodeDataWithSchema; import org.opendaylight.yangtools.yang.data.util.LeafNodeDataWithSchema; @@ -40,8 +41,13 @@ import org.opendaylight.yangtools.yang.data.util.ListNodeDataWithSchema; import org.opendaylight.yangtools.yang.data.util.ParserStreamUtils; import org.opendaylight.yangtools.yang.data.util.RpcAsContainer; import org.opendaylight.yangtools.yang.data.util.SimpleNodeDataWithSchema; +import org.opendaylight.yangtools.yang.data.util.YangModeledAnyXmlNodeDataWithSchema; import org.opendaylight.yangtools.yang.model.api.AnyXmlSchemaNode; +import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; +import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode; +import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; +import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; import org.opendaylight.yangtools.yang.model.api.RpcDefinition; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.SchemaNode; @@ -129,10 +135,26 @@ public final class XmlParserStream implements Closeable, Flushable { public XmlParserStream parse(final XMLStreamReader reader) throws XMLStreamException, URISyntaxException, IOException, ParserConfigurationException, SAXException { if (reader.hasNext()) { - final CompositeNodeDataWithSchema compositeNodeDataWithSchema = new CompositeNodeDataWithSchema(parentNode); reader.nextTag(); - read(reader, compositeNodeDataWithSchema, reader.getLocalName()); - compositeNodeDataWithSchema.write(writer); + final AbstractNodeDataWithSchema nodeDataWithSchema; + if (parentNode instanceof ContainerSchemaNode) { + nodeDataWithSchema = new ContainerNodeDataWithSchema(parentNode); + } else if (parentNode instanceof ListSchemaNode) { + nodeDataWithSchema = new ListNodeDataWithSchema(parentNode); + } else if (parentNode instanceof YangModeledAnyXmlSchemaNode) { + nodeDataWithSchema = new YangModeledAnyXmlNodeDataWithSchema((YangModeledAnyXmlSchemaNode) parentNode); + } else if (parentNode instanceof AnyXmlSchemaNode) { + nodeDataWithSchema = new AnyXmlNodeDataWithSchema(parentNode); + } else if (parentNode instanceof LeafSchemaNode) { + nodeDataWithSchema = new LeafNodeDataWithSchema(parentNode); + } else if (parentNode instanceof LeafListSchemaNode) { + nodeDataWithSchema = new LeafListNodeDataWithSchema(parentNode); + } else { + throw new IllegalStateException("Unsupported schema node type " + parentNode.getClass() + "."); + } + + read(reader, nodeDataWithSchema, reader.getLocalName()); + nodeDataWithSchema.write(writer); } return this; @@ -171,7 +193,13 @@ public final class XmlParserStream implements Closeable, Flushable { if (parent instanceof LeafNodeDataWithSchema || parent instanceof LeafListEntryNodeDataWithSchema) { setValue(parent, in.getElementText().trim(), in.getNamespaceContext()); - in.nextTag(); + if (isNextEndDocument(in)) { + return; + } + + if (!isAtElement(in)) { + in.nextTag(); + } return; } @@ -179,6 +207,9 @@ public final class XmlParserStream implements Closeable, Flushable { String xmlElementName = in.getLocalName(); while (xmlElementName.equals(parent.getSchema().getQName().getLocalName())) { read(in, newEntryNode(parent), rootElement); + if (in.getEventType() == XMLStreamConstants.END_DOCUMENT) { + break; + } xmlElementName = in.getLocalName(); } @@ -187,7 +218,14 @@ public final class XmlParserStream implements Closeable, Flushable { if (parent instanceof AnyXmlNodeDataWithSchema) { setValue(parent, readAnyXmlValue(in), in.getNamespaceContext()); - in.nextTag(); + if (isNextEndDocument(in)) { + return; + } + + if (!isAtElement(in)) { + in.nextTag(); + } + return; } @@ -196,16 +234,23 @@ public final class XmlParserStream implements Closeable, Flushable { final Set namesakes = new HashSet<>(); while (in.hasNext()) { final String xmlElementName = in.getLocalName(); - if (rootElement.equals(xmlElementName)) { - break; - } DataSchemaNode parentSchema = parent.getSchema(); final String parentSchemaName = parentSchema.getQName().getLocalName(); if (parentSchemaName.equals(xmlElementName) && in.getEventType() == XMLStreamConstants.END_ELEMENT) { - in.nextTag(); + if (isNextEndDocument(in)) { + break; + } + + if (!isAtElement(in)) { + in.nextTag(); + } + break; + } + + if (in.isEndElement() && rootElement.equals(xmlElementName)) { break; } @@ -233,13 +278,28 @@ public final class XmlParserStream implements Closeable, Flushable { } break; case XMLStreamConstants.END_ELEMENT: - in.nextTag(); + if (isNextEndDocument(in)) { + break; + } + + if (!isAtElement(in)) { + in.nextTag(); + } break; default: break; } } + private static boolean isNextEndDocument(final XMLStreamReader in) throws XMLStreamException { + return in.next() == XMLStreamConstants.END_DOCUMENT; + } + + private static boolean isAtElement(final XMLStreamReader in) { + return in.getEventType() == XMLStreamConstants.START_ELEMENT + || in.getEventType() == XMLStreamConstants.END_ELEMENT; + } + private void setValue(final AbstractNodeDataWithSchema parent, final String value, final NamespaceContext nsContext) throws ParserConfigurationException, SAXException, IOException { Preconditions.checkArgument(parent instanceof SimpleNodeDataWithSchema, "Node %s is not a simple type", diff --git a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug5396Test.java b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug5396Test.java index bd94f56d63..938962e75e 100644 --- a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug5396Test.java +++ b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug5396Test.java @@ -31,6 +31,8 @@ import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult; +import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; +import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils; @@ -65,6 +67,10 @@ public class Bug5396Test { private void testInputXML(final String xmlPath, final String expectedValue) throws Exception { final InputStream resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream(xmlPath); + final Module fooModule = schemaContext.getModules().iterator().next(); + final ContainerSchemaNode rootCont = (ContainerSchemaNode) fooModule.getDataChildByName( + QName.create(fooModule.getQNameModule(), "root")); + assertNotNull(rootCont); final XMLInputFactory factory = XMLInputFactory.newInstance(); final XMLStreamReader reader = factory.createXMLStreamReader(resourceAsStream); @@ -73,7 +79,7 @@ public class Bug5396Test { final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result); - final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, schemaContext); + final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, rootCont); xmlParser.parse(reader); assertNotNull(result.getResult()); diff --git a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug5446Test.java b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug5446Test.java index 70f3b4dc49..c6cfe00caf 100644 --- a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug5446Test.java +++ b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug5446Test.java @@ -97,7 +97,7 @@ public class Bug5446Test extends XMLTestCase { XMLUnit.setIgnoreAttributeOrder(true); XMLUnit.setNormalize(true); - String expectedXMLString = toString(doc.getDocumentElement().getElementsByTagName("root").item(0)); + String expectedXMLString = toString(doc.getDocumentElement()); String serializationResultXMLString = toString(serializationResult.getNode()); assertXMLEqual(expectedXMLString, serializationResultXMLString); diff --git a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug8083Test.java b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug8083Test.java index 48c14b7296..7d91be0758 100644 --- a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug8083Test.java +++ b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug8083Test.java @@ -15,10 +15,13 @@ import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamReader; import org.junit.Ignore; import org.junit.Test; +import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult; +import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; +import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils; @@ -28,6 +31,11 @@ public class Bug8083Test { @Test public void testInstanceIdentifierPathWithEmptyListKey() throws Exception { final SchemaContext schemaContext = YangParserTestUtils.parseYangSource("/bug8083/yang/baz.yang"); + final Module bazModule = schemaContext.getModules().iterator().next(); + final ContainerSchemaNode topCont = (ContainerSchemaNode) bazModule.getDataChildByName( + QName.create(bazModule.getQNameModule(), "top-cont")); + assertNotNull(topCont); + final InputStream resourceAsStream = Bug8083Test.class.getResourceAsStream("/bug8083/xml/baz.xml"); final XMLInputFactory factory = XMLInputFactory.newInstance(); @@ -36,7 +44,7 @@ public class Bug8083Test { // deserialization final NormalizedNodeResult result = new NormalizedNodeResult(); final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result); - final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext); + final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, topCont); xmlParser.parse(reader); final NormalizedNode transformedInput = result.getResult(); assertNotNull(transformedInput); @@ -45,6 +53,11 @@ public class Bug8083Test { @Test public void testInstanceIdentifierPathWithIdentityrefListKey() throws Exception { final SchemaContext schemaContext = YangParserTestUtils.parseYangSource("/bug8083/yang/zab.yang"); + final Module zabModule = schemaContext.getModules().iterator().next(); + final ContainerSchemaNode topCont = (ContainerSchemaNode) zabModule.getDataChildByName( + QName.create(zabModule.getQNameModule(), "top-cont")); + assertNotNull(topCont); + final InputStream resourceAsStream = Bug8083Test.class.getResourceAsStream("/bug8083/xml/zab.xml"); final XMLInputFactory factory = XMLInputFactory.newInstance(); @@ -53,7 +66,7 @@ public class Bug8083Test { // deserialization final NormalizedNodeResult result = new NormalizedNodeResult(); final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result); - final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext); + final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, topCont); xmlParser.parse(reader); final NormalizedNode transformedInput = result.getResult(); assertNotNull(transformedInput); @@ -62,6 +75,11 @@ public class Bug8083Test { @Test public void testInstanceIdentifierPathWithInstanceIdentifierListKey() throws Exception { final SchemaContext schemaContext = YangParserTestUtils.parseYangSource("/bug8083/yang/foobar.yang"); + final Module foobarModule = schemaContext.getModules().iterator().next(); + final ContainerSchemaNode topCont = (ContainerSchemaNode) foobarModule.getDataChildByName( + QName.create(foobarModule.getQNameModule(), "top-cont")); + assertNotNull(topCont); + final InputStream resourceAsStream = Bug8083Test.class.getResourceAsStream("/bug8083/xml/foobar.xml"); final XMLInputFactory factory = XMLInputFactory.newInstance(); @@ -70,7 +88,7 @@ public class Bug8083Test { // deserialization final NormalizedNodeResult result = new NormalizedNodeResult(); final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result); - final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext); + final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, topCont); xmlParser.parse(reader); final NormalizedNode transformedInput = result.getResult(); assertNotNull(transformedInput); diff --git a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug8675Test.java b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug8675Test.java new file mode 100644 index 0000000000..86fa2f2c22 --- /dev/null +++ b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug8675Test.java @@ -0,0 +1,168 @@ +/* + * Copyright (c) 2017 Pantheon Technologies s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * 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.assertNotNull; + +import java.io.InputStream; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamReader; +import org.junit.BeforeClass; +import org.junit.Test; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; +import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter; +import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult; +import org.opendaylight.yangtools.yang.model.api.AnyXmlSchemaNode; +import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; +import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode; +import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; +import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; +import org.opendaylight.yangtools.yang.model.api.Module; +import org.opendaylight.yangtools.yang.model.api.SchemaContext; +import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils; + +public class Bug8675Test { + + private static SchemaContext schemaContext; + private static Module fooModule; + + @BeforeClass + public static void setup() throws Exception { + schemaContext = YangParserTestUtils.parseYangSource("/bug8675/foo.yang"); + fooModule = schemaContext.getModules().iterator().next(); + } + + @Test + public void testParsingEmptyElements() throws Exception { + final ContainerSchemaNode topLevelContainer = (ContainerSchemaNode) fooModule.getDataChildByName( + QName.create(fooModule.getQNameModule(), "top-level-container")); + assertNotNull(topLevelContainer); + + final InputStream resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream( + "/bug8675/foo.xml"); + + final XMLInputFactory factory = XMLInputFactory.newInstance(); + final XMLStreamReader reader = factory.createXMLStreamReader(resourceAsStream); + + final NormalizedNodeResult result = new NormalizedNodeResult(); + final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result); + + final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, topLevelContainer); + xmlParser.parse(reader); + + final NormalizedNode transformedInput = result.getResult(); + assertNotNull(transformedInput); + } + + @Test + public void testParsingEmptyRootElement() throws Exception { + final ContainerSchemaNode topLevelContainer = (ContainerSchemaNode) fooModule.getDataChildByName( + QName.create(fooModule.getQNameModule(), "top-level-container")); + assertNotNull(topLevelContainer); + + final InputStream resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream( + "/bug8675/foo-2.xml"); + + final XMLInputFactory factory = XMLInputFactory.newInstance(); + final XMLStreamReader reader = factory.createXMLStreamReader(resourceAsStream); + + final NormalizedNodeResult result = new NormalizedNodeResult(); + final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result); + + final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, topLevelContainer); + xmlParser.parse(reader); + + final NormalizedNode transformedInput = result.getResult(); + assertNotNull(transformedInput); + } + + @Test + public void testListAsRootElement() throws Exception { + final ListSchemaNode topLevelList = (ListSchemaNode) fooModule.getDataChildByName( + QName.create(fooModule.getQNameModule(), "top-level-list")); + assertNotNull(topLevelList); + + final InputStream resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream("/bug8675/foo-3.xml"); + + final XMLInputFactory factory = XMLInputFactory.newInstance(); + final XMLStreamReader reader = factory.createXMLStreamReader(resourceAsStream); + + final NormalizedNodeResult result = new NormalizedNodeResult(); + final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result); + + final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, topLevelList); + xmlParser.parse(reader); + + final NormalizedNode transformedInput = result.getResult(); + assertNotNull(transformedInput); + } + + @Test + public void testAnyXmlAsRootElement() throws Exception { + final AnyXmlSchemaNode topLevelAnyXml = (AnyXmlSchemaNode) fooModule.getDataChildByName( + QName.create(fooModule.getQNameModule(), "top-level-anyxml")); + assertNotNull(topLevelAnyXml); + + final InputStream resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream("/bug8675/foo-4.xml"); + + final XMLInputFactory factory = XMLInputFactory.newInstance(); + final XMLStreamReader reader = factory.createXMLStreamReader(resourceAsStream); + + final NormalizedNodeResult result = new NormalizedNodeResult(); + final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result); + + final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, topLevelAnyXml); + xmlParser.parse(reader); + + final NormalizedNode transformedInput = result.getResult(); + assertNotNull(transformedInput); + } + + @Test + public void testLeafAsRootElement() throws Exception { + final LeafSchemaNode topLevelLeaf = (LeafSchemaNode) fooModule.getDataChildByName( + QName.create(fooModule.getQNameModule(), "top-level-leaf")); + + final InputStream resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream("/bug8675/foo-5.xml"); + + final XMLInputFactory factory = XMLInputFactory.newInstance(); + final XMLStreamReader reader = factory.createXMLStreamReader(resourceAsStream); + + final NormalizedNodeResult result = new NormalizedNodeResult(); + final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result); + + final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, topLevelLeaf); + xmlParser.parse(reader); + + final NormalizedNode transformedInput = result.getResult(); + assertNotNull(transformedInput); + } + + @Test + public void testLeafListAsRootElement() throws Exception { + final LeafListSchemaNode topLevelLeafList = (LeafListSchemaNode) fooModule.getDataChildByName( + QName.create(fooModule.getQNameModule(), "top-level-leaf-list")); + + final InputStream resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream("/bug8675/foo-6.xml"); + + final XMLInputFactory factory = XMLInputFactory.newInstance(); + final XMLStreamReader reader = factory.createXMLStreamReader(resourceAsStream); + + final NormalizedNodeResult result = new NormalizedNodeResult(); + final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result); + + final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, topLevelLeafList); + xmlParser.parse(reader); + + final NormalizedNode transformedInput = result.getResult(); + assertNotNull(transformedInput); + } +} diff --git a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/NormalizedNodeXmlTranslationTest.java b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/NormalizedNodeXmlTranslationTest.java index 75e3e84a27..26268bdd25 100644 --- a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/NormalizedNodeXmlTranslationTest.java +++ b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/NormalizedNodeXmlTranslationTest.java @@ -284,7 +284,7 @@ public class NormalizedNodeXmlTranslationTest { final NormalizedNodeResult result = new NormalizedNodeResult(); final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result); - final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schema, schema); + final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schema, containerNode); xmlParser.parse(reader); final NormalizedNode built = result.getResult(); @@ -317,7 +317,7 @@ public class NormalizedNodeXmlTranslationTest { XMLUnit.setIgnoreAttributeOrder(true); XMLUnit.setNormalize(true); - final String expectedXml = toString(doc.getDocumentElement().getElementsByTagName("container").item(0)); + final String expectedXml = toString(doc.getDocumentElement()); final String serializedXml = toString(domResult.getNode()); final Diff diff = new Diff(expectedXml, serializedXml); diff --git a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/NormalizedNodesToXmlTest.java b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/NormalizedNodesToXmlTest.java index 59bb6fd1a0..cc5b9e91d5 100644 --- a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/NormalizedNodesToXmlTest.java +++ b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/NormalizedNodesToXmlTest.java @@ -142,7 +142,7 @@ public class NormalizedNodesToXmlTest { XMLUnit.setIgnoreWhitespace(true); XMLUnit.setNormalize(true); - final String expectedXml = toString(doc.getDocumentElement().getElementsByTagName("outer-container").item(0)); + final String expectedXml = toString(doc.getDocumentElement()); final String serializedXml = toString(domResult.getNode()); final Diff diff = new Diff(expectedXml, serializedXml); diff --git a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/SchemalessXMLStreamNormalizedNodeStreamWriterTest.java b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/SchemalessXMLStreamNormalizedNodeStreamWriterTest.java index 16e2b4689d..0f701fb856 100644 --- a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/SchemalessXMLStreamNormalizedNodeStreamWriterTest.java +++ b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/SchemalessXMLStreamNormalizedNodeStreamWriterTest.java @@ -163,7 +163,7 @@ public class SchemalessXMLStreamNormalizedNodeStreamWriterTest { XMLUnit.setIgnoreWhitespace(true); XMLUnit.setNormalize(true); - final String expectedXml = toString(doc.getDocumentElement().getElementsByTagName("outer-container").item(0)); + final String expectedXml = toString(doc.getDocumentElement()); final String serializedXml = toString(domResult.getNode()); final Diff diff = new Diff(expectedXml, serializedXml); 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 a35922771c..02dd9b44c7 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 @@ -13,19 +13,19 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; +import com.google.common.collect.ImmutableList; import com.google.common.collect.Sets; import java.io.IOException; import java.io.InputStream; import java.net.URI; import java.net.URISyntaxException; -import java.text.ParseException; import java.util.HashMap; import java.util.Map; import javax.xml.parsers.ParserConfigurationException; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; -import org.junit.Before; +import org.junit.BeforeClass; import org.junit.Test; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; @@ -45,43 +45,54 @@ import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStre import org.opendaylight.yangtools.yang.data.impl.schema.Builders; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult; +import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.SchemaContext; +import org.opendaylight.yangtools.yang.model.util.SchemaContextUtil; import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException; import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils; import org.xml.sax.SAXException; public class XmlToNormalizedNodesTest { - private QNameModule bazModule; - - private QName outerContainer; - - private QName myContainer1; - private QName myKeyedList; - private QName myKeyLeaf; - private QName myLeafInList1; - private QName myLeafInList2; - private QName myLeaf1; - private QName myLeafList; - - private QName myContainer2; - private QName innerContainer; - private QName myLeaf2; - private QName myLeaf3; - private QName myChoice; - private QName myLeafInCase2; - - private QName myContainer3; - private QName myDoublyKeyedList; - private QName myFirstKeyLeaf; - private QName mySecondKeyLeaf; - private QName myLeafInList3; - - @Before - public void setup() throws URISyntaxException, ParseException { + private static SchemaContext schemaContext; + private static ContainerSchemaNode outerContainerSchema; + private static ContainerSchemaNode parentContainerSchema; + + private static QNameModule fooModule; + private static QName parentContainer; + + private static QNameModule bazModule; + private static QName outerContainer; + + private static QName myContainer1; + private static QName myKeyedList; + private static QName myKeyLeaf; + private static QName myLeafInList1; + private static QName myLeafInList2; + private static QName myLeaf1; + private static QName myLeafList; + + private static QName myContainer2; + private static QName innerContainer; + private static QName myLeaf2; + private static QName myLeaf3; + private static QName myChoice; + private static QName myLeafInCase2; + + private static QName myContainer3; + private static QName myDoublyKeyedList; + private static QName myFirstKeyLeaf; + private static QName mySecondKeyLeaf; + private static QName myLeafInList3; + + @BeforeClass + public static void setup() throws Exception { + fooModule = QNameModule.create(new URI("foo-namespace"), SimpleDateFormatUtil.getRevisionFormat().parse( + "1970-01-01")); + parentContainer = QName.create(fooModule, "parent-container"); + bazModule = QNameModule.create(new URI("baz-namespace"), SimpleDateFormatUtil.getRevisionFormat().parse( "1970-01-01")); - outerContainer = QName.create(bazModule, "outer-container"); myContainer1 = QName.create(bazModule, "my-container-1"); @@ -104,13 +115,17 @@ public class XmlToNormalizedNodesTest { myFirstKeyLeaf = QName.create(bazModule, "my-first-key-leaf"); mySecondKeyLeaf = QName.create(bazModule, "my-second-key-leaf"); myLeafInList3 = QName.create(bazModule, "my-leaf-in-list-3"); + + schemaContext = YangParserTestUtils.parseYangSources("/"); + parentContainerSchema = (ContainerSchemaNode) SchemaContextUtil.findNodeInSchemaContext(schemaContext, + ImmutableList.of(parentContainer)); + outerContainerSchema = (ContainerSchemaNode) SchemaContextUtil.findNodeInSchemaContext(schemaContext, + ImmutableList.of(outerContainer)); } @Test public void testComplexXmlParsing() throws IOException, URISyntaxException, ReactorException, XMLStreamException, ParserConfigurationException, SAXException { - SchemaContext schemaContext = YangParserTestUtils.parseYangSource("/baz.yang"); - final InputStream resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream("/baz.xml"); final XMLInputFactory factory = XMLInputFactory.newInstance(); @@ -119,7 +134,7 @@ public class XmlToNormalizedNodesTest { final NormalizedNodeResult result = new NormalizedNodeResult(); final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result); - final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, schemaContext); + final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, outerContainerSchema); xmlParser.parse(reader); xmlParser.flush(); @@ -137,8 +152,6 @@ public class XmlToNormalizedNodesTest { @Test public void testSimpleXmlParsing() throws IOException, URISyntaxException, ReactorException, XMLStreamException, ParserConfigurationException, SAXException { - SchemaContext schemaContext = YangParserTestUtils.parseYangSource("/foo.yang"); - final InputStream resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream("/foo.xml"); final XMLInputFactory factory = XMLInputFactory.newInstance(); @@ -147,7 +160,7 @@ public class XmlToNormalizedNodesTest { final NormalizedNodeResult result = new NormalizedNodeResult(); final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result); - final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, schemaContext); + final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, parentContainerSchema); xmlParser.parse(reader); final NormalizedNode transformedInput = result.getResult(); @@ -157,8 +170,6 @@ public class XmlToNormalizedNodesTest { @Test public void shouldFailOnDuplicateLeaf() throws ReactorException, XMLStreamException, IOException, ParserConfigurationException, SAXException, URISyntaxException { - SchemaContext schemaContext = YangParserTestUtils.parseYangSource("/foo.yang"); - final InputStream resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream("/invalid-foo.xml"); final XMLInputFactory factory = XMLInputFactory.newInstance(); @@ -167,7 +178,7 @@ public class XmlToNormalizedNodesTest { final NormalizedNodeResult result = new NormalizedNodeResult(); final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result); - final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, schemaContext); + final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, parentContainerSchema); try { xmlParser.parse(reader); fail("IllegalStateException should have been thrown because of duplicate leaf."); @@ -180,8 +191,6 @@ public class XmlToNormalizedNodesTest { @Test public void shouldFailOnDuplicateAnyXml() throws ReactorException, XMLStreamException, IOException, ParserConfigurationException, SAXException, URISyntaxException { - SchemaContext schemaContext = YangParserTestUtils.parseYangSource("/foo.yang"); - final InputStream resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream("/invalid-foo-2.xml"); final XMLInputFactory factory = XMLInputFactory.newInstance(); @@ -190,7 +199,7 @@ public class XmlToNormalizedNodesTest { final NormalizedNodeResult result = new NormalizedNodeResult(); final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result); - final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, schemaContext); + final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, parentContainerSchema); try { xmlParser.parse(reader); fail("IllegalStateException should have been thrown because of duplicate anyxml"); @@ -202,8 +211,6 @@ public class XmlToNormalizedNodesTest { @Test public void shouldFailOnDuplicateContainer() throws ReactorException, XMLStreamException, IOException, ParserConfigurationException, SAXException, URISyntaxException { - SchemaContext schemaContext = YangParserTestUtils.parseYangSource("/foo.yang"); - final InputStream resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream("/invalid-foo-3.xml"); final XMLInputFactory factory = XMLInputFactory.newInstance(); @@ -212,7 +219,7 @@ public class XmlToNormalizedNodesTest { final NormalizedNodeResult result = new NormalizedNodeResult(); final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result); - final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, schemaContext); + final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, parentContainerSchema); try { xmlParser.parse(reader); fail("IllegalStateException should have been thrown because of duplicate container"); @@ -224,8 +231,6 @@ public class XmlToNormalizedNodesTest { @Test public void shouldFailOnUnterminatedLeafElement() throws ReactorException, XMLStreamException, IOException, ParserConfigurationException, SAXException, URISyntaxException { - SchemaContext schemaContext = YangParserTestUtils.parseYangSource("/baz.yang"); - final InputStream resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream("/invalid-baz.xml"); final XMLInputFactory factory = XMLInputFactory.newInstance(); @@ -234,7 +239,7 @@ public class XmlToNormalizedNodesTest { final NormalizedNodeResult result = new NormalizedNodeResult(); final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result); - final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, schemaContext); + final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, outerContainerSchema); try { xmlParser.parse(reader); fail("XMLStreamException should have been thrown because of unterminated leaf element."); @@ -247,8 +252,6 @@ public class XmlToNormalizedNodesTest { @Test public void shouldFailOnUnterminatedLeafElement2() throws ReactorException, XMLStreamException, IOException, ParserConfigurationException, SAXException, URISyntaxException { - SchemaContext schemaContext = YangParserTestUtils.parseYangSource("/baz.yang"); - final InputStream resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream("/invalid-baz-2.xml"); final XMLInputFactory factory = XMLInputFactory.newInstance(); @@ -257,7 +260,7 @@ public class XmlToNormalizedNodesTest { final NormalizedNodeResult result = new NormalizedNodeResult(); final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result); - final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, schemaContext); + final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, outerContainerSchema); try { xmlParser.parse(reader); fail("XMLStreamException should have been thrown because of unterminated leaf element."); @@ -270,8 +273,6 @@ public class XmlToNormalizedNodesTest { @Test public void shouldFailOnUnterminatedContainerElement() throws ReactorException, XMLStreamException, IOException, ParserConfigurationException, SAXException, URISyntaxException { - SchemaContext schemaContext = YangParserTestUtils.parseYangSource("/baz.yang"); - final InputStream resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream("/invalid-baz-4.xml"); final XMLInputFactory factory = XMLInputFactory.newInstance(); @@ -280,7 +281,7 @@ public class XmlToNormalizedNodesTest { final NormalizedNodeResult result = new NormalizedNodeResult(); final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result); - final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, schemaContext); + final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, outerContainerSchema); try { xmlParser.parse(reader); fail("XMLStreamException should have been thrown because of unterminated container element."); @@ -303,7 +304,7 @@ public class XmlToNormalizedNodesTest { final NormalizedNodeResult result = new NormalizedNodeResult(); final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result); - final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, schemaContext); + final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, outerContainerSchema); try { xmlParser.parse(reader); fail("IllegalStateException should have been thrown because of an unexisting container element."); diff --git a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/YangModeledAnyXMLDeserializationTest.java b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/YangModeledAnyXMLDeserializationTest.java index 44ca138280..fc062e46fa 100644 --- a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/YangModeledAnyXMLDeserializationTest.java +++ b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/YangModeledAnyXMLDeserializationTest.java @@ -33,11 +33,11 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.YangModeledAnyXmlNode; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeBuilder; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeSchemaAwareBuilder; +import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult; import org.opendaylight.yangtools.yang.model.api.ConstraintDefinition; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; +import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.Status; @@ -90,22 +90,21 @@ public class YangModeledAnyXMLDeserializationTest { final XMLInputFactory factory = XMLInputFactory.newInstance(); final XMLStreamReader reader = factory.createXMLStreamReader(resourceAsStream); - - final ImmutableContainerNodeBuilder result = - (ImmutableContainerNodeBuilder) ImmutableContainerNodeSchemaAwareBuilder.create( - yangModeledAnyXML.getSchemaOfAnyXmlData()); + final NormalizedNodeResult result = new NormalizedNodeResult(); final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result); final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, yangModeledAnyXML); xmlParser.parse(reader); - final NormalizedNode output = result.build(); + final NormalizedNode output = result.getResult(); + assertTrue(output instanceof YangModeledAnyXmlNode); + final YangModeledAnyXmlNode yangModeledAnyXmlNode = (YangModeledAnyXmlNode) output; - Collection> value = ((ContainerNode) output).getValue(); + Collection> value = yangModeledAnyXmlNode.getValue(); assertEquals(2, value.size()); - Optional> child = ((ContainerNode) output) + Optional> child = yangModeledAnyXmlNode .getChild(new NodeIdentifier(myContainer1)); assertTrue(child.orNull() instanceof ContainerNode); ContainerNode myContainerNode1 = (ContainerNode) child.get(); @@ -123,24 +122,22 @@ public class YangModeledAnyXMLDeserializationTest { public void testRealSchemaContextFromFoo() throws Exception { final InputStream resourceAsStream = YangModeledAnyXMLDeserializationTest.class.getResourceAsStream( "/anyxml-support/xml/foo.xml"); + final Module foo = schemaContext.findModuleByName("foo", null); + final YangModeledAnyXmlSchemaNode myAnyXmlData = (YangModeledAnyXmlSchemaNode) foo.getDataChildByName( + QName.create(foo.getQNameModule(), "my-anyxml-data")); final XMLInputFactory factory = XMLInputFactory.newInstance(); final XMLStreamReader reader = factory.createXMLStreamReader(resourceAsStream); - - final ImmutableContainerNodeBuilder result = - (ImmutableContainerNodeBuilder) ImmutableContainerNodeSchemaAwareBuilder.create(schemaContext); + final NormalizedNodeResult result = new NormalizedNodeResult(); final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result); - final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, schemaContext); + final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, myAnyXmlData); xmlParser.parse(reader); - final NormalizedNode output = result.build(); - - Optional> child = ((ContainerNode) output).getChild( - new NodeIdentifier(myAnyXMLDataFoo)); - assertTrue(child.orNull() instanceof YangModeledAnyXmlNode); - YangModeledAnyXmlNode yangModeledAnyXmlNode = (YangModeledAnyXmlNode) child.get(); + final NormalizedNode output = result.getResult(); + assertTrue(output instanceof YangModeledAnyXmlNode); + final YangModeledAnyXmlNode yangModeledAnyXmlNode = (YangModeledAnyXmlNode) output; DataSchemaNode schemaOfAnyXmlData = yangModeledAnyXmlNode.getSchemaOfAnyXmlData(); DataSchemaNode expectedSchemaOfAnyXmlData = schemaContext.getDataChildByName(myContainer2); diff --git a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/YangModeledAnyXMLSerializationTest.java b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/YangModeledAnyXMLSerializationTest.java index be7006f3e0..98e2a6c4d9 100644 --- a/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/YangModeledAnyXMLSerializationTest.java +++ b/yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/YangModeledAnyXMLSerializationTest.java @@ -45,6 +45,7 @@ import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeS import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; +import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.SchemaNode; import org.opendaylight.yangtools.yang.model.api.SchemaPath; @@ -76,6 +77,10 @@ public class YangModeledAnyXMLSerializationTest extends XMLTestCase { public void testSerializationOfBaz() throws Exception { final InputStream resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream( "/anyxml-support/serialization/baz.xml"); + final Module bazModule = schemaContext.findModuleByName("baz", null); + final ContainerSchemaNode bazCont = (ContainerSchemaNode) bazModule.getDataChildByName( + QName.create(bazModule.getQNameModule(), "baz")); + assertNotNull(bazCont); final XMLInputFactory inputFactory = XMLInputFactory.newInstance(); final XMLStreamReader reader = inputFactory.createXMLStreamReader(resourceAsStream); @@ -84,7 +89,7 @@ public class YangModeledAnyXMLSerializationTest extends XMLTestCase { final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result); - final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, schemaContext); + final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, bazCont); xmlParser.parse(reader); final NormalizedNode transformedInput = result.getResult(); @@ -128,7 +133,7 @@ public class YangModeledAnyXMLSerializationTest extends XMLTestCase { XMLUnit.setIgnoreAttributeOrder(true); XMLUnit.setNormalize(true); - String expectedXml = toString(doc.getDocumentElement().getElementsByTagName("baz").item(0)); + String expectedXml = toString(doc.getDocumentElement()); String serializedXml = toString(domResult.getNode()); assertXMLEqual(expectedXml, serializedXml); diff --git a/yang/yang-data-codec-xml/src/test/resources/anyxml-support/serialization/baz.xml b/yang/yang-data-codec-xml/src/test/resources/anyxml-support/serialization/baz.xml index 16029d103b..82f99d5777 100644 --- a/yang/yang-data-codec-xml/src/test/resources/anyxml-support/serialization/baz.xml +++ b/yang/yang-data-codec-xml/src/test/resources/anyxml-support/serialization/baz.xml @@ -1,21 +1,19 @@ - - - - value1 - - - - value2 - - value3 - + + + value1 + + + + value2 + + value3 + - - - any-xml-leaf-2-value - - any-xml-leaf-3-value - - - \ No newline at end of file + + + any-xml-leaf-2-value + + any-xml-leaf-3-value + + \ No newline at end of file diff --git a/yang/yang-data-codec-xml/src/test/resources/anyxml-support/xml/bar.xml b/yang/yang-data-codec-xml/src/test/resources/anyxml-support/xml/bar.xml index 263768648e..2bf7dbed3b 100644 --- a/yang/yang-data-codec-xml/src/test/resources/anyxml-support/xml/bar.xml +++ b/yang/yang-data-codec-xml/src/test/resources/anyxml-support/xml/bar.xml @@ -1,10 +1,9 @@ - - + value1 value2 - \ No newline at end of file + \ No newline at end of file diff --git a/yang/yang-data-codec-xml/src/test/resources/anyxml-support/xml/foo.xml b/yang/yang-data-codec-xml/src/test/resources/anyxml-support/xml/foo.xml index 2492e954c7..6f1385476c 100644 --- a/yang/yang-data-codec-xml/src/test/resources/anyxml-support/xml/foo.xml +++ b/yang/yang-data-codec-xml/src/test/resources/anyxml-support/xml/foo.xml @@ -1,19 +1,7 @@ - - - value1 - - - - value2 - - value3 - - - - - any-xml-leaf-2-value - - any-xml-leaf-3-value - - \ No newline at end of file + + + any-xml-leaf-2-value + + any-xml-leaf-3-value + \ No newline at end of file diff --git a/yang/yang-data-codec-xml/src/test/resources/baz.xml b/yang/yang-data-codec-xml/src/test/resources/baz.xml index 48f4510bca..3752c03c75 100644 --- a/yang/yang-data-codec-xml/src/test/resources/baz.xml +++ b/yang/yang-data-codec-xml/src/test/resources/baz.xml @@ -1,40 +1,38 @@ - - - - - listkeyvalue1 - listleafvalue1 - listleafvalue2 - + + + + listkeyvalue1 + listleafvalue1 + listleafvalue2 + - - listkeyvalue2 - listleafvalue12 - listleafvalue22 - + + listkeyvalue2 + listleafvalue12 + listleafvalue22 + - value1 + value1 - lflvalue1 - lflvalue2 - + lflvalue1 + lflvalue2 + - - - value2 - - value3 - case2value - + + + value2 + + value3 + case2value + - - - listkeyvalue1 - listkeyvalue2 - listleafvalue1 - - - - + + + listkeyvalue1 + listkeyvalue2 + listleafvalue1 + + + diff --git a/yang/yang-data-codec-xml/src/test/resources/bug5396/xml/foo.xml b/yang/yang-data-codec-xml/src/test/resources/bug5396/xml/foo.xml index 26fe22204b..744500bf45 100644 --- a/yang/yang-data-codec-xml/src/test/resources/bug5396/xml/foo.xml +++ b/yang/yang-data-codec-xml/src/test/resources/bug5396/xml/foo.xml @@ -1,6 +1,4 @@ - - - dp1o34 - - \ No newline at end of file + + dp1o34 + \ No newline at end of file diff --git a/yang/yang-data-codec-xml/src/test/resources/bug5396/xml/foo2.xml b/yang/yang-data-codec-xml/src/test/resources/bug5396/xml/foo2.xml index 72b9185fee..90dd302240 100644 --- a/yang/yang-data-codec-xml/src/test/resources/bug5396/xml/foo2.xml +++ b/yang/yang-data-codec-xml/src/test/resources/bug5396/xml/foo2.xml @@ -1,6 +1,4 @@ - - - dp0s3f9 - - \ No newline at end of file + + dp0s3f9 + \ No newline at end of file diff --git a/yang/yang-data-codec-xml/src/test/resources/bug5396/xml/foo3.xml b/yang/yang-data-codec-xml/src/test/resources/bug5396/xml/foo3.xml index c18e3cc30b..507b6549e4 100644 --- a/yang/yang-data-codec-xml/src/test/resources/bug5396/xml/foo3.xml +++ b/yang/yang-data-codec-xml/src/test/resources/bug5396/xml/foo3.xml @@ -1,6 +1,4 @@ - - - dp09P1p2s3 - - \ No newline at end of file + + dp09P1p2s3 + \ No newline at end of file diff --git a/yang/yang-data-codec-xml/src/test/resources/bug5396/xml/foo4.xml b/yang/yang-data-codec-xml/src/test/resources/bug5396/xml/foo4.xml index 154a11489b..b9ee3fa89f 100644 --- a/yang/yang-data-codec-xml/src/test/resources/bug5396/xml/foo4.xml +++ b/yang/yang-data-codec-xml/src/test/resources/bug5396/xml/foo4.xml @@ -1,6 +1,4 @@ - - - dp0p3p1 - - \ No newline at end of file + + dp0p3p1 + \ No newline at end of file diff --git a/yang/yang-data-codec-xml/src/test/resources/bug5396/xml/foo5.xml b/yang/yang-data-codec-xml/src/test/resources/bug5396/xml/foo5.xml index 7a5ce58cd3..e69616a3e3 100644 --- a/yang/yang-data-codec-xml/src/test/resources/bug5396/xml/foo5.xml +++ b/yang/yang-data-codec-xml/src/test/resources/bug5396/xml/foo5.xml @@ -1,6 +1,4 @@ - - - dp0s3 - - \ No newline at end of file + + dp0s3 + \ No newline at end of file diff --git a/yang/yang-data-codec-xml/src/test/resources/bug5396/xml/invalid-foo.xml b/yang/yang-data-codec-xml/src/test/resources/bug5396/xml/invalid-foo.xml index cf86806066..aeed2f6b25 100644 --- a/yang/yang-data-codec-xml/src/test/resources/bug5396/xml/invalid-foo.xml +++ b/yang/yang-data-codec-xml/src/test/resources/bug5396/xml/invalid-foo.xml @@ -1,6 +1,4 @@ - - - dp09P1p2s1234 - - \ No newline at end of file + + dp09P1p2s1234 + \ No newline at end of file diff --git a/yang/yang-data-codec-xml/src/test/resources/bug5446/xml/foo.xml b/yang/yang-data-codec-xml/src/test/resources/bug5446/xml/foo.xml index b9b8abf95c..142ed14057 100644 --- a/yang/yang-data-codec-xml/src/test/resources/bug5446/xml/foo.xml +++ b/yang/yang-data-codec-xml/src/test/resources/bug5446/xml/foo.xml @@ -1,6 +1,4 @@ - - - fwAAAQ== - - \ No newline at end of file + + fwAAAQ== + \ No newline at end of file diff --git a/yang/yang-data-codec-xml/src/test/resources/bug8083/xml/baz.xml b/yang/yang-data-codec-xml/src/test/resources/bug8083/xml/baz.xml index 43f669b833..eff39ace1f 100644 --- a/yang/yang-data-codec-xml/src/test/resources/bug8083/xml/baz.xml +++ b/yang/yang-data-codec-xml/src/test/resources/bug8083/xml/baz.xml @@ -1,12 +1,10 @@ - - - - - 150 - + + + + 150 + - /baz:top-cont/baz:keyed-list[baz:empty-key-leaf='']/baz:regular-leaf - - \ No newline at end of file + /baz:top-cont/baz:keyed-list[baz:empty-key-leaf='']/baz:regular-leaf + \ No newline at end of file diff --git a/yang/yang-data-codec-xml/src/test/resources/bug8083/xml/foobar.xml b/yang/yang-data-codec-xml/src/test/resources/bug8083/xml/foobar.xml index 352c0aff6c..c317acd459 100644 --- a/yang/yang-data-codec-xml/src/test/resources/bug8083/xml/foobar.xml +++ b/yang/yang-data-codec-xml/src/test/resources/bug8083/xml/foobar.xml @@ -1,14 +1,12 @@ - - - - /foobar:top-cont/foobar:leaf-b - 150 - + + + /foobar:top-cont/foobar:leaf-b + 150 + - - /foobar:top-cont/foobar:keyed-list[foobar:iid-key-leaf='/foobar:top-cont/foobar:leaf-b']/foobar:regular-leaf - 50 - - \ No newline at end of file + + /foobar:top-cont/foobar:keyed-list[foobar:iid-key-leaf='/foobar:top-cont/foobar:leaf-b']/foobar:regular-leaf + 50 + \ No newline at end of file diff --git a/yang/yang-data-codec-xml/src/test/resources/bug8083/xml/zab.xml b/yang/yang-data-codec-xml/src/test/resources/bug8083/xml/zab.xml index 1b4de0d58a..3d312186df 100644 --- a/yang/yang-data-codec-xml/src/test/resources/bug8083/xml/zab.xml +++ b/yang/yang-data-codec-xml/src/test/resources/bug8083/xml/zab.xml @@ -1,13 +1,11 @@ - - - - derived-id - 150 - + + + derived-id + 150 + - - /zab:top-cont/zab:keyed-list[zab:identityref-key-leaf='derived-id']/zab:regular-leaf - - \ No newline at end of file + + /zab:top-cont/zab:keyed-list[zab:identityref-key-leaf='derived-id']/zab:regular-leaf + \ No newline at end of file diff --git a/yang/yang-data-codec-xml/src/test/resources/bug8675/foo-2.xml b/yang/yang-data-codec-xml/src/test/resources/bug8675/foo-2.xml new file mode 100644 index 0000000000..5859bad23c --- /dev/null +++ b/yang/yang-data-codec-xml/src/test/resources/bug8675/foo-2.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/yang/yang-data-codec-xml/src/test/resources/bug8675/foo-3.xml b/yang/yang-data-codec-xml/src/test/resources/bug8675/foo-3.xml new file mode 100644 index 0000000000..fd71a36c18 --- /dev/null +++ b/yang/yang-data-codec-xml/src/test/resources/bug8675/foo-3.xml @@ -0,0 +1,10 @@ + + + key-value + leaf-value + + + inner-key-value + inner-leaf-value + + \ No newline at end of file diff --git a/yang/yang-data-codec-xml/src/test/resources/bug8675/foo-4.xml b/yang/yang-data-codec-xml/src/test/resources/bug8675/foo-4.xml new file mode 100644 index 0000000000..fad37211a3 --- /dev/null +++ b/yang/yang-data-codec-xml/src/test/resources/bug8675/foo-4.xml @@ -0,0 +1,4 @@ + + + data-value + \ No newline at end of file diff --git a/yang/yang-data-codec-xml/src/test/resources/bug8675/foo-5.xml b/yang/yang-data-codec-xml/src/test/resources/bug8675/foo-5.xml new file mode 100644 index 0000000000..648cffec87 --- /dev/null +++ b/yang/yang-data-codec-xml/src/test/resources/bug8675/foo-5.xml @@ -0,0 +1,2 @@ + +100 \ No newline at end of file diff --git a/yang/yang-data-codec-xml/src/test/resources/bug8675/foo-6.xml b/yang/yang-data-codec-xml/src/test/resources/bug8675/foo-6.xml new file mode 100644 index 0000000000..5389603b2f --- /dev/null +++ b/yang/yang-data-codec-xml/src/test/resources/bug8675/foo-6.xml @@ -0,0 +1,2 @@ + +100 \ No newline at end of file diff --git a/yang/yang-data-codec-xml/src/test/resources/bug8675/foo.xml b/yang/yang-data-codec-xml/src/test/resources/bug8675/foo.xml new file mode 100644 index 0000000000..41d880214d --- /dev/null +++ b/yang/yang-data-codec-xml/src/test/resources/bug8675/foo.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/yang/yang-data-codec-xml/src/test/resources/bug8675/foo.yang b/yang/yang-data-codec-xml/src/test/resources/bug8675/foo.yang new file mode 100644 index 0000000000..06ff0eb6ce --- /dev/null +++ b/yang/yang-data-codec-xml/src/test/resources/bug8675/foo.yang @@ -0,0 +1,47 @@ +module foo { + namespace foo; + prefix foo; + + revision 2017-06-13; + + list top-level-list { + key key-leaf; + + leaf key-leaf { + type string; + } + + leaf ordinary-leaf { + type string; + } + + container cont-in-list {} + + list inner-list { + key inner-key-leaf; + + leaf inner-key-leaf { + type string; + } + + leaf inner-ordinary-leaf { + type string; + } + } + } + + container top-level-container { + container inner-container-1 {} + container inner-container-2 {} + } + + anyxml top-level-anyxml; + + leaf top-level-leaf { + type int32; + } + + leaf-list top-level-leaf-list { + type int32; + } +} \ No newline at end of file diff --git a/yang/yang-data-codec-xml/src/test/resources/foo.xml b/yang/yang-data-codec-xml/src/test/resources/foo.xml index e363dd88fd..0d84ace385 100644 --- a/yang/yang-data-codec-xml/src/test/resources/foo.xml +++ b/yang/yang-data-codec-xml/src/test/resources/foo.xml @@ -1,19 +1,17 @@ - - - - prefix:ident-one - 1500 - 150.45 - hello world - hello world - - true - five - - - sub-element value - - - + + + prefix:ident-one + 1500 + 150.45 + hello world + hello world + + true + five + + + sub-element value + + diff --git a/yang/yang-data-codec-xml/src/test/resources/foobar.xml b/yang/yang-data-codec-xml/src/test/resources/foobar.xml index b4aebfed7c..5d65738f39 100644 --- a/yang/yang-data-codec-xml/src/test/resources/foobar.xml +++ b/yang/yang-data-codec-xml/src/test/resources/foobar.xml @@ -1,59 +1,57 @@ - - - - - listkeyvalue1 - listleafvalue1 - listleafvalue2 - - - - listkeyvalue2 - listleafvalue12 - listleafvalue22 - - - - olistkeyvalue1 - olistleafvalue1 - olistleafvalue2 - - - - olistkeyvalue2 - olistleafvalue12 - olistleafvalue22 - - - - foo - - - value1 - - lflvalue1 - lflvalue2 - - olflvalue1 - olflvalue2 - - - - - value2 - - value3 - case2value - - - - - listkeyvalue1 - listkeyvalue2 - listleafvalue1 - - - - \ No newline at end of file + + + + listkeyvalue1 + listleafvalue1 + listleafvalue2 + + + + listkeyvalue2 + listleafvalue12 + listleafvalue22 + + + + olistkeyvalue1 + olistleafvalue1 + olistleafvalue2 + + + + olistkeyvalue2 + olistleafvalue12 + olistleafvalue22 + + + + foo + + + value1 + + lflvalue1 + lflvalue2 + + olflvalue1 + olflvalue2 + + + + + value2 + + value3 + case2value + + + + + listkeyvalue1 + listkeyvalue2 + listleafvalue1 + + + \ No newline at end of file diff --git a/yang/yang-data-codec-xml/src/test/resources/invalid-baz-2.xml b/yang/yang-data-codec-xml/src/test/resources/invalid-baz-2.xml index ef9fc35414..ae7b62c0f3 100644 --- a/yang/yang-data-codec-xml/src/test/resources/invalid-baz-2.xml +++ b/yang/yang-data-codec-xml/src/test/resources/invalid-baz-2.xml @@ -1,40 +1,38 @@ - - - - - listkeyvalue1 - listleafvalue1 - listleafvalue2 - + + + + listkeyvalue1 + listleafvalue1 + listleafvalue2 + - - listkeyvalue2 - listleafvalue12 - listleafvalue22 - + + listkeyvalue2 + listleafvalue12 + listleafvalue22 + - value1 + value1 - lflvalue1 - lflvalue2 - + lflvalue1 + lflvalue2 + - - - value2 - - value3 - case2value - + + + value2 + + value3 + case2value + - - - listkeyvalue1 - listkeyvalue2 - listleafvalue3 - - - - \ No newline at end of file + + + listkeyvalue1 + listkeyvalue2 + listleafvalue3 + + + \ No newline at end of file diff --git a/yang/yang-data-codec-xml/src/test/resources/invalid-baz-3.xml b/yang/yang-data-codec-xml/src/test/resources/invalid-baz-3.xml index 2219b1b2a4..6b280b1451 100644 --- a/yang/yang-data-codec-xml/src/test/resources/invalid-baz-3.xml +++ b/yang/yang-data-codec-xml/src/test/resources/invalid-baz-3.xml @@ -1,40 +1,38 @@ - - - - - listkeyvalue1 - listleafvalue1 - listleafvalue2 - + + + + listkeyvalue1 + listleafvalue1 + listleafvalue2 + - - listkeyvalue2 - listleafvalue12 - listleafvalue22 - + + listkeyvalue2 + listleafvalue12 + listleafvalue22 + - value1 + value1 - lflvalue1 - lflvalue2 - + lflvalue1 + lflvalue2 + - - - value2 - - value3 - case2value - + + + value2 + + value3 + case2value + - - - listkeyvalue1 - listkeyvalue2 - listleafvalue3 - - - - \ No newline at end of file + + + listkeyvalue1 + listkeyvalue2 + listleafvalue3 + + + \ No newline at end of file diff --git a/yang/yang-data-codec-xml/src/test/resources/invalid-baz-4.xml b/yang/yang-data-codec-xml/src/test/resources/invalid-baz-4.xml index f4eae6f2e5..5b50fbd6cd 100644 --- a/yang/yang-data-codec-xml/src/test/resources/invalid-baz-4.xml +++ b/yang/yang-data-codec-xml/src/test/resources/invalid-baz-4.xml @@ -1,40 +1,38 @@ - - - - - listkeyvalue1 - listleafvalue1 - listleafvalue2 - + + + + listkeyvalue1 + listleafvalue1 + listleafvalue2 + - - listkeyvalue2 - listleafvalue12 - listleafvalue22 - + + listkeyvalue2 + listleafvalue12 + listleafvalue22 + - value1 + value1 - lflvalue1 - lflvalue2 - + lflvalue1 + lflvalue2 + - - - value2 - - value3 - case2value - + + + value2 + + value3 + case2value + - - - listkeyvalue1 - listkeyvalue2 - listleafvalue3 - - - - \ No newline at end of file + + + listkeyvalue1 + listkeyvalue2 + listleafvalue3 + + + \ No newline at end of file diff --git a/yang/yang-data-codec-xml/src/test/resources/invalid-baz.xml b/yang/yang-data-codec-xml/src/test/resources/invalid-baz.xml index 51da202271..5ec778144e 100644 --- a/yang/yang-data-codec-xml/src/test/resources/invalid-baz.xml +++ b/yang/yang-data-codec-xml/src/test/resources/invalid-baz.xml @@ -1,40 +1,38 @@ - - - - - listkeyvalue1 - listleafvalue1 - listleafvalue2 - + + + + listkeyvalue1 + listleafvalue1 + listleafvalue2 + - - listkeyvalue2 - listleafvalue12 - listleafvalue22 - + + listkeyvalue2 + listleafvalue12 + listleafvalue22 + - value1 + value1 - lflvalue1 - lflvalue2 - + lflvalue1 + lflvalue2 + - - - value2 - - value3 - case2value - + + + value2 + + value3 + case2value + - - - listkeyvalue1 - listkeyvalue2 - listleafvalue3 - - - - \ No newline at end of file + + + listkeyvalue1 + listkeyvalue2 + listleafvalue3 + + + \ No newline at end of file diff --git a/yang/yang-data-codec-xml/src/test/resources/invalid-foo-2.xml b/yang/yang-data-codec-xml/src/test/resources/invalid-foo-2.xml index 69deaae02d..84ce5c5543 100644 --- a/yang/yang-data-codec-xml/src/test/resources/invalid-foo-2.xml +++ b/yang/yang-data-codec-xml/src/test/resources/invalid-foo-2.xml @@ -1,27 +1,25 @@ - - - - 1500 - 150.45 - hello world - hello world - - true - five - - - - - sub-element value - - - - - sub-element value 2 - - - - - \ No newline at end of file + + + 1500 + 150.45 + hello world + hello world + + true + five + + + + + sub-element value + + + + + sub-element value 2 + + + + \ No newline at end of file diff --git a/yang/yang-data-codec-xml/src/test/resources/invalid-foo-3.xml b/yang/yang-data-codec-xml/src/test/resources/invalid-foo-3.xml index b043f49c7a..0021427ecd 100644 --- a/yang/yang-data-codec-xml/src/test/resources/invalid-foo-3.xml +++ b/yang/yang-data-codec-xml/src/test/resources/invalid-foo-3.xml @@ -1,27 +1,25 @@ - - - - 1500 - 150.45 - hello world - hello world - - true - five - - - 2500 - 250.45 - goodbye world - - - - - sub-element value - - - - - \ No newline at end of file + + + 1500 + 150.45 + hello world + hello world + + true + five + + + 2500 + 250.45 + goodbye world + + + + + sub-element value + + + + \ No newline at end of file diff --git a/yang/yang-data-codec-xml/src/test/resources/invalid-foo.xml b/yang/yang-data-codec-xml/src/test/resources/invalid-foo.xml index 3f18dcf466..8734999c72 100644 --- a/yang/yang-data-codec-xml/src/test/resources/invalid-foo.xml +++ b/yang/yang-data-codec-xml/src/test/resources/invalid-foo.xml @@ -1,23 +1,21 @@ - - - - 1500 - 150.45 - 240.35 - hello world - hello world - - true - five - - - - - sub-element value - - - - - \ No newline at end of file + + + 1500 + 150.45 + 240.35 + hello world + hello world + + true + five + + + + + sub-element value + + + + \ No newline at end of file diff --git a/yang/yang-data-codec-xml/src/test/resources/schema/augment_choice_hell_ok.xml b/yang/yang-data-codec-xml/src/test/resources/schema/augment_choice_hell_ok.xml index 970cd57e02..3f2b982595 100644 --- a/yang/yang-data-codec-xml/src/test/resources/schema/augment_choice_hell_ok.xml +++ b/yang/yang-data-codec-xml/src/test/resources/schema/augment_choice_hell_ok.xml @@ -1,17 +1,14 @@ - - - 2 - 2 - + + 2 + 2 + - 3 + 3 - augment - - 1 - 1 - 1 - - - + augment + 1 + 1 + 1 + + diff --git a/yang/yang-data-codec-xml/src/test/resources/schema/augment_choice_hell_ok2.xml b/yang/yang-data-codec-xml/src/test/resources/schema/augment_choice_hell_ok2.xml index fc510077fc..7d6a20f7c4 100644 --- a/yang/yang-data-codec-xml/src/test/resources/schema/augment_choice_hell_ok2.xml +++ b/yang/yang-data-codec-xml/src/test/resources/schema/augment_choice_hell_ok2.xml @@ -1,14 +1,11 @@ - - - 2 + + 2 - 3 + 3 - augment - - 1 - 1 - 1 - - + augment + 1 + 1 + 1 + diff --git a/yang/yang-data-codec-xml/src/test/resources/schema/augment_choice_hell_ok3.xml b/yang/yang-data-codec-xml/src/test/resources/schema/augment_choice_hell_ok3.xml index e367c455f9..738a12f132 100644 --- a/yang/yang-data-codec-xml/src/test/resources/schema/augment_choice_hell_ok3.xml +++ b/yang/yang-data-codec-xml/src/test/resources/schema/augment_choice_hell_ok3.xml @@ -1,8 +1,6 @@ - - - - leaf-value - - - + + + leaf-value + + diff --git a/yang/yang-data-codec-xml/src/test/resources/schema/simple.xml b/yang/yang-data-codec-xml/src/test/resources/schema/simple.xml index 634bed7130..4bcaf05606 100644 --- a/yang/yang-data-codec-xml/src/test/resources/schema/simple.xml +++ b/yang/yang-data-codec-xml/src/test/resources/schema/simple.xml @@ -1,74 +1,72 @@ - - - true - - 44 - - a - b + + true + + 44 + + a + b - - 1 - - 32 - 16 - prefix:b - direct Value - 16 - /prefix:container/prefix:list[prefix:uint32InList="1"] - - augmentInList - augmentInListCase1 - - - 2 - - 32 - 16 - b - - - true - - pref2:44 - - - - - - augmentInListCase2 - - - 4 - - - - - - module - 2012-12-12 - x:yang - - - - - - - - 3 - + + 1 + + 32 + 16 + prefix:b + direct Value + 16 + /prefix:container/prefix:list[prefix:uint32InList="1"] + + augmentInList + augmentInListCase1 + + + 2 + + 32 + 16 + b + + + true + + pref2:44 + + + + + + augmentInListCase2 + + + 4 + + + + + + module + 2012-12-12 + x:yang + + + + + + + + 3 + - choice1Case1 - 41 - deep + choice1Case1 + 41 + deep - - choice2Case1 - + + choice2Case1 + - 999 + 999 - - \ No newline at end of file + \ No newline at end of file diff --git a/yang/yang-data-codec-xml/src/test/resources/schema/simple2.xml b/yang/yang-data-codec-xml/src/test/resources/schema/simple2.xml index 2c4a5d1974..26a343af97 100644 --- a/yang/yang-data-codec-xml/src/test/resources/schema/simple2.xml +++ b/yang/yang-data-codec-xml/src/test/resources/schema/simple2.xml @@ -1,44 +1,42 @@ - - - choice1Case1 - 41 - deep - - - aug1 - - - - aug2 - - - 66 - - - - - - 661 - - - 662 - - - - - - 6621 - - - - - - aug3 - - - - - - - + + choice1Case1 + 41 + deep + + + aug1 + + + + aug2 + + + 66 + + + + + + 661 + + + 662 + + + + + + 6621 + + + + + + aug3 + + + + + + diff --git a/yang/yang-data-codec-xml/src/test/resources/schema/simple_xml_with_attributes.xml b/yang/yang-data-codec-xml/src/test/resources/schema/simple_xml_with_attributes.xml index 163a313f2d..740bed8860 100644 --- a/yang/yang-data-codec-xml/src/test/resources/schema/simple_xml_with_attributes.xml +++ b/yang/yang-data-codec-xml/src/test/resources/schema/simple_xml_with_attributes.xml @@ -1,14 +1,11 @@ - - + - - 3 - + + 3 + - false + false - a - - - + a + \ No newline at end of file diff --git a/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/AbstractNodeDataWithSchema.java b/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/AbstractNodeDataWithSchema.java index 7343f34d22..b6368c768e 100644 --- a/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/AbstractNodeDataWithSchema.java +++ b/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/AbstractNodeDataWithSchema.java @@ -17,6 +17,7 @@ import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; /** * Utility abstract class for tracking parser state, as needed by StAX-like parser. + * This class is to be used only by respective XML and JSON parsers in yang-data-codec-xml and yang-data-codec-gson. */ @Beta public abstract class AbstractNodeDataWithSchema { diff --git a/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/AnyXmlNodeDataWithSchema.java b/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/AnyXmlNodeDataWithSchema.java index 949c1ade2b..6016e6ae35 100644 --- a/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/AnyXmlNodeDataWithSchema.java +++ b/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/AnyXmlNodeDataWithSchema.java @@ -11,6 +11,13 @@ import java.io.IOException; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; +/** + * Utility class used for tracking parser state as needed by a StAX-like parser. + * This class is to be used only by respective XML and JSON parsers in yang-data-codec-xml and yang-data-codec-gson. + * + *

+ * Represents a YANG anyxml node. + */ public class AnyXmlNodeDataWithSchema extends SimpleNodeDataWithSchema { public AnyXmlNodeDataWithSchema(final DataSchemaNode dataSchemaNode) { diff --git a/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/CompositeNodeDataWithSchema.java b/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/CompositeNodeDataWithSchema.java index d7bd7939e6..86b113ff2f 100644 --- a/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/CompositeNodeDataWithSchema.java +++ b/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/CompositeNodeDataWithSchema.java @@ -34,7 +34,11 @@ import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; import org.opendaylight.yangtools.yang.model.api.YangModeledAnyXmlSchemaNode; /** - * A node which is composed of multiple simpler nodes. + * Utility class used for tracking parser state as needed by a StAX-like parser. + * This class is to be used only by respective XML and JSON parsers in yang-data-codec-xml and yang-data-codec-gson. + * + *

+ * Represents a node which is composed of multiple simpler nodes. */ public class CompositeNodeDataWithSchema extends AbstractNodeDataWithSchema { diff --git a/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/ContainerNodeDataWithSchema.java b/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/ContainerNodeDataWithSchema.java index 576cdc977a..3ebc481d21 100644 --- a/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/ContainerNodeDataWithSchema.java +++ b/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/ContainerNodeDataWithSchema.java @@ -11,9 +11,16 @@ import java.io.IOException; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; -class ContainerNodeDataWithSchema extends CompositeNodeDataWithSchema { +/** + * Utility class used for tracking parser state as needed by a StAX-like parser. + * This class is to be used only by respective XML and JSON parsers in yang-data-codec-xml and yang-data-codec-gson. + * + *

+ * Represents a YANG container node. + */ +public class ContainerNodeDataWithSchema extends CompositeNodeDataWithSchema { - ContainerNodeDataWithSchema(final DataSchemaNode schema) { + public ContainerNodeDataWithSchema(final DataSchemaNode schema) { super(schema); } diff --git a/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/LeafListEntryNodeDataWithSchema.java b/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/LeafListEntryNodeDataWithSchema.java index b2c3928cd3..ff65f3ca03 100644 --- a/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/LeafListEntryNodeDataWithSchema.java +++ b/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/LeafListEntryNodeDataWithSchema.java @@ -11,6 +11,13 @@ import java.io.IOException; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; +/** + * Utility class used for tracking parser state as needed by a StAX-like parser. + * This class is to be used only by respective XML and JSON parsers in yang-data-codec-xml and yang-data-codec-gson. + * + *

+ * Represents a YANG leaf-list entry node. + */ public class LeafListEntryNodeDataWithSchema extends SimpleNodeDataWithSchema { public LeafListEntryNodeDataWithSchema(final DataSchemaNode dataSchemaNode) { super(dataSchemaNode); diff --git a/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/LeafListNodeDataWithSchema.java b/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/LeafListNodeDataWithSchema.java index e7e45e83d3..5186f532c5 100644 --- a/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/LeafListNodeDataWithSchema.java +++ b/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/LeafListNodeDataWithSchema.java @@ -12,6 +12,13 @@ import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStre import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode; +/** + * Utility class used for tracking parser state as needed by a StAX-like parser. + * This class is to be used only by respective XML and JSON parsers in yang-data-codec-xml and yang-data-codec-gson. + * + *

+ * Represents a YANG leaf-list node. + */ public class LeafListNodeDataWithSchema extends CompositeNodeDataWithSchema { public LeafListNodeDataWithSchema(final DataSchemaNode schema) { super(schema); diff --git a/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/LeafNodeDataWithSchema.java b/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/LeafNodeDataWithSchema.java index e400c8f1b9..c3e6bf81ed 100644 --- a/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/LeafNodeDataWithSchema.java +++ b/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/LeafNodeDataWithSchema.java @@ -11,6 +11,13 @@ import java.io.IOException; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; +/** + * Utility class used for tracking parser state as needed by a StAX-like parser. + * This class is to be used only by respective XML and JSON parsers in yang-data-codec-xml and yang-data-codec-gson. + * + *

+ * Represents a YANG leaf node. + */ public class LeafNodeDataWithSchema extends SimpleNodeDataWithSchema { public LeafNodeDataWithSchema(final DataSchemaNode schema) { diff --git a/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/ListEntryNodeDataWithSchema.java b/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/ListEntryNodeDataWithSchema.java index 10ede76ebb..13a734d28d 100644 --- a/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/ListEntryNodeDataWithSchema.java +++ b/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/ListEntryNodeDataWithSchema.java @@ -20,6 +20,13 @@ import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; +/** + * Utility class used for tracking parser state as needed by a StAX-like parser. + * This class is to be used only by respective XML and JSON parsers in yang-data-codec-xml and yang-data-codec-gson. + * + *

+ * Represents a YANG list entry node. + */ public class ListEntryNodeDataWithSchema extends CompositeNodeDataWithSchema { private final Map qnameToKeys = new HashMap<>(); diff --git a/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/ListNodeDataWithSchema.java b/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/ListNodeDataWithSchema.java index 50512e6d27..14553c0a4b 100644 --- a/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/ListNodeDataWithSchema.java +++ b/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/ListNodeDataWithSchema.java @@ -12,6 +12,13 @@ import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStre import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; +/** + * Utility class used for tracking parser state as needed by a StAX-like parser. + * This class is to be used only by respective XML and JSON parsers in yang-data-codec-xml and yang-data-codec-gson. + * + *

+ * Represents a YANG list node. + */ public class ListNodeDataWithSchema extends CompositeNodeDataWithSchema { public ListNodeDataWithSchema(final DataSchemaNode schema) { diff --git a/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/SimpleNodeDataWithSchema.java b/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/SimpleNodeDataWithSchema.java index fd0b0e2baa..c7cbfa088d 100644 --- a/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/SimpleNodeDataWithSchema.java +++ b/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/SimpleNodeDataWithSchema.java @@ -9,6 +9,13 @@ package org.opendaylight.yangtools.yang.data.util; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; +/** + * Utility class used for tracking parser state as needed by a StAX-like parser. + * This class is to be used only by respective XML and JSON parsers in yang-data-codec-xml and yang-data-codec-gson. + * + *

+ * Represents a simple node with value (anyxml, leaf, leaf-list entry). + */ public abstract class SimpleNodeDataWithSchema extends AbstractNodeDataWithSchema { private Object value; diff --git a/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/YangModeledAnyXmlNodeDataWithSchema.java b/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/YangModeledAnyXmlNodeDataWithSchema.java index a916adb843..4e50c5701d 100644 --- a/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/YangModeledAnyXmlNodeDataWithSchema.java +++ b/yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/YangModeledAnyXmlNodeDataWithSchema.java @@ -11,9 +11,16 @@ import java.io.IOException; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.model.api.YangModeledAnyXmlSchemaNode; -final class YangModeledAnyXmlNodeDataWithSchema extends CompositeNodeDataWithSchema { +/** + * Utility class used for tracking parser state as needed by a StAX-like parser. + * This class is to be used only by respective XML and JSON parsers in yang-data-codec-xml and yang-data-codec-gson. + * + *

+ * Represents a YANG-modeled-anyxml node. + */ +public final class YangModeledAnyXmlNodeDataWithSchema extends CompositeNodeDataWithSchema { - YangModeledAnyXmlNodeDataWithSchema(final YangModeledAnyXmlSchemaNode yangModeledAnyXml) { + public YangModeledAnyXmlNodeDataWithSchema(final YangModeledAnyXmlSchemaNode yangModeledAnyXml) { super(yangModeledAnyXml); }