Bug 8675: Fix a design flaw of the new XML parser 36/59036/12
authorIgor Foltin <igor.foltin@pantheon.tech>
Thu, 15 Jun 2017 14:51:24 +0000 (16:51 +0200)
committerIgor Foltin <igor.foltin@pantheon.tech>
Tue, 18 Jul 2017 13:55:23 +0000 (15:55 +0200)
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 <igor.foltin@pantheon.tech>
60 files changed:
yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/YangModeledAnyXmlSupportTest.java
yang/yang-data-codec-gson/src/test/resources/yang-modeled-anyxml/xml/baz.xml
yang/yang-data-codec-xml/src/main/java/org/opendaylight/yangtools/yang/data/codec/xml/XmlParserStream.java
yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug5396Test.java
yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug5446Test.java
yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug8083Test.java
yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug8675Test.java [new file with mode: 0644]
yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/NormalizedNodeXmlTranslationTest.java
yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/NormalizedNodesToXmlTest.java
yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/SchemalessXMLStreamNormalizedNodeStreamWriterTest.java
yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/XmlToNormalizedNodesTest.java
yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/YangModeledAnyXMLDeserializationTest.java
yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/YangModeledAnyXMLSerializationTest.java
yang/yang-data-codec-xml/src/test/resources/anyxml-support/serialization/baz.xml
yang/yang-data-codec-xml/src/test/resources/anyxml-support/xml/bar.xml
yang/yang-data-codec-xml/src/test/resources/anyxml-support/xml/foo.xml
yang/yang-data-codec-xml/src/test/resources/baz.xml
yang/yang-data-codec-xml/src/test/resources/bug5396/xml/foo.xml
yang/yang-data-codec-xml/src/test/resources/bug5396/xml/foo2.xml
yang/yang-data-codec-xml/src/test/resources/bug5396/xml/foo3.xml
yang/yang-data-codec-xml/src/test/resources/bug5396/xml/foo4.xml
yang/yang-data-codec-xml/src/test/resources/bug5396/xml/foo5.xml
yang/yang-data-codec-xml/src/test/resources/bug5396/xml/invalid-foo.xml
yang/yang-data-codec-xml/src/test/resources/bug5446/xml/foo.xml
yang/yang-data-codec-xml/src/test/resources/bug8083/xml/baz.xml
yang/yang-data-codec-xml/src/test/resources/bug8083/xml/foobar.xml
yang/yang-data-codec-xml/src/test/resources/bug8083/xml/zab.xml
yang/yang-data-codec-xml/src/test/resources/bug8675/foo-2.xml [new file with mode: 0644]
yang/yang-data-codec-xml/src/test/resources/bug8675/foo-3.xml [new file with mode: 0644]
yang/yang-data-codec-xml/src/test/resources/bug8675/foo-4.xml [new file with mode: 0644]
yang/yang-data-codec-xml/src/test/resources/bug8675/foo-5.xml [new file with mode: 0644]
yang/yang-data-codec-xml/src/test/resources/bug8675/foo-6.xml [new file with mode: 0644]
yang/yang-data-codec-xml/src/test/resources/bug8675/foo.xml [new file with mode: 0644]
yang/yang-data-codec-xml/src/test/resources/bug8675/foo.yang [new file with mode: 0644]
yang/yang-data-codec-xml/src/test/resources/foo.xml
yang/yang-data-codec-xml/src/test/resources/foobar.xml
yang/yang-data-codec-xml/src/test/resources/invalid-baz-2.xml
yang/yang-data-codec-xml/src/test/resources/invalid-baz-3.xml
yang/yang-data-codec-xml/src/test/resources/invalid-baz-4.xml
yang/yang-data-codec-xml/src/test/resources/invalid-baz.xml
yang/yang-data-codec-xml/src/test/resources/invalid-foo-2.xml
yang/yang-data-codec-xml/src/test/resources/invalid-foo-3.xml
yang/yang-data-codec-xml/src/test/resources/invalid-foo.xml
yang/yang-data-codec-xml/src/test/resources/schema/augment_choice_hell_ok.xml
yang/yang-data-codec-xml/src/test/resources/schema/augment_choice_hell_ok2.xml
yang/yang-data-codec-xml/src/test/resources/schema/augment_choice_hell_ok3.xml
yang/yang-data-codec-xml/src/test/resources/schema/simple.xml
yang/yang-data-codec-xml/src/test/resources/schema/simple2.xml
yang/yang-data-codec-xml/src/test/resources/schema/simple_xml_with_attributes.xml
yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/AbstractNodeDataWithSchema.java
yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/AnyXmlNodeDataWithSchema.java
yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/CompositeNodeDataWithSchema.java
yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/ContainerNodeDataWithSchema.java
yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/LeafListEntryNodeDataWithSchema.java
yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/LeafListNodeDataWithSchema.java
yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/LeafNodeDataWithSchema.java
yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/ListEntryNodeDataWithSchema.java
yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/ListNodeDataWithSchema.java
yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/SimpleNodeDataWithSchema.java
yang/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/YangModeledAnyXmlNodeDataWithSchema.java

index bb459fc9608ea7a730ab67b3cedf7de0ca76d8b0..5eb6782a543a5f3290adab5517fcfac72eee6866 100644 (file)
@@ -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());
index 16029d103b82eb7fca3f200d289c572abc38ebf8..82f99d5777719b3adddcb635c1fdd0824c6d8fa8 100644 (file)
@@ -1,21 +1,19 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<root xmlns="baz">
-    <baz>
-        <my-container-1>
-            <my-leaf-1>value1</my-leaf-1>
-        </my-container-1>
-        <my-container-2>
-            <inner-container>
-                <my-leaf-2>value2</my-leaf-2>
-            </inner-container>
-            <my-leaf-3>value3</my-leaf-3>
-        </my-container-2>
+<baz xmlns="baz">
+    <my-container-1>
+        <my-leaf-1>value1</my-leaf-1>
+    </my-container-1>
+    <my-container-2>
+        <inner-container>
+            <my-leaf-2>value2</my-leaf-2>
+        </inner-container>
+        <my-leaf-3>value3</my-leaf-3>
+    </my-container-2>
 
-        <my-anyxml-data>
-            <inner-container>
-                <my-leaf-2>any-xml-leaf-2-value</my-leaf-2>
-            </inner-container>
-            <my-leaf-3>any-xml-leaf-3-value</my-leaf-3>
-        </my-anyxml-data>
-    </baz>
-</root>
\ No newline at end of file
+    <my-anyxml-data>
+        <inner-container>
+            <my-leaf-2>any-xml-leaf-2-value</my-leaf-2>
+        </inner-container>
+        <my-leaf-3>any-xml-leaf-3-value</my-leaf-3>
+    </my-anyxml-data>
+</baz>
\ No newline at end of file
index 57bcafa7b0996e813c9822832d96c21bcffce5d1..1d2b1daa8491db88f890734946060f5a3777ba1d 100644 (file)
@@ -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<String> 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",
index bd94f56d63937ae7e617570fbd909f3042412ebe..938962e75e08324037c03cf7b1e7abfbcb70bbb1 100644 (file)
@@ -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());
index 70f3b4dc4929b8eabbf89a9ea01760898e7b2db4..c6cfe00cafb0c636362c91ba8109cbb6f3399636 100644 (file)
@@ -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);
index 48c14b72961078e34ac9377df8d028e01bb033d8..7d91be07580710b75a26c60a142b07e1140c0194 100644 (file)
@@ -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 (file)
index 0000000..86fa2f2
--- /dev/null
@@ -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);
+    }
+}
index 75e3e84a272d2823e58b452d34af571a0dc722ce..26268bdd2594fbcf6b2571bfdfe346adba47f5d8 100644 (file)
@@ -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);
index 59bb6fd1a0d8edce4fefdec2330e219bf53ac0c5..cc5b9e91d522599713d4491c0e22f26068d73144 100644 (file)
@@ -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);
 
index 16e2b4689dccde661e70ccfbcc7f4d70a419156b..0f701fb856a33e768aee32f946657dbfa96ab370 100644 (file)
@@ -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);
 
index a35922771c6fc8dd4c1d0db0223e5cd6fb5440b9..02dd9b44c74cb5ff24d232601bb6f4106df886a0 100644 (file)
@@ -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.");
index 44ca1382804ed962acc913bee21d970135b87ce2..fc062e46fa311141f74bb27895984e944c0f3d5e 100644 (file)
@@ -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<DataContainerChild<? extends PathArgument, ?>> value = ((ContainerNode) output).getValue();
+        Collection<DataContainerChild<? extends PathArgument, ?>> value = yangModeledAnyXmlNode.getValue();
         assertEquals(2, value.size());
 
-        Optional<DataContainerChild<? extends PathArgument, ?>> child = ((ContainerNode) output)
+        Optional<DataContainerChild<? extends PathArgument, ?>> 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<DataContainerChild<? extends PathArgument, ?>> 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);
index be7006f3e05101441071e812f3d03155c4faf54c..98e2a6c4d9044646eaccc10d2947b1160522a8c1 100644 (file)
@@ -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);
index 16029d103b82eb7fca3f200d289c572abc38ebf8..82f99d5777719b3adddcb635c1fdd0824c6d8fa8 100644 (file)
@@ -1,21 +1,19 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<root xmlns="baz">
-    <baz>
-        <my-container-1>
-            <my-leaf-1>value1</my-leaf-1>
-        </my-container-1>
-        <my-container-2>
-            <inner-container>
-                <my-leaf-2>value2</my-leaf-2>
-            </inner-container>
-            <my-leaf-3>value3</my-leaf-3>
-        </my-container-2>
+<baz xmlns="baz">
+    <my-container-1>
+        <my-leaf-1>value1</my-leaf-1>
+    </my-container-1>
+    <my-container-2>
+        <inner-container>
+            <my-leaf-2>value2</my-leaf-2>
+        </inner-container>
+        <my-leaf-3>value3</my-leaf-3>
+    </my-container-2>
 
-        <my-anyxml-data>
-            <inner-container>
-                <my-leaf-2>any-xml-leaf-2-value</my-leaf-2>
-            </inner-container>
-            <my-leaf-3>any-xml-leaf-3-value</my-leaf-3>
-        </my-anyxml-data>
-    </baz>
-</root>
\ No newline at end of file
+    <my-anyxml-data>
+        <inner-container>
+            <my-leaf-2>any-xml-leaf-2-value</my-leaf-2>
+        </inner-container>
+        <my-leaf-3>any-xml-leaf-3-value</my-leaf-3>
+    </my-anyxml-data>
+</baz>
\ No newline at end of file
index 263768648e6d47cb8f89a7d35bd6e6d9ffbc1bc0..2bf7dbed3be43e8ede28585ec680f835aed672eb 100644 (file)
@@ -1,10 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
-
-<root xmlns="bar">
+<my-anyxml-data xmlns="bar">
     <my-container-1>
         <my-leaf-1>value1</my-leaf-1>
     </my-container-1>
     <my-container-2>
         <my-leaf-2>value2</my-leaf-2>
     </my-container-2>
-</root>
\ No newline at end of file
+</my-anyxml-data>
\ No newline at end of file
index 2492e954c7eb8decac40d70e92b1bab5c3d9bda0..6f1385476c1e8974cd025f55cb2edf575e6311e9 100644 (file)
@@ -1,19 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<foo xmlns="foo">
-    <my-container-1>
-        <my-leaf-1>value1</my-leaf-1>
-    </my-container-1>
-    <my-container-2>
-        <inner-container>
-            <my-leaf-2>value2</my-leaf-2>
-        </inner-container>
-        <my-leaf-3>value3</my-leaf-3>
-    </my-container-2>
-
-    <my-anyxml-data>
-        <inner-container>
-            <my-leaf-2>any-xml-leaf-2-value</my-leaf-2>
-        </inner-container>
-        <my-leaf-3>any-xml-leaf-3-value</my-leaf-3>
-    </my-anyxml-data>
-</foo>
\ No newline at end of file
+<my-anyxml-data xmlns="foo">
+    <inner-container>
+        <my-leaf-2>any-xml-leaf-2-value</my-leaf-2>
+    </inner-container>
+    <my-leaf-3>any-xml-leaf-3-value</my-leaf-3>
+</my-anyxml-data>
\ No newline at end of file
index 48f4510bcaf9a1ec7df27018f4653d217dcba55b..3752c03c759a8110c8c053d991dee04148610f14 100644 (file)
@@ -1,40 +1,38 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<root xmlns="baz-namespace">
-    <outer-container>
-        <my-container-1>
-            <my-keyed-list>
-                <my-key-leaf>listkeyvalue1</my-key-leaf>
-                <my-leaf-in-list-1>listleafvalue1</my-leaf-in-list-1>
-                <my-leaf-in-list-2>listleafvalue2</my-leaf-in-list-2>
-            </my-keyed-list>
+<outer-container xmlns="baz-namespace">
+    <my-container-1>
+        <my-keyed-list>
+            <my-key-leaf>listkeyvalue1</my-key-leaf>
+            <my-leaf-in-list-1>listleafvalue1</my-leaf-in-list-1>
+            <my-leaf-in-list-2>listleafvalue2</my-leaf-in-list-2>
+        </my-keyed-list>
 
-            <my-keyed-list>
-                <my-key-leaf>listkeyvalue2</my-key-leaf>
-                <my-leaf-in-list-1>listleafvalue12</my-leaf-in-list-1>
-                <my-leaf-in-list-2>listleafvalue22</my-leaf-in-list-2>
-            </my-keyed-list>
+        <my-keyed-list>
+            <my-key-leaf>listkeyvalue2</my-key-leaf>
+            <my-leaf-in-list-1>listleafvalue12</my-leaf-in-list-1>
+            <my-leaf-in-list-2>listleafvalue22</my-leaf-in-list-2>
+        </my-keyed-list>
 
-            <my-leaf-1>value1</my-leaf-1>
+        <my-leaf-1>value1</my-leaf-1>
 
-            <my-leaf-list>lflvalue1</my-leaf-list>
-            <my-leaf-list>lflvalue2</my-leaf-list>
-        </my-container-1>
+        <my-leaf-list>lflvalue1</my-leaf-list>
+        <my-leaf-list>lflvalue2</my-leaf-list>
+    </my-container-1>
 
-        <my-container-2>
-            <inner-container>
-                <my-leaf-2>value2</my-leaf-2>
-            </inner-container>
-            <my-leaf-3>value3</my-leaf-3>
-            <my-leaf-in-case-2>case2value</my-leaf-in-case-2>
-        </my-container-2>
+    <my-container-2>
+        <inner-container>
+            <my-leaf-2>value2</my-leaf-2>
+        </inner-container>
+        <my-leaf-3>value3</my-leaf-3>
+        <my-leaf-in-case-2>case2value</my-leaf-in-case-2>
+    </my-container-2>
 
-        <my-container-3>
-            <my-doubly-keyed-list>
-                <my-first-key-leaf>listkeyvalue1</my-first-key-leaf>
-                <my-second-key-leaf>listkeyvalue2</my-second-key-leaf>
-                <my-leaf-in-list-3>listleafvalue1</my-leaf-in-list-3>
-            </my-doubly-keyed-list>
-        </my-container-3>
-    </outer-container>
-</root>
+    <my-container-3>
+        <my-doubly-keyed-list>
+            <my-first-key-leaf>listkeyvalue1</my-first-key-leaf>
+            <my-second-key-leaf>listkeyvalue2</my-second-key-leaf>
+            <my-leaf-in-list-3>listleafvalue1</my-leaf-in-list-3>
+        </my-doubly-keyed-list>
+    </my-container-3>
+</outer-container>
index 26fe22204b1233f9a493adb3496a4edeeaa50c40..744500bf45b59a1b488e805974bf47668b8ddfdc 100644 (file)
@@ -1,6 +1,4 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<foo xmlns="foo">
-    <root>
-        <my-leaf>dp1o34</my-leaf>
-    </root>
-</foo>
\ No newline at end of file
+<root xmlns="foo">
+    <my-leaf>dp1o34</my-leaf>
+</root>
\ No newline at end of file
index 72b9185feed8a214a61e55dee1da43bb0b85f970..90dd30224091dd5ca00638eb8d0cd7df7b7565f4 100644 (file)
@@ -1,6 +1,4 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<foo xmlns="foo">
-    <root>
-        <my-leaf>dp0s3f9</my-leaf>
-    </root>
-</foo>
\ No newline at end of file
+<root xmlns="foo">
+    <my-leaf>dp0s3f9</my-leaf>
+</root>
\ No newline at end of file
index c18e3cc30be1dabdca678f9b0fc5f5d36d0cb307..507b6549e4d3f90d07dfa18dbef7c5c55a13a287 100644 (file)
@@ -1,6 +1,4 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<foo xmlns="foo">
-    <root>
-        <my-leaf>dp09P1p2s3</my-leaf>
-    </root>
-</foo>
\ No newline at end of file
+<root xmlns="foo">
+    <my-leaf>dp09P1p2s3</my-leaf>
+</root>
\ No newline at end of file
index 154a11489b107e2e5a006bfd1911afac04001e81..b9ee3fa89f6a3d1c79343b5da0a1831ffc20b115 100644 (file)
@@ -1,6 +1,4 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<foo xmlns="foo">
-    <root>
-        <my-leaf>dp0p3p1</my-leaf>
-    </root>
-</foo>
\ No newline at end of file
+<root xmlns="foo">
+    <my-leaf>dp0p3p1</my-leaf>
+</root>
\ No newline at end of file
index 7a5ce58cd3d4e542a7233880498911418c3b8c54..e69616a3e3932f6a7a66979d8bc8546473b1d052 100644 (file)
@@ -1,6 +1,4 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<foo xmlns="foo">
-    <root>
-        <my-leaf>dp0s3</my-leaf>
-    </root>
-</foo>
\ No newline at end of file
+<root xmlns="foo">
+    <my-leaf>dp0s3</my-leaf>
+</root>
\ No newline at end of file
index cf86806066b36ed04b93cb07f8ddba9f9d682e7b..aeed2f6b25da6358abea8db7ee5291f2f5b5cd21 100644 (file)
@@ -1,6 +1,4 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<foo xmlns="foo">
-    <root>
-        <my-leaf>dp09P1p2s1234</my-leaf>
-    </root>
-</foo>
\ No newline at end of file
+<root xmlns="foo">
+    <my-leaf>dp09P1p2s1234</my-leaf>
+</root>
\ No newline at end of file
index b9b8abf95cfe24b75832df51a058edad5389676a..142ed140573bd90e0fe423b492c78919eefe5e47 100644 (file)
@@ -1,6 +1,4 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<foo xmlns="foo">
-    <root>
-        <ip-address>fwAAAQ==</ip-address>
-    </root>
-</foo>
\ No newline at end of file
+<root xmlns="foo">
+    <ip-address>fwAAAQ==</ip-address>
+</root>
\ No newline at end of file
index 43f669b833fcde5e41d6110956cf4a50f5324ccd..eff39ace1f6c60a1531b874cb49570d3a9552512 100644 (file)
@@ -1,12 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<root xmlns="baz-ns">
-    <top-cont>
-        <keyed-list>
-            <empty-key-leaf/>
-            <regular-leaf>150</regular-leaf>
-        </keyed-list>
+<top-cont xmlns="baz-ns">
+    <keyed-list>
+        <empty-key-leaf/>
+        <regular-leaf>150</regular-leaf>
+    </keyed-list>
 
-        <iid-leaf xmlns:baz="baz-ns">/baz:top-cont/baz:keyed-list[baz:empty-key-leaf='']/baz:regular-leaf</iid-leaf>
-    </top-cont>
-</root>
\ No newline at end of file
+    <iid-leaf xmlns:baz="baz-ns">/baz:top-cont/baz:keyed-list[baz:empty-key-leaf='']/baz:regular-leaf</iid-leaf>
+</top-cont>
\ No newline at end of file
index 352c0aff6c841a3321d6e715204e75110fefe7af..c317acd4596bba400d0aef913403d4abe66634c0 100644 (file)
@@ -1,14 +1,12 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<root xmlns="foobar-ns">
-    <top-cont>
-        <keyed-list>
-            <iid-key-leaf xmlns:foobar="foobar-ns">/foobar:top-cont/foobar:leaf-b</iid-key-leaf>
-            <regular-leaf>150</regular-leaf>
-        </keyed-list>
+<top-cont xmlns="foobar-ns">
+    <keyed-list>
+        <iid-key-leaf xmlns:foobar="foobar-ns">/foobar:top-cont/foobar:leaf-b</iid-key-leaf>
+        <regular-leaf>150</regular-leaf>
+    </keyed-list>
 
-        <iid-leaf xmlns:foobar="foobar-ns">
-            /foobar:top-cont/foobar:keyed-list[foobar:iid-key-leaf='/foobar:top-cont/foobar:leaf-b']/foobar:regular-leaf</iid-leaf>
-        <leaf-b>50</leaf-b>
-    </top-cont>
-</root>
\ No newline at end of file
+    <iid-leaf xmlns:foobar="foobar-ns">
+        /foobar:top-cont/foobar:keyed-list[foobar:iid-key-leaf='/foobar:top-cont/foobar:leaf-b']/foobar:regular-leaf</iid-leaf>
+    <leaf-b>50</leaf-b>
+</top-cont>
\ No newline at end of file
index 1b4de0d58ab37a37a84481683f27d115c6fd4a12..3d312186dfb63f816892e098771f6a5d9e344327 100644 (file)
@@ -1,13 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<root xmlns="zab-ns">
-    <top-cont>
-        <keyed-list>
-            <identityref-key-leaf>derived-id</identityref-key-leaf>
-            <regular-leaf>150</regular-leaf>
-        </keyed-list>
+<top-cont xmlns="zab-ns">
+    <keyed-list>
+        <identityref-key-leaf>derived-id</identityref-key-leaf>
+        <regular-leaf>150</regular-leaf>
+    </keyed-list>
 
-        <iid-leaf xmlns:zab="zab-ns">
-            /zab:top-cont/zab:keyed-list[zab:identityref-key-leaf='derived-id']/zab:regular-leaf</iid-leaf>
-    </top-cont>
-</root>
\ No newline at end of file
+    <iid-leaf xmlns:zab="zab-ns">
+        /zab:top-cont/zab:keyed-list[zab:identityref-key-leaf='derived-id']/zab:regular-leaf</iid-leaf>
+</top-cont>
\ 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 (file)
index 0000000..5859bad
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<top-level-container xmlns="foo">
+</top-level-container>
\ 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 (file)
index 0000000..fd71a36
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<top-level-list xmlns="foo">
+    <key-leaf>key-value</key-leaf>
+    <ordinary-leaf>leaf-value</ordinary-leaf>
+    <cont-in-list></cont-in-list>
+    <inner-list>
+        <inner-key-leaf>inner-key-value</inner-key-leaf>
+        <inner-ordinary-leaf>inner-leaf-value</inner-ordinary-leaf>
+    </inner-list>
+</top-level-list>
\ 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 (file)
index 0000000..fad3721
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<top-level-anyxml xmlns="foo">
+    <data>data-value</data>
+</top-level-anyxml>
\ 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 (file)
index 0000000..648cffe
--- /dev/null
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<top-level-leaf xmlns="foo">100</top-level-leaf>
\ 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 (file)
index 0000000..5389603
--- /dev/null
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<top-level-leaf-list xmlns="foo">100</top-level-leaf-list>
\ 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 (file)
index 0000000..41d8802
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<top-level-container xmlns="foo">
+    <inner-container-1></inner-container-1><inner-container-2></inner-container-2>
+</top-level-container>
\ 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 (file)
index 0000000..06ff0eb
--- /dev/null
@@ -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
index e363dd88fdd0dd105c1b49b7947810d0f066d99a..0d84ace385ec28b3aa4c0c8be4570d47b8f32b5b 100644 (file)
@@ -1,19 +1,17 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<root xmlns="foo-namespace">
-    <parent-container>
-        <leaf-container>
-            <union-identityref-leaf xmlns:prefix="foo-namespace">prefix:ident-one</union-identityref-leaf>
-            <int32-leaf>1500</int32-leaf>
-            <decimal64-leaf>150.45</decimal64-leaf>
-            <string-leaf>hello world</string-leaf>
-            <leafref-leaf>hello world</leafref-leaf>
-            <empty-leaf/>
-            <boolean-leaf>true</boolean-leaf>
-            <enum-leaf>five</enum-leaf>
-        </leaf-container>
-        <anyxml-container>
-            <my-anyxml><my-element><my-sub-element>sub-element value</my-sub-element></my-element></my-anyxml>
-        </anyxml-container>
-    </parent-container>
-</root>
+<parent-container xmlns="foo-namespace">
+    <leaf-container>
+        <union-identityref-leaf xmlns:prefix="foo-namespace">prefix:ident-one</union-identityref-leaf>
+        <int32-leaf>1500</int32-leaf>
+        <decimal64-leaf>150.45</decimal64-leaf>
+        <string-leaf>hello world</string-leaf>
+        <leafref-leaf>hello world</leafref-leaf>
+        <empty-leaf/>
+        <boolean-leaf>true</boolean-leaf>
+        <enum-leaf>five</enum-leaf>
+    </leaf-container>
+    <anyxml-container>
+        <my-anyxml><my-element><my-sub-element>sub-element value</my-sub-element></my-element></my-anyxml>
+    </anyxml-container>
+</parent-container>
index b4aebfed7c686316f47f8f32be9fd35d269fd597..5d65738f3935e86789b5345acd19e9f9b79e940f 100644 (file)
@@ -1,59 +1,57 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<root xmlns="foobar-namespace">
-    <outer-container>
-        <my-container-1>
-            <my-keyed-list>
-                <my-key-leaf>listkeyvalue1</my-key-leaf>
-                <my-leaf-in-list-1>listleafvalue1</my-leaf-in-list-1>
-                <my-leaf-in-list-2>listleafvalue2</my-leaf-in-list-2>
-            </my-keyed-list>
-
-            <my-keyed-list>
-                <my-key-leaf>listkeyvalue2</my-key-leaf>
-                <my-leaf-in-list-1>listleafvalue12</my-leaf-in-list-1>
-                <my-leaf-in-list-2>listleafvalue22</my-leaf-in-list-2>
-            </my-keyed-list>
-
-            <my-ordered-list>
-                <my-key-leaf-in-ordered-list>olistkeyvalue1</my-key-leaf-in-ordered-list>
-                <my-leaf-in-ordered-list-1>olistleafvalue1</my-leaf-in-ordered-list-1>
-                <my-leaf-in-ordered-list-2>olistleafvalue2</my-leaf-in-ordered-list-2>
-            </my-ordered-list>
-
-            <my-ordered-list>
-                <my-key-leaf-in-ordered-list>olistkeyvalue2</my-key-leaf-in-ordered-list>
-                <my-leaf-in-ordered-list-1>olistleafvalue12</my-leaf-in-ordered-list-1>
-                <my-leaf-in-ordered-list-2>olistleafvalue22</my-leaf-in-ordered-list-2>
-            </my-ordered-list>
-
-            <my-unkeyed-list>
-                <my-leaf-in-unkeyed-list>foo</my-leaf-in-unkeyed-list>
-            </my-unkeyed-list>
-
-            <my-leaf-1>value1</my-leaf-1>
-
-            <my-leaf-list>lflvalue1</my-leaf-list>
-            <my-leaf-list>lflvalue2</my-leaf-list>
-
-            <my-ordered-leaf-list>olflvalue1</my-ordered-leaf-list>
-            <my-ordered-leaf-list>olflvalue2</my-ordered-leaf-list>
-        </my-container-1>
-
-        <my-container-2>
-            <inner-container>
-                <my-leaf-2>value2</my-leaf-2>
-            </inner-container>
-            <my-leaf-3>value3</my-leaf-3>
-            <my-leaf-in-case-2>case2value</my-leaf-in-case-2>
-        </my-container-2>
-
-        <my-container-3>
-            <my-doubly-keyed-list>
-                <my-first-key-leaf>listkeyvalue1</my-first-key-leaf>
-                <my-second-key-leaf>listkeyvalue2</my-second-key-leaf>
-                <my-leaf-in-list-3>listleafvalue1</my-leaf-in-list-3>
-            </my-doubly-keyed-list>
-        </my-container-3>
-    </outer-container>
-</root>
\ No newline at end of file
+<outer-container xmlns="foobar-namespace">
+    <my-container-1>
+        <my-keyed-list>
+            <my-key-leaf>listkeyvalue1</my-key-leaf>
+            <my-leaf-in-list-1>listleafvalue1</my-leaf-in-list-1>
+            <my-leaf-in-list-2>listleafvalue2</my-leaf-in-list-2>
+        </my-keyed-list>
+
+        <my-keyed-list>
+            <my-key-leaf>listkeyvalue2</my-key-leaf>
+            <my-leaf-in-list-1>listleafvalue12</my-leaf-in-list-1>
+            <my-leaf-in-list-2>listleafvalue22</my-leaf-in-list-2>
+        </my-keyed-list>
+
+        <my-ordered-list>
+            <my-key-leaf-in-ordered-list>olistkeyvalue1</my-key-leaf-in-ordered-list>
+            <my-leaf-in-ordered-list-1>olistleafvalue1</my-leaf-in-ordered-list-1>
+            <my-leaf-in-ordered-list-2>olistleafvalue2</my-leaf-in-ordered-list-2>
+        </my-ordered-list>
+
+        <my-ordered-list>
+            <my-key-leaf-in-ordered-list>olistkeyvalue2</my-key-leaf-in-ordered-list>
+            <my-leaf-in-ordered-list-1>olistleafvalue12</my-leaf-in-ordered-list-1>
+            <my-leaf-in-ordered-list-2>olistleafvalue22</my-leaf-in-ordered-list-2>
+        </my-ordered-list>
+
+        <my-unkeyed-list>
+            <my-leaf-in-unkeyed-list>foo</my-leaf-in-unkeyed-list>
+        </my-unkeyed-list>
+
+        <my-leaf-1>value1</my-leaf-1>
+
+        <my-leaf-list>lflvalue1</my-leaf-list>
+        <my-leaf-list>lflvalue2</my-leaf-list>
+
+        <my-ordered-leaf-list>olflvalue1</my-ordered-leaf-list>
+        <my-ordered-leaf-list>olflvalue2</my-ordered-leaf-list>
+    </my-container-1>
+
+    <my-container-2>
+        <inner-container>
+            <my-leaf-2>value2</my-leaf-2>
+        </inner-container>
+        <my-leaf-3>value3</my-leaf-3>
+        <my-leaf-in-case-2>case2value</my-leaf-in-case-2>
+    </my-container-2>
+
+    <my-container-3>
+        <my-doubly-keyed-list>
+            <my-first-key-leaf>listkeyvalue1</my-first-key-leaf>
+            <my-second-key-leaf>listkeyvalue2</my-second-key-leaf>
+            <my-leaf-in-list-3>listleafvalue1</my-leaf-in-list-3>
+        </my-doubly-keyed-list>
+    </my-container-3>
+</outer-container>
\ No newline at end of file
index ef9fc35414c782ee4dc9402b6a43279e82223b62..ae7b62c0f3796c598859585741ad77ed11ade720 100644 (file)
@@ -1,40 +1,38 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<root xmlns="baz-namespace">
-    <outer-container>
-        <my-container-1>
-            <my-keyed-list>
-                <my-key-leaf>listkeyvalue1</my-key-leaf>
-                <my-leaf-in-list-1>listleafvalue1</my-leaf-in-list-1>
-                <my-leaf-in-list-2>listleafvalue2</my-leaf-in-list-2>
-            </my-keyed-list>
+<outer-container xmlns="baz-namespace">
+    <my-container-1>
+        <my-keyed-list>
+            <my-key-leaf>listkeyvalue1</my-key-leaf>
+            <my-leaf-in-list-1>listleafvalue1</my-leaf-in-list-1>
+            <my-leaf-in-list-2>listleafvalue2</my-leaf-in-list-2>
+        </my-keyed-list>
 
-            <my-keyed-list>
-                <my-key-leaf>listkeyvalue2</my-key-leaf>
-                <my-leaf-in-list-1>listleafvalue12</my-leaf-in-list-1>
-                <my-leaf-in-list-2>listleafvalue22</my-leaf-in-list-2>
-            </my-keyed-list>
+        <my-keyed-list>
+            <my-key-leaf>listkeyvalue2</my-key-leaf>
+            <my-leaf-in-list-1>listleafvalue12</my-leaf-in-list-1>
+            <my-leaf-in-list-2>listleafvalue22</my-leaf-in-list-2>
+        </my-keyed-list>
 
-            <my-leaf-1>value1</invalid-my-leaf-1>
+        <my-leaf-1>value1</invalid-my-leaf-1>
 
-            <my-leaf-list>lflvalue1</my-leaf-list>
-            <my-leaf-list>lflvalue2</my-leaf-list>
-        </my-container-1>
+        <my-leaf-list>lflvalue1</my-leaf-list>
+        <my-leaf-list>lflvalue2</my-leaf-list>
+    </my-container-1>
 
-        <my-container-2>
-            <inner-container>
-                <my-leaf-2>value2</my-leaf-2>
-            </inner-container>
-            <my-leaf-3>value3</my-leaf-3>
-            <my-leaf-in-case-2>case2value</my-leaf-in-case-2>
-        </my-container-2>
+    <my-container-2>
+        <inner-container>
+            <my-leaf-2>value2</my-leaf-2>
+        </inner-container>
+        <my-leaf-3>value3</my-leaf-3>
+        <my-leaf-in-case-2>case2value</my-leaf-in-case-2>
+    </my-container-2>
 
-        <my-container-3>
-            <my-doubly-keyed-list>
-                <my-first-key-leaf>listkeyvalue1</my-first-key-leaf>
-                <my-second-key-leaf>listkeyvalue2</my-second-key-leaf>
-                <my-leaf-in-list-3>listleafvalue3</my-leaf-in-list-3>
-            </my-doubly-keyed-list>
-        </my-container-3>
-    </outer-container>
-</root>
\ No newline at end of file
+    <my-container-3>
+        <my-doubly-keyed-list>
+            <my-first-key-leaf>listkeyvalue1</my-first-key-leaf>
+            <my-second-key-leaf>listkeyvalue2</my-second-key-leaf>
+            <my-leaf-in-list-3>listleafvalue3</my-leaf-in-list-3>
+        </my-doubly-keyed-list>
+    </my-container-3>
+</outer-container>
\ No newline at end of file
index 2219b1b2a4ef95cb51a055f2ce909c2c5aa39149..6b280b14518ff4cdfaefcdf4bd14a123b25fc6e9 100644 (file)
@@ -1,40 +1,38 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<root xmlns="baz-namespace">
-    <outer-container>
-        <my-container-1>
-            <my-keyed-list>
-                <my-key-leaf>listkeyvalue1</my-key-leaf>
-                <my-leaf-in-list-1>listleafvalue1</my-leaf-in-list-1>
-                <my-leaf-in-list-2>listleafvalue2</my-leaf-in-list-2>
-            </my-keyed-list>
+<outer-container xmlns="baz-namespace">
+    <my-container-1>
+        <my-keyed-list>
+            <my-key-leaf>listkeyvalue1</my-key-leaf>
+            <my-leaf-in-list-1>listleafvalue1</my-leaf-in-list-1>
+            <my-leaf-in-list-2>listleafvalue2</my-leaf-in-list-2>
+        </my-keyed-list>
 
-            <my-keyed-list>
-                <my-key-leaf>listkeyvalue2</my-key-leaf>
-                <my-leaf-in-list-1>listleafvalue12</my-leaf-in-list-1>
-                <my-leaf-in-list-2>listleafvalue22</my-leaf-in-list-2>
-            </my-keyed-list>
+        <my-keyed-list>
+            <my-key-leaf>listkeyvalue2</my-key-leaf>
+            <my-leaf-in-list-1>listleafvalue12</my-leaf-in-list-1>
+            <my-leaf-in-list-2>listleafvalue22</my-leaf-in-list-2>
+        </my-keyed-list>
 
-            <my-leaf-1>value1</my-leaf-1>
+        <my-leaf-1>value1</my-leaf-1>
 
-            <my-leaf-list>lflvalue1</my-leaf-list>
-            <my-leaf-list>lflvalue2</my-leaf-list>
-        <my-container-1>
+        <my-leaf-list>lflvalue1</my-leaf-list>
+        <my-leaf-list>lflvalue2</my-leaf-list>
+    <my-container-1>
 
-        <my-container-2>
-            <inner-container>
-                <my-leaf-2>value2</my-leaf-2>
-            </inner-container>
-            <my-leaf-3>value3</my-leaf-3>
-            <my-leaf-in-case-2>case2value</my-leaf-in-case-2>
-        </my-container-2>
+    <my-container-2>
+        <inner-container>
+            <my-leaf-2>value2</my-leaf-2>
+        </inner-container>
+        <my-leaf-3>value3</my-leaf-3>
+        <my-leaf-in-case-2>case2value</my-leaf-in-case-2>
+    </my-container-2>
 
-        <my-container-3>
-            <my-doubly-keyed-list>
-                <my-first-key-leaf>listkeyvalue1</my-first-key-leaf>
-                <my-second-key-leaf>listkeyvalue2</my-second-key-leaf>
-                <my-leaf-in-list-3>listleafvalue3</my-leaf-in-list-3>
-            </my-doubly-keyed-list>
-        </my-container-3>
-    </outer-container>
-</root>
\ No newline at end of file
+    <my-container-3>
+        <my-doubly-keyed-list>
+            <my-first-key-leaf>listkeyvalue1</my-first-key-leaf>
+            <my-second-key-leaf>listkeyvalue2</my-second-key-leaf>
+            <my-leaf-in-list-3>listleafvalue3</my-leaf-in-list-3>
+        </my-doubly-keyed-list>
+    </my-container-3>
+</outer-container>
\ No newline at end of file
index f4eae6f2e5c3ae1e923b83714a66239fc31a73f4..5b50fbd6cdabc4a7f67dfbddfc179b7b6fde6853 100644 (file)
@@ -1,40 +1,38 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<root xmlns="baz-namespace">
-    <outer-container>
-        <my-container-1>
-            <my-keyed-list>
-                <my-key-leaf>listkeyvalue1</my-key-leaf>
-                <my-leaf-in-list-1>listleafvalue1</my-leaf-in-list-1>
-                <my-leaf-in-list-2>listleafvalue2</my-leaf-in-list-2>
-            </my-keyed-list>
+<outer-container xmlns="baz-namespace">
+    <my-container-1>
+        <my-keyed-list>
+            <my-key-leaf>listkeyvalue1</my-key-leaf>
+            <my-leaf-in-list-1>listleafvalue1</my-leaf-in-list-1>
+            <my-leaf-in-list-2>listleafvalue2</my-leaf-in-list-2>
+        </my-keyed-list>
 
-            <my-keyed-list>
-                <my-key-leaf>listkeyvalue2</my-key-leaf>
-                <my-leaf-in-list-1>listleafvalue12</my-leaf-in-list-1>
-                <my-leaf-in-list-2>listleafvalue22</my-leaf-in-list-2>
-            </my-keyed-list>
+        <my-keyed-list>
+            <my-key-leaf>listkeyvalue2</my-key-leaf>
+            <my-leaf-in-list-1>listleafvalue12</my-leaf-in-list-1>
+            <my-leaf-in-list-2>listleafvalue22</my-leaf-in-list-2>
+        </my-keyed-list>
 
-            <my-leaf-1>value1</my-leaf-1>
+        <my-leaf-1>value1</my-leaf-1>
 
-            <my-leaf-list>lflvalue1</my-leaf-list>
-            <my-leaf-list>lflvalue2</my-leaf-list>
-        </invalid-my-container-1>
+        <my-leaf-list>lflvalue1</my-leaf-list>
+        <my-leaf-list>lflvalue2</my-leaf-list>
+    </invalid-my-container-1>
 
-        <my-container-2>
-            <inner-container>
-                <my-leaf-2>value2</my-leaf-2>
-            </inner-container>
-            <my-leaf-3>value3</my-leaf-3>
-            <my-leaf-in-case-2>case2value</my-leaf-in-case-2>
-        </my-container-2>
+    <my-container-2>
+        <inner-container>
+            <my-leaf-2>value2</my-leaf-2>
+        </inner-container>
+        <my-leaf-3>value3</my-leaf-3>
+        <my-leaf-in-case-2>case2value</my-leaf-in-case-2>
+    </my-container-2>
 
-        <my-container-3>
-            <my-doubly-keyed-list>
-                <my-first-key-leaf>listkeyvalue1</my-first-key-leaf>
-                <my-second-key-leaf>listkeyvalue2</my-second-key-leaf>
-                <my-leaf-in-list-3>listleafvalue3</my-leaf-in-list-3>
-            </my-doubly-keyed-list>
-        </my-container-3>
-    </outer-container>
-</root>
\ No newline at end of file
+    <my-container-3>
+        <my-doubly-keyed-list>
+            <my-first-key-leaf>listkeyvalue1</my-first-key-leaf>
+            <my-second-key-leaf>listkeyvalue2</my-second-key-leaf>
+            <my-leaf-in-list-3>listleafvalue3</my-leaf-in-list-3>
+        </my-doubly-keyed-list>
+    </my-container-3>
+</outer-container>
\ No newline at end of file
index 51da202271611433bedc361218506b79b1549a7b..5ec778144e2dd5d49eeae784022c8edb5301ad8e 100644 (file)
@@ -1,40 +1,38 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<root xmlns="baz-namespace">
-    <outer-container>
-        <my-container-1>
-            <my-keyed-list>
-                <my-key-leaf>listkeyvalue1</my-key-leaf>
-                <my-leaf-in-list-1>listleafvalue1</my-leaf-in-list-1>
-                <my-leaf-in-list-2>listleafvalue2</my-leaf-in-list-2>
-            </my-keyed-list>
+<outer-container xmlns="baz-namespace">
+    <my-container-1>
+        <my-keyed-list>
+            <my-key-leaf>listkeyvalue1</my-key-leaf>
+            <my-leaf-in-list-1>listleafvalue1</my-leaf-in-list-1>
+            <my-leaf-in-list-2>listleafvalue2</my-leaf-in-list-2>
+        </my-keyed-list>
 
-            <my-keyed-list>
-                <my-key-leaf>listkeyvalue2</my-key-leaf>
-                <my-leaf-in-list-1>listleafvalue12</my-leaf-in-list-1>
-                <my-leaf-in-list-2>listleafvalue22</my-leaf-in-list-2>
-            </my-keyed-list>
+        <my-keyed-list>
+            <my-key-leaf>listkeyvalue2</my-key-leaf>
+            <my-leaf-in-list-1>listleafvalue12</my-leaf-in-list-1>
+            <my-leaf-in-list-2>listleafvalue22</my-leaf-in-list-2>
+        </my-keyed-list>
 
-            <my-leaf-1>value1<my-leaf-1>
+        <my-leaf-1>value1<my-leaf-1>
 
-            <my-leaf-list>lflvalue1</my-leaf-list>
-            <my-leaf-list>lflvalue2</my-leaf-list>
-        </my-container-1>
+        <my-leaf-list>lflvalue1</my-leaf-list>
+        <my-leaf-list>lflvalue2</my-leaf-list>
+    </my-container-1>
 
-        <my-container-2>
-            <inner-container>
-                <my-leaf-2>value2</my-leaf-2>
-            </inner-container>
-            <my-leaf-3>value3</my-leaf-3>
-            <my-leaf-in-case-2>case2value</my-leaf-in-case-2>
-        </my-container-2>
+    <my-container-2>
+        <inner-container>
+            <my-leaf-2>value2</my-leaf-2>
+        </inner-container>
+        <my-leaf-3>value3</my-leaf-3>
+        <my-leaf-in-case-2>case2value</my-leaf-in-case-2>
+    </my-container-2>
 
-        <my-container-3>
-            <my-doubly-keyed-list>
-                <my-first-key-leaf>listkeyvalue1</my-first-key-leaf>
-                <my-second-key-leaf>listkeyvalue2</my-second-key-leaf>
-                <my-leaf-in-list-3>listleafvalue3</my-leaf-in-list-3>
-            </my-doubly-keyed-list>
-        </my-container-3>
-    </outer-container>
-</root>
\ No newline at end of file
+    <my-container-3>
+        <my-doubly-keyed-list>
+            <my-first-key-leaf>listkeyvalue1</my-first-key-leaf>
+            <my-second-key-leaf>listkeyvalue2</my-second-key-leaf>
+            <my-leaf-in-list-3>listleafvalue3</my-leaf-in-list-3>
+        </my-doubly-keyed-list>
+    </my-container-3>
+</outer-container>
\ No newline at end of file
index 69deaae02d436330c1ce934d56e1c62fc190940c..84ce5c554302ab94c4e50d7d891b089d79b8e946 100644 (file)
@@ -1,27 +1,25 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<root xmlns="foo-namespace">
-    <parent-container>
-        <leaf-container>
-            <int32-leaf>1500</int32-leaf>
-            <decimal64-leaf>150.45</decimal64-leaf>
-            <string-leaf>hello world</string-leaf>
-            <leafref-leaf>hello world</leafref-leaf>
-            <empty-leaf/>
-            <boolean-leaf>true</boolean-leaf>
-            <enum-leaf>five</enum-leaf>
-        </leaf-container>
-        <anyxml-container>
-            <my-anyxml>
-                <my-element>
-                    <my-sub-element>sub-element value</my-sub-element>
-                </my-element>
-            </my-anyxml>
-            <my-anyxml>
-                <my-element-2>
-                    <my-sub-element-2>sub-element value 2</my-sub-element-2>
-                </my-element-2>
-            </my-anyxml>
-        </anyxml-container>
-    </parent-container>
-</root>
\ No newline at end of file
+<parent-container xmlns="foo-namespace">
+    <leaf-container>
+        <int32-leaf>1500</int32-leaf>
+        <decimal64-leaf>150.45</decimal64-leaf>
+        <string-leaf>hello world</string-leaf>
+        <leafref-leaf>hello world</leafref-leaf>
+        <empty-leaf/>
+        <boolean-leaf>true</boolean-leaf>
+        <enum-leaf>five</enum-leaf>
+    </leaf-container>
+    <anyxml-container>
+        <my-anyxml>
+            <my-element>
+                <my-sub-element>sub-element value</my-sub-element>
+            </my-element>
+        </my-anyxml>
+        <my-anyxml>
+            <my-element-2>
+                <my-sub-element-2>sub-element value 2</my-sub-element-2>
+            </my-element-2>
+        </my-anyxml>
+    </anyxml-container>
+</parent-container>
\ No newline at end of file
index b043f49c7a21545fa1d8a7c56e8b7964f59347ba..0021427ecd92d656ddf5fc70fa85d08651d35e7c 100644 (file)
@@ -1,27 +1,25 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<root xmlns="foo-namespace">
-    <parent-container>
-        <leaf-container>
-            <int32-leaf>1500</int32-leaf>
-            <decimal64-leaf>150.45</decimal64-leaf>
-            <string-leaf>hello world</string-leaf>
-            <leafref-leaf>hello world</leafref-leaf>
-            <empty-leaf/>
-            <boolean-leaf>true</boolean-leaf>
-            <enum-leaf>five</enum-leaf>
-        </leaf-container>
-        <leaf-container>
-            <int32-leaf>2500</int32-leaf>
-            <decimal64-leaf>250.45</decimal64-leaf>
-            <string-leaf>goodbye world</string-leaf>
-        </leaf-container>
-        <anyxml-container>
-            <my-anyxml>
-                <my-element>
-                    <my-sub-element>sub-element value</my-sub-element>
-                </my-element>
-            </my-anyxml>
-        </anyxml-container>
-    </parent-container>
-</root>
\ No newline at end of file
+<parent-container xmlns="foo-namespace">
+    <leaf-container>
+        <int32-leaf>1500</int32-leaf>
+        <decimal64-leaf>150.45</decimal64-leaf>
+        <string-leaf>hello world</string-leaf>
+        <leafref-leaf>hello world</leafref-leaf>
+        <empty-leaf/>
+        <boolean-leaf>true</boolean-leaf>
+        <enum-leaf>five</enum-leaf>
+    </leaf-container>
+    <leaf-container>
+        <int32-leaf>2500</int32-leaf>
+        <decimal64-leaf>250.45</decimal64-leaf>
+        <string-leaf>goodbye world</string-leaf>
+    </leaf-container>
+    <anyxml-container>
+        <my-anyxml>
+            <my-element>
+                <my-sub-element>sub-element value</my-sub-element>
+            </my-element>
+        </my-anyxml>
+    </anyxml-container>
+</parent-container>
\ No newline at end of file
index 3f18dcf466f8a040ae9bf830ab372972ebd051b4..8734999c72975ac237a09961882961863600bbc2 100644 (file)
@@ -1,23 +1,21 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<root xmlns="foo-namespace">
-    <parent-container>
-        <leaf-container>
-            <int32-leaf>1500</int32-leaf>
-            <decimal64-leaf>150.45</decimal64-leaf>
-            <decimal64-leaf>240.35</decimal64-leaf>
-            <string-leaf>hello world</string-leaf>
-            <leafref-leaf>hello world</leafref-leaf>
-            <empty-leaf/>
-            <boolean-leaf>true</boolean-leaf>
-            <enum-leaf>five</enum-leaf>
-        </leaf-container>
-        <anyxml-container>
-            <my-anyxml>
-                <my-element>
-                    <my-sub-element>sub-element value</my-sub-element>
-                </my-element>
-            </my-anyxml>
-        </anyxml-container>
-    </parent-container>
-</root>
\ No newline at end of file
+<parent-container xmlns="foo-namespace">
+    <leaf-container>
+        <int32-leaf>1500</int32-leaf>
+        <decimal64-leaf>150.45</decimal64-leaf>
+        <decimal64-leaf>240.35</decimal64-leaf>
+        <string-leaf>hello world</string-leaf>
+        <leafref-leaf>hello world</leafref-leaf>
+        <empty-leaf/>
+        <boolean-leaf>true</boolean-leaf>
+        <enum-leaf>five</enum-leaf>
+    </leaf-container>
+    <anyxml-container>
+        <my-anyxml>
+            <my-element>
+                <my-sub-element>sub-element value</my-sub-element>
+            </my-element>
+        </my-anyxml>
+    </anyxml-container>
+</parent-container>
\ No newline at end of file
index 970cd57e02e89dc2b1ddec8efb402a08bb67088e..3f2b9825955684f6c38838506c032706c8c35429 100644 (file)
@@ -1,17 +1,14 @@
-<root xmlns="urn:opendaylight:params:xml:ns:yang:controller:test">
-    <container>
-        <c2Leaf>2</c2Leaf>
-        <c2DeepChoiceCase1Leaf2>2</c2DeepChoiceCase1Leaf2>
-        <!--<c2DeepChoiceCase1Leaf1>2</c2DeepChoiceCase1Leaf1>-->
+<container xmlns="urn:opendaylight:params:xml:ns:yang:controller:test">
+    <c2Leaf>2</c2Leaf>
+    <c2DeepChoiceCase1Leaf2>2</c2DeepChoiceCase1Leaf2>
+    <!--<c2DeepChoiceCase1Leaf1>2</c2DeepChoiceCase1Leaf1>-->
 
-        <c3Leaf>3</c3Leaf>
+    <c3Leaf>3</c3Leaf>
 
-        <augLeaf>augment</augLeaf>
-
-        <c1Leaf>1</c1Leaf>
-        <c1Leaf_AnotherAugment>1</c1Leaf_AnotherAugment>
-        <deepLeafc1>1</deepLeafc1>
-        <!--<deepLeafc2>1</deepLeafc2>-->
-    </container>
-</root>
+    <augLeaf>augment</augLeaf>
 
+    <c1Leaf>1</c1Leaf>
+    <c1Leaf_AnotherAugment>1</c1Leaf_AnotherAugment>
+    <deepLeafc1>1</deepLeafc1>
+    <!--<deepLeafc2>1</deepLeafc2>-->
+</container>
index fc510077fc7871ca72810bbdf3551c0ca8f2ac85..7d6a20f7c4d485e3e58e1f9e0602ad4224096af1 100644 (file)
@@ -1,14 +1,11 @@
-<root xmlns="urn:opendaylight:params:xml:ns:yang:controller:test">
-    <container>
-        <c22Leaf>2</c22Leaf>
+<container xmlns="urn:opendaylight:params:xml:ns:yang:controller:test">
+    <c22Leaf>2</c22Leaf>
 
-        <c34LeafS>3</c34LeafS>
+    <c34LeafS>3</c34LeafS>
 
-        <augLeaf>augment</augLeaf>
-
-        <c1Leaf>1</c1Leaf>
-        <c1Leaf_AnotherAugment>1</c1Leaf_AnotherAugment>
-        <deepLeafc2>1</deepLeafc2>
-    </container>
-</root>
+    <augLeaf>augment</augLeaf>
 
+    <c1Leaf>1</c1Leaf>
+    <c1Leaf_AnotherAugment>1</c1Leaf_AnotherAugment>
+    <deepLeafc2>1</deepLeafc2>
+</container>
index e367c455f9f8fa87e45e9b3a9ba51ad40f48499d..738a12f132a43477e78a4111c74d15e577905bfa 100644 (file)
@@ -1,8 +1,6 @@
-<root xmlns="urn:opendaylight:params:xml:ns:yang:controller:test">
-    <container>
-        <case11-choice-case-container>
-            <case11-choice-case-leaf>leaf-value</case11-choice-case-leaf>
-        </case11-choice-case-container>
-    </container>
-</root>
+<container xmlns="urn:opendaylight:params:xml:ns:yang:controller:test">
+    <case11-choice-case-container>
+        <case11-choice-case-leaf>leaf-value</case11-choice-case-leaf>
+    </case11-choice-case-container>
+</container>
 
index 634bed7130a6040583f38454f4c4611681d0cf34..4bcaf056068633dabe1cecf1687651ecfb14911a 100644 (file)
@@ -1,74 +1,72 @@
-<root>
-    <container xmlns="urn:opendaylight:params:xml:ns:yang:controller:test">
-        <boolean>true</boolean>
-        <innerContainer>
-            <uint16>44</uint16>
-        </innerContainer>
-        <leafList>a</leafList>
-        <leafList>b</leafList>
+<container xmlns="urn:opendaylight:params:xml:ns:yang:controller:test">
+    <boolean>true</boolean>
+    <innerContainer>
+        <uint16>44</uint16>
+    </innerContainer>
+    <leafList>a</leafList>
+    <leafList>b</leafList>
 
-        <list>
-            <uint32InList>1</uint32InList>
-            <containerInList name="inContainer">
-                <uint32>32</uint32>
-                <uint16>16</uint16>
-                <identityr xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:test">prefix:b</identityr>
-                <anyX xmlns="urn:opendaylight:params:xml:ns:yang:controller:test">direct Value</anyX>
-                <uint16-ref>16</uint16-ref>
-                <instance-id xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:test">/prefix:container/prefix:list[prefix:uint32InList="1"]</instance-id>
-            </containerInList>
-            <stringAugmentedToList>augmentInList</stringAugmentedToList>
-            <stringAugmentedToListInCase1>augmentInListCase1</stringAugmentedToListInCase1>
-        </list>
-        <list>
-            <uint32InList>2</uint32InList>
-            <containerInList>
-                <uint32>32</uint32>
-                <uint16>16</uint16>
-                <identityr>b</identityr>
-                <anyX>
-                    <container xmlns="randomNamespace" xmlns:pref="prefixed:namespace">
-                        <pref:boolean>true</pref:boolean>
-                        <innerContainer xmlns:p="prefixed:namespace">
-                            <uint16 xmlns:pref2="prefixed:namespace">pref2:44</uint16>
-                        </innerContainer>
-                    </container>
-                    <container2 xmlns="randomNamespace2"/>
-                </anyX>
-            </containerInList>
-            <stringAugmentedToListInCase2>augmentInListCase2</stringAugmentedToListInCase2>
-        </list>
-        <list>
-            <uint32InList>4</uint32InList>
-            <containerInList>
-                <anyX>
-                    <netconf-state xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">
-                        <schemas>
-                            <schema>
-                                <identifier>module</identifier>
-                                <version>2012-12-12</version>
-                                <format xmlns:x="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">x:yang</format>
-                            </schema>
-                        </schemas>
-                    </netconf-state>
-                </anyX>
-            </containerInList>
-        </list>
-        <list>
-            <uint32InList>3</uint32InList>
-        </list>
+    <list>
+        <uint32InList>1</uint32InList>
+        <containerInList name="inContainer">
+            <uint32>32</uint32>
+            <uint16>16</uint16>
+            <identityr xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:test">prefix:b</identityr>
+            <anyX xmlns="urn:opendaylight:params:xml:ns:yang:controller:test">direct Value</anyX>
+            <uint16-ref>16</uint16-ref>
+            <instance-id xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:test">/prefix:container/prefix:list[prefix:uint32InList="1"]</instance-id>
+        </containerInList>
+        <stringAugmentedToList>augmentInList</stringAugmentedToList>
+        <stringAugmentedToListInCase1>augmentInListCase1</stringAugmentedToListInCase1>
+    </list>
+    <list>
+        <uint32InList>2</uint32InList>
+        <containerInList>
+            <uint32>32</uint32>
+            <uint16>16</uint16>
+            <identityr>b</identityr>
+            <anyX>
+                <container xmlns="randomNamespace" xmlns:pref="prefixed:namespace">
+                    <pref:boolean>true</pref:boolean>
+                    <innerContainer xmlns:p="prefixed:namespace">
+                        <uint16 xmlns:pref2="prefixed:namespace">pref2:44</uint16>
+                    </innerContainer>
+                </container>
+                <container2 xmlns="randomNamespace2"/>
+            </anyX>
+        </containerInList>
+        <stringAugmentedToListInCase2>augmentInListCase2</stringAugmentedToListInCase2>
+    </list>
+    <list>
+        <uint32InList>4</uint32InList>
+        <containerInList>
+            <anyX>
+                <netconf-state xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">
+                    <schemas>
+                        <schema>
+                            <identifier>module</identifier>
+                            <version>2012-12-12</version>
+                            <format xmlns:x="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">x:yang</format>
+                        </schema>
+                    </schemas>
+                </netconf-state>
+            </anyX>
+        </containerInList>
+    </list>
+    <list>
+        <uint32InList>3</uint32InList>
+    </list>
 
-        <augmentString1>choice1Case1</augmentString1>
-        <augmentInt1>41</augmentInt1>
-        <stringInAugmentedCaseInAugmentedChoiceFromAugment>deep</stringInAugmentedCaseInAugmentedChoiceFromAugment>
+    <augmentString1>choice1Case1</augmentString1>
+    <augmentInt1>41</augmentInt1>
+    <stringInAugmentedCaseInAugmentedChoiceFromAugment>deep</stringInAugmentedCaseInAugmentedChoiceFromAugment>
 
-        <augmentContainer>
-            <augmentStringInaugmentContainer>choice2Case1</augmentStringInaugmentContainer>
-        </augmentContainer>
+    <augmentContainer>
+        <augmentStringInaugmentContainer>choice2Case1</augmentStringInaugmentContainer>
+    </augmentContainer>
 
-        <augmentUint32>999</augmentUint32>
+    <augmentUint32>999</augmentUint32>
 
 
 
-    </container>
-</root>
\ No newline at end of file
+</container>
\ No newline at end of file
index 2c4a5d1974895cfa8fa246688e7fdeefff406f26..26a343af97a8e4ad2cf72853ae1459d42499ef90 100644 (file)
@@ -1,44 +1,42 @@
-<root>
-    <container xmlns="urn:opendaylight:params:xml:ns:yang:controller:test">
-        <augmentString1>choice1Case1</augmentString1>
-        <augmentInt1>41</augmentInt1>
-        <stringInAugmentedCaseInAugmentedChoice2>deep</stringInAugmentedCaseInAugmentedChoice2>
-
-        <augmentedList>
-            <augmentStringInaugmentList>aug1</augmentStringInaugmentList>
-        </augmentedList>
-
-        <augmentedList>
-            <augmentStringInaugmentList>aug2</augmentStringInaugmentList>
-            <augmentedContainerInAugmentedListInAugmentedCase>
-                <leafInAugmentedContainerInAugmentedListInAugmentedCase>
-                    66
-                </leafInAugmentedContainerInAugmentedListInAugmentedCase>
-            </augmentedContainerInAugmentedListInAugmentedCase>
-
-            <augmentedListInAugmentedListInAugmentedCase>
-                <leafInAugmentedListInAugmentedListInAugmentedCase>
-                    661
-                </leafInAugmentedListInAugmentedListInAugmentedCase>
-                <leafInAugmentedListInAugmentedListInAugmentedCase>
-                    662
-                </leafInAugmentedListInAugmentedListInAugmentedCase>
-            </augmentedListInAugmentedListInAugmentedCase>
-
-            <augmentedListInAugmentedListInAugmentedCase>
-                <leafInAugmentedListInAugmentedListInAugmentedCase>
-                    6621
-                </leafInAugmentedListInAugmentedListInAugmentedCase>
-            </augmentedListInAugmentedListInAugmentedCase>
-        </augmentedList>
-
-        <augmentedList>
-            <augmentStringInaugmentList>aug3</augmentStringInaugmentList>
-            <augmentedContainerInAugmentedListInAugmentedCase/>
-
-            <augmentedListInAugmentedListInAugmentedCase/>
-        </augmentedList>
-
-    </container>
-</root>
+<container xmlns="urn:opendaylight:params:xml:ns:yang:controller:test">
+    <augmentString1>choice1Case1</augmentString1>
+    <augmentInt1>41</augmentInt1>
+    <stringInAugmentedCaseInAugmentedChoice2>deep</stringInAugmentedCaseInAugmentedChoice2>
+
+    <augmentedList>
+        <augmentStringInaugmentList>aug1</augmentStringInaugmentList>
+    </augmentedList>
+
+    <augmentedList>
+        <augmentStringInaugmentList>aug2</augmentStringInaugmentList>
+        <augmentedContainerInAugmentedListInAugmentedCase>
+            <leafInAugmentedContainerInAugmentedListInAugmentedCase>
+                66
+            </leafInAugmentedContainerInAugmentedListInAugmentedCase>
+        </augmentedContainerInAugmentedListInAugmentedCase>
+
+        <augmentedListInAugmentedListInAugmentedCase>
+            <leafInAugmentedListInAugmentedListInAugmentedCase>
+                661
+            </leafInAugmentedListInAugmentedListInAugmentedCase>
+            <leafInAugmentedListInAugmentedListInAugmentedCase>
+                662
+            </leafInAugmentedListInAugmentedListInAugmentedCase>
+        </augmentedListInAugmentedListInAugmentedCase>
+
+        <augmentedListInAugmentedListInAugmentedCase>
+            <leafInAugmentedListInAugmentedListInAugmentedCase>
+                6621
+            </leafInAugmentedListInAugmentedListInAugmentedCase>
+        </augmentedListInAugmentedListInAugmentedCase>
+    </augmentedList>
+
+    <augmentedList>
+        <augmentStringInaugmentList>aug3</augmentStringInaugmentList>
+        <augmentedContainerInAugmentedListInAugmentedCase/>
+
+        <augmentedListInAugmentedListInAugmentedCase/>
+    </augmentedList>
+
+</container>
 
index 163a313f2d98fc8b9d69bece282902dfc3664695..740bed8860241c24f18158d1eb8418da5fd03846 100644 (file)
@@ -1,14 +1,11 @@
-<root>
-    <container xmlns="urn:opendaylight:params:xml:ns:yang:controller:test" name="test" xmlns:foo="http://www.foo.com/" foo:baz="baz">
+<container xmlns="urn:opendaylight:params:xml:ns:yang:controller:test" name="test" xmlns:foo="http://www.foo.com/" foo:baz="baz">
 
-        <list list="on list entry">
-            <uint32InList name="test" foo:baz="baz">3</uint32InList>
-        </list>
+    <list list="on list entry">
+        <uint32InList name="test" foo:baz="baz">3</uint32InList>
+    </list>
 
-        <boolean xmlns:leaf="test:namespace:in:leaf" leaf:a="b">false</boolean>
+    <boolean xmlns:leaf="test:namespace:in:leaf" leaf:a="b">false</boolean>
 
-        <leafList foo:b="b">a</leafList>
-
-    </container>
-</root>
+    <leafList foo:b="b">a</leafList>
 
+</container>
\ No newline at end of file
index 7343f34d2274aa6efaf5bc8a0344d066ccbeb783..b6368c768e4c057e143d9469926f0ef67a8bd776 100644 (file)
@@ -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 {
index 949c1ade2bedd4b23a2c04367d884eb64e6ea020..6016e6ae350586d466a5dc57fe35a0cb33cd72ea 100644 (file)
@@ -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.
+ *
+ * <p>
+ * Represents a YANG anyxml node.
+ */
 public class AnyXmlNodeDataWithSchema extends SimpleNodeDataWithSchema {
 
     public AnyXmlNodeDataWithSchema(final DataSchemaNode dataSchemaNode) {
index d7bd7939e61e56f049be9977bd00a2598ac491c5..86b113ff2f60b8a8f16a283be8600e24bf4c5433 100644 (file)
@@ -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.
+ *
+ * <p>
+ * Represents a node which is composed of multiple simpler nodes.
  */
 public class CompositeNodeDataWithSchema extends AbstractNodeDataWithSchema {
 
index 576cdc977aed47f8b50ecb994f3a6626b81c6197..3ebc481d2119079d86e549c033d9fca425f7a620 100644 (file)
@@ -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.
+ *
+ * <p>
+ * Represents a YANG container node.
+ */
+public class ContainerNodeDataWithSchema extends CompositeNodeDataWithSchema {
 
-    ContainerNodeDataWithSchema(final DataSchemaNode schema) {
+    public ContainerNodeDataWithSchema(final DataSchemaNode schema) {
         super(schema);
     }
 
index b2c3928cd32b0251d4078e05e7201a32278d16ea..ff65f3ca03762000f73607ad656a1c6575be7027 100644 (file)
@@ -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.
+ *
+ * <p>
+ * Represents a YANG leaf-list entry node.
+ */
 public class LeafListEntryNodeDataWithSchema extends SimpleNodeDataWithSchema {
     public LeafListEntryNodeDataWithSchema(final DataSchemaNode dataSchemaNode) {
         super(dataSchemaNode);
index e7e45e83d37f7f4e8b01e9944f0cdbc25f77c992..5186f532c51b7011338e78a0b34a8296cfba8191 100644 (file)
@@ -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.
+ *
+ * <p>
+ * Represents a YANG leaf-list node.
+ */
 public class LeafListNodeDataWithSchema extends CompositeNodeDataWithSchema {
     public LeafListNodeDataWithSchema(final DataSchemaNode schema) {
         super(schema);
index e400c8f1b9b0341285f83bff650947ba9f468c31..c3e6bf81eda7a20a50c08529b8ddc98386df3afd 100644 (file)
@@ -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.
+ *
+ * <p>
+ * Represents a YANG leaf node.
+ */
 public class LeafNodeDataWithSchema extends SimpleNodeDataWithSchema {
 
     public LeafNodeDataWithSchema(final DataSchemaNode schema) {
index 10ede76ebbf767b01f8e87792dd2332256d862ec..13a734d28d1b4fdae48cfaf1a9a999aae69db296 100644 (file)
@@ -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.
+ *
+ * <p>
+ * Represents a YANG list entry node.
+ */
 public class ListEntryNodeDataWithSchema extends CompositeNodeDataWithSchema {
 
     private final Map<QName, SimpleNodeDataWithSchema> qnameToKeys = new HashMap<>();
index 50512e6d2799b8eb007978a8722aa2fe0501aae5..14553c0a4b8177d7ababf4333cc9260d50ed97c7 100644 (file)
@@ -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.
+ *
+ * <p>
+ * Represents a YANG list node.
+ */
 public class ListNodeDataWithSchema extends CompositeNodeDataWithSchema {
 
     public ListNodeDataWithSchema(final DataSchemaNode schema) {
index fd0b0e2baa781c62124a892bea834a6bead81b4d..c7cbfa088d31d78888201dde4c247858a4656564 100644 (file)
@@ -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.
+ *
+ * <p>
+ * Represents a simple node with value (anyxml, leaf, leaf-list entry).
+ */
 public abstract class SimpleNodeDataWithSchema extends AbstractNodeDataWithSchema {
 
     private Object value;
index a916adb8438ce60f49bd7c5654d08def143dd5a3..4e50c5701dfaeb692e55e580eb70f76405998b4b 100644 (file)
@@ -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.
+ *
+ * <p>
+ * Represents a YANG-modeled-anyxml node.
+ */
+public final class YangModeledAnyXmlNodeDataWithSchema extends CompositeNodeDataWithSchema {
 
-    YangModeledAnyXmlNodeDataWithSchema(final YangModeledAnyXmlSchemaNode yangModeledAnyXml) {
+    public YangModeledAnyXmlNodeDataWithSchema(final YangModeledAnyXmlSchemaNode yangModeledAnyXml) {
         super(yangModeledAnyXml);
     }