Maintain SchemaInferenceStack in XmlParserStream 80/95180/6
authorRobert Varga <robert.varga@pantheon.tech>
Mon, 15 Feb 2021 17:13:32 +0000 (18:13 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Tue, 16 Feb 2021 07:58:05 +0000 (08:58 +0100)
We are about to migrate leafref resolution, maintaining a
SchemaInferenceStack will help with that. This also fixes a weird
normalization edge case around mountpoints.

JIRA: YANGTOOLS-1229
Change-Id: If20975d9ddc9d03e4232200916c94f27e9a443f9
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 files changed:
yang/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/TestUtils.java
yang/yang-data-codec-xml/src/main/java/org/opendaylight/yangtools/yang/data/codec/xml/DOMSourceAnydata.java
yang/yang-data-codec-xml/src/main/java/org/opendaylight/yangtools/yang/data/codec/xml/DOMSourceMountPointChild.java
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/AnyXmlWithParamsParsingTest.java
yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/AnydataNormalizeToContainerTest.java
yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/AnydataParseTest.java
yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/AnydataSerializeTest.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/Bug8083Test.java
yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug8675Test.java
yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug8745Test.java
yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug8803Test.java
yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/Bug890Test.java
yang/yang-data-codec-xml/src/test/java/org/opendaylight/yangtools/yang/data/codec/xml/DOMSourceXMLStreamReaderTest.java
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/StrictParsingModeTest.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/YT1107Test.java

index eb28ebb4eb7742afd16c0fe7ae8d4e4a60845fab..dc1e980952d671860621abc5afeee4138a4cd3a3 100644 (file)
@@ -60,7 +60,7 @@ public final class TestUtils {
             final EffectiveModelContext schemaContext) throws Exception {
         final XMLStreamReader reader = UntrustedXML.createXMLStreamReader(xmlInputStream);
         final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
-        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, schemaContext);
+        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext);
         xmlParser.parse(reader);
     }
 
index 3df399b80f2057be389be76e959e0232374635d7..77b627eecd4457e4ecbd9287ddfaa67066289c64 100644 (file)
@@ -13,7 +13,6 @@ import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.MoreObjects.ToStringHelper;
 import java.io.IOException;
 import java.net.URISyntaxException;
-import java.util.List;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 import javax.xml.transform.dom.DOMSource;
@@ -21,8 +20,6 @@ import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
 import org.opendaylight.yangtools.yang.data.impl.schema.AbstractNormalizableAnydata;
 import org.opendaylight.yangtools.yang.model.api.EffectiveStatementInference;
-import org.opendaylight.yangtools.yang.model.api.SchemaNode;
-import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.xml.sax.SAXException;
 
 /**
@@ -53,18 +50,9 @@ final class DOMSourceAnydata extends AbstractNormalizableAnydata {
     @Override
     protected void writeTo(final NormalizedNodeStreamWriter streamWriter, final EffectiveStatementInference inference)
             throws IOException {
-        final List<? extends EffectiveStatement<?, ?>> path = inference.statementPath();
-        if (path.isEmpty()) {
-            throw new IOException("Cannot handle empty inference " + inference);
-        }
-        final EffectiveStatement<?, ?> stmt = path.get(path.size() - 1);
-        if (!(stmt instanceof SchemaNode)) {
-            throw new IOException("Unhandled statement " + stmt);
-        }
-
         final XmlParserStream xmlParser;
         try {
-            xmlParser = XmlParserStream.create(streamWriter, inference.getEffectiveModelContext(), (SchemaNode) stmt);
+            xmlParser = XmlParserStream.create(streamWriter, inference);
         } catch (IllegalArgumentException e) {
             throw new IOException("Failed to instantiate XML parser", e);
         }
index f66f6e312ab0f4c184cb6e482c886eae15e72c9e..d60155c77be5dda334afe56611f97f47c25efe16 100644 (file)
@@ -33,10 +33,9 @@ final class DOMSourceMountPointChild extends AbstractMountPointChild {
 
     @Override
     public void writeTo(final NormalizedNodeStreamWriter writer, final MountPointContext mountCtx) throws IOException {
-
         final XmlParserStream xmlParser;
         try {
-            xmlParser = XmlParserStream.create(writer, mountCtx, mountCtx.getEffectiveModelContext());
+            xmlParser = XmlParserStream.create(writer, mountCtx);
         } catch (IllegalArgumentException e) {
             throw new IOException("Failed to instantiate XML parser", e);
         }
index 25c2e7b4f29672a133856f28d93c5f9c6c171acd..5b3198834547f4c6db0460f4fd2ea052b79d113d 100644 (file)
@@ -76,13 +76,15 @@ import org.opendaylight.yangtools.yang.model.api.ContainerLike;
 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveStatementInference;
 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.OperationDefinition;
-import org.opendaylight.yangtools.yang.model.api.SchemaNode;
 import org.opendaylight.yangtools.yang.model.api.TypedDataSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
@@ -138,16 +140,30 @@ public final class XmlParserStream implements Closeable, Flushable {
     // Cache of nsUri Strings to QNameModules, as inferred from document
     private final Map<String, QNameModule> rawNamespaces = new HashMap<>();
     private final NormalizedNodeStreamWriter writer;
+    private final SchemaInferenceStack stack;
     private final XmlCodecFactory codecs;
     private final DataSchemaNode parentNode;
     private final boolean strictParsing;
 
     private XmlParserStream(final NormalizedNodeStreamWriter writer, final XmlCodecFactory codecs,
-            final DataSchemaNode parentNode, final boolean strictParsing) {
+            final SchemaInferenceStack stack, final boolean strictParsing) {
         this.writer = requireNonNull(writer);
         this.codecs = requireNonNull(codecs);
-        this.parentNode = parentNode;
+        this.stack = requireNonNull(stack);
         this.strictParsing = strictParsing;
+
+        if (!stack.isEmpty()) {
+            final EffectiveStatement<?, ?> stmt = stack.currentStatement();
+            if (stmt instanceof DataSchemaNode) {
+                parentNode = (DataSchemaNode) stmt;
+            } else if (stmt instanceof OperationDefinition) {
+                parentNode = OperationAsContainer.of((OperationDefinition) stmt);
+            } else {
+                throw new IllegalArgumentException("Illegal parent node " + stmt);
+            }
+        } else {
+            parentNode = stack.getEffectiveModelContext();
+        }
     }
 
     /**
@@ -159,7 +175,7 @@ public final class XmlParserStream implements Closeable, Flushable {
      * @return A new stream instance
      */
     public static XmlParserStream create(final NormalizedNodeStreamWriter writer, final XmlCodecFactory codecs,
-            final SchemaNode parentNode) {
+            final EffectiveStatementInference parentNode) {
         return create(writer, codecs, parentNode, true);
     }
 
@@ -176,55 +192,77 @@ public final class XmlParserStream implements Closeable, Flushable {
      * @return A new stream instance
      */
     public static XmlParserStream create(final NormalizedNodeStreamWriter writer, final XmlCodecFactory codecs,
-            final SchemaNode parentNode, final boolean strictParsing) {
-        final DataSchemaNode parent;
-        if (parentNode instanceof DataSchemaNode) {
-            parent = (DataSchemaNode) parentNode;
-        } else if (parentNode instanceof OperationDefinition) {
-            parent = OperationAsContainer.of((OperationDefinition) parentNode);
-        } else {
-            throw new IllegalArgumentException("Illegal parent node " + parentNode);
-        }
-        return new XmlParserStream(writer, codecs, parent, strictParsing);
+            final EffectiveStatementInference parentNode, final boolean strictParsing) {
+        return new XmlParserStream(writer, codecs, SchemaInferenceStack.ofInference(parentNode), strictParsing);
+    }
+
+    /**
+     * Utility method for use when caching {@link XmlCodecFactory} is not feasible. Users with high performance
+     * requirements should use {@link #create(NormalizedNodeStreamWriter, XmlCodecFactory, EffectiveStatementInference)}
+     * instead and maintain a {@link XmlCodecFactory} to match the current {@link EffectiveModelContext}.
+     */
+    public static XmlParserStream create(final NormalizedNodeStreamWriter writer,
+            final EffectiveModelContext context) {
+        return create(writer, context, true);
+    }
+
+    /**
+     * Utility method for use when caching {@link XmlCodecFactory} is not feasible. Users with high performance
+     * requirements should use {@link #create(NormalizedNodeStreamWriter, XmlCodecFactory, EffectiveStatementInference)}
+     * instead and maintain a {@link XmlCodecFactory} to match the current {@link EffectiveModelContext}.
+     */
+    public static XmlParserStream create(final NormalizedNodeStreamWriter writer,
+            final EffectiveModelContext context, final boolean strictParsing) {
+        return create(writer, SchemaInferenceStack.of(context).toInference(), strictParsing);
     }
 
     /**
      * Utility method for use when caching {@link XmlCodecFactory} is not feasible. Users with high performance
-     * requirements should use {@link #create(NormalizedNodeStreamWriter, XmlCodecFactory, SchemaNode)} instead and
-     * maintain a {@link XmlCodecFactory} to match the current {@link EffectiveModelContext}.
+     * requirements should use {@link #create(NormalizedNodeStreamWriter, XmlCodecFactory, EffectiveStatementInference)}
+     * instead and maintain a {@link XmlCodecFactory} to match the current {@link EffectiveModelContext}.
      */
     public static XmlParserStream create(final NormalizedNodeStreamWriter writer,
-            final EffectiveModelContext schemaContext, final SchemaNode parentNode) {
-        return create(writer, schemaContext, parentNode, true);
+            final EffectiveStatementInference parentNode) {
+        return create(writer, parentNode, true);
     }
 
     /**
      * Utility method for use when caching {@link XmlCodecFactory} is not feasible. Users with high performance
-     * requirements should use {@link #create(NormalizedNodeStreamWriter, XmlCodecFactory, SchemaNode)} instead and
-     * maintain a {@link XmlCodecFactory} to match the current {@link EffectiveModelContext}.
+     * requirements should use {@link #create(NormalizedNodeStreamWriter, XmlCodecFactory, EffectiveStatementInference)}
+     * instead and maintain a {@link XmlCodecFactory} to match the current {@link EffectiveModelContext}.
      */
     public static XmlParserStream create(final NormalizedNodeStreamWriter writer,
-            final EffectiveModelContext schemaContext, final SchemaNode parentNode, final boolean strictParsing) {
-        return create(writer, XmlCodecFactory.create(schemaContext), parentNode, strictParsing);
+            final EffectiveStatementInference parentNode, final boolean strictParsing) {
+        return create(writer, XmlCodecFactory.create(parentNode.getEffectiveModelContext()), parentNode, strictParsing);
+    }
+
+    /**
+     * Utility method for use when caching {@link XmlCodecFactory} is not feasible. Users with high performance
+     * requirements should use {@link #create(NormalizedNodeStreamWriter, XmlCodecFactory, EffectiveStatementInference)}
+     * instead and maintain a {@link XmlCodecFactory} to match the current {@link MountPointContext}.
+     */
+    public static XmlParserStream create(final NormalizedNodeStreamWriter writer, final MountPointContext mountCtx) {
+        return create(writer, mountCtx, SchemaInferenceStack.of(mountCtx.getEffectiveModelContext()).toInference(),
+            true);
     }
 
     /**
      * Utility method for use when caching {@link XmlCodecFactory} is not feasible. Users with high performance
-     * requirements should use {@link #create(NormalizedNodeStreamWriter, XmlCodecFactory, SchemaNode)} instead and
-     * maintain a {@link XmlCodecFactory} to match the current {@link MountPointContext}.
+     * requirements should use {@link #create(NormalizedNodeStreamWriter, XmlCodecFactory, EffectiveStatementInference)}
+     * instead and maintain a {@link XmlCodecFactory} to match the current {@link MountPointContext}.
      */
     public static XmlParserStream create(final NormalizedNodeStreamWriter writer, final MountPointContext mountCtx,
-            final SchemaNode parentNode) {
+            final EffectiveStatementInference parentNode) {
         return create(writer, mountCtx, parentNode, true);
     }
 
     /**
      * Utility method for use when caching {@link XmlCodecFactory} is not feasible. Users with high performance
-     * requirements should use {@link #create(NormalizedNodeStreamWriter, XmlCodecFactory, SchemaNode)} instead and
-     * maintain a {@link XmlCodecFactory} to match the current {@link MountPointContext}.
+     * requirements should use {@link #create(NormalizedNodeStreamWriter, XmlCodecFactory, EffectiveStatementInference)}
+     * instead and maintain a {@link XmlCodecFactory} to match the current {@link MountPointContext}.
      */
     public static XmlParserStream create(final NormalizedNodeStreamWriter writer, final MountPointContext mountCtx,
-            final SchemaNode parentNode, final boolean strictParsing) {
+            final EffectiveStatementInference parentNode, final boolean strictParsing) {
         return create(writer, XmlCodecFactory.create(mountCtx), parentNode, strictParsing);
     }
 
@@ -478,8 +516,12 @@ public final class XmlParserStream implements Closeable, Flushable {
                         }
 
                         // We have a match, proceed with it
-                        read(in, ((CompositeNodeDataWithSchema<?>) parent).addChild(childDataSchemaNodes,
-                            elementList ? ChildReusePolicy.REUSE : ChildReusePolicy.NOOP), rootElement);
+                        final QName qname = childDataSchemaNodes.peekLast().getQName();
+                        final AbstractNodeDataWithSchema<?> child = ((CompositeNodeDataWithSchema<?>) parent).addChild(
+                            childDataSchemaNodes, elementList ? ChildReusePolicy.REUSE : ChildReusePolicy.NOOP);
+                        stack.enterDataTree(qname);
+                        read(in, child, rootElement);
+                        stack.exit();
                         continue;
                     }
 
index 31c2137105a0ad897d4920021071bbabf8e1b019..8ec4f078a93d737c7aa7f215db10987a5c2e178d 100644 (file)
@@ -22,6 +22,10 @@ import javax.xml.transform.stream.StreamResult;
 import org.junit.Test;
 import org.opendaylight.yangtools.util.xml.UntrustedXML;
 import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.common.QNameModule;
+import org.opendaylight.yangtools.yang.common.Revision;
+import org.opendaylight.yangtools.yang.common.XMLNamespace;
+import org.opendaylight.yangtools.yang.common.YangConstants;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode;
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
@@ -32,33 +36,30 @@ import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStre
 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.EffectiveModelContext;
-import org.opendaylight.yangtools.yang.model.api.OperationDefinition;
-import org.opendaylight.yangtools.yang.model.api.SchemaNode;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
+import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 import org.w3c.dom.Document;
 
 public class AnyXmlWithParamsParsingTest {
-
     private static final InputStream EDIT_CONFIG = XmlToNormalizedNodesTest.class.getResourceAsStream(
             "/anyxml-support/params/edit.xml");
 
-    private static final EffectiveModelContext SCHEMA = YangParserTestUtils.parseYangResourceDirectory(
-            "/anyxml-support/params/");
-
-    private static final SchemaNode SCHEMA_NODE = SCHEMA.getOperations().stream()
-            .filter(o -> o.getQName().getLocalName().equals("edit-config"))
-            .findFirst()
-            .map(OperationDefinition::getInput)
-            .get();
+    private static final QNameModule IETF_NETCONF = QNameModule.create(
+        XMLNamespace.of("urn:ietf:params:xml:ns:netconf:base:1.0"), Revision.of("2011-06-01"));
 
     @Test
     public void testAnyXmlWithParams() throws Exception {
+        final EffectiveModelContext context = YangParserTestUtils.parseYangResourceDirectory("/anyxml-support/params/");
+
         final Document doc = UntrustedXML.newDocumentBuilder().parse(EDIT_CONFIG);
 
         final NormalizedNodeResult resultHolder = new NormalizedNodeResult();
         final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(resultHolder);
 
-        final XmlParserStream xmlParser = XmlParserStream.create(writer, SCHEMA, SCHEMA_NODE);
+        final XmlParserStream xmlParser = XmlParserStream.create(writer, SchemaInferenceStack.of(context,
+            Absolute.of(QName.create(IETF_NETCONF, "edit-config"), YangConstants.operationInputQName(IETF_NETCONF)))
+            .toInference());
         xmlParser.traverse(new DOMSource(doc.getDocumentElement()));
         final NormalizedNode parsed = resultHolder.getResult();
 
index 726e7abb0ec772d0872753aeeaea4f2f08656e40..6fe50b0699499ed27859644514fb9da4c489eb71 100644 (file)
@@ -25,6 +25,7 @@ import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
 import org.opendaylight.yangtools.yang.model.spi.DefaultSchemaTreeInference;
+import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack.Inference;
 
 public class AnydataNormalizeToContainerTest extends AbstractAnydataTest {
     @Test
@@ -48,7 +49,8 @@ public class AnydataNormalizeToContainerTest extends AbstractAnydataTest {
 
         final NormalizedNodeResult result = new NormalizedNodeResult();
         final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
-        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, SCHEMA_CONTEXT, anyDataSchemaNode);
+        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter,
+            Inference.ofDataTreePath(SCHEMA_CONTEXT, FOO_QNAME));
         xmlParser.parse(reader);
 
         final NormalizedNode transformedInput = result.getResult();
index 833c5240ad5602935d6de7cb1ca24f726ab15d12..dc8454650d3d58ea2a2d15402e8547b4cb84da54 100644 (file)
@@ -7,7 +7,8 @@
  */
 package org.opendaylight.yangtools.yang.data.codec.xml;
 
-import static org.junit.Assert.assertTrue;
+import static org.hamcrest.CoreMatchers.instanceOf;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 import java.io.IOException;
 import java.net.URISyntaxException;
@@ -16,14 +17,13 @@ import javax.xml.stream.XMLStreamReader;
 import org.junit.Test;
 import org.opendaylight.yangtools.util.xml.UntrustedXML;
 import org.opendaylight.yangtools.yang.data.api.schema.AnydataNode;
-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.util.SchemaInferenceStack.Inference;
 import org.xml.sax.SAXException;
 
 public class AnydataParseTest extends AbstractAnydataTest {
-
     @Test
     public void testAnydata() throws XMLStreamException, IOException, URISyntaxException, SAXException {
         final XMLStreamReader reader = UntrustedXML.createXMLStreamReader(
@@ -31,11 +31,10 @@ public class AnydataParseTest extends AbstractAnydataTest {
 
         final NormalizedNodeResult result = new NormalizedNodeResult();
         final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
-        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, SCHEMA_CONTEXT,
-            SCHEMA_CONTEXT.findDataChildByName(FOO_QNAME).get(), true);
+        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter,
+            Inference.ofDataTreePath(SCHEMA_CONTEXT, FOO_QNAME), true);
         xmlParser.parse(reader);
 
-        final NormalizedNode parsed = result.getResult();
-        assertTrue(parsed instanceof AnydataNode);
+        assertThat(result.getResult(), instanceOf(AnydataNode.class));
     }
 }
index 2d375a4cc1a7c31137d16233ff31d036d34079f0..213863e6043441b17b1313eaa9036245d25855cf 100644 (file)
@@ -42,10 +42,9 @@ import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableAnydataNodeBuilder;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeBuilder;
 import org.opendaylight.yangtools.yang.data.util.ImmutableNormalizedAnydata;
-import org.opendaylight.yangtools.yang.model.api.AnydataSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaNode;
 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
 import org.opendaylight.yangtools.yang.model.spi.DefaultSchemaTreeInference;
+import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack.Inference;
 import org.w3c.dom.Document;
 import org.xml.sax.SAXException;
 
@@ -83,19 +82,14 @@ public class AnydataSerializeTest extends AbstractAnydataTest {
     @Test
     public void testXmlParseAnydata()
             throws IOException, SAXException, XMLStreamException, URISyntaxException, TransformerException {
-
-        //Create Data Scheme from yang file
-        final SchemaNode dataSchemaNode = SCHEMA_CONTEXT.findDataTreeChild(FOO_QNAME).orElse(null);
-        assertThat(dataSchemaNode, instanceOf(AnydataSchemaNode.class));
-        final AnydataSchemaNode anyDataSchemaNode = (AnydataSchemaNode) dataSchemaNode;
-
         // deserialization
         final XMLStreamReader reader
                 = UntrustedXML.createXMLStreamReader(loadResourcesAsInputStream("/test-anydata.xml"));
 
         final NormalizedNodeResult result = new NormalizedNodeResult();
         final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
-        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, SCHEMA_CONTEXT, anyDataSchemaNode);
+        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter,
+            Inference.ofDataTreePath(SCHEMA_CONTEXT, FOO_QNAME));
         xmlParser.parse(reader);
 
         final NormalizedNode transformedInput = result.getResult();
@@ -135,12 +129,11 @@ public class AnydataSerializeTest extends AbstractAnydataTest {
         //Load XML from file and write it with xmlParseStream
         final DOMResult domResult = new DOMResult(UntrustedXML.newDocumentBuilder().newDocument());
         final XMLStreamWriter xmlStreamWriter = factory.createXMLStreamWriter(domResult);
-        final AnydataSchemaNode anyDataSchemaNode = (AnydataSchemaNode) SCHEMA_CONTEXT.findDataTreeChild(FOO_QNAME)
-            .orElseThrow();
         final NormalizedNodeStreamWriter streamWriter = XMLStreamNormalizedNodeStreamWriter.create(
                 xmlStreamWriter, SCHEMA_CONTEXT);
         final XMLStreamReader reader = new DOMSourceXMLStreamReader(domSource);
-        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, SCHEMA_CONTEXT, anyDataSchemaNode);
+        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter,
+            Inference.ofDataTreePath(SCHEMA_CONTEXT, FOO_QNAME));
 
         xmlParser.parse(reader);
         xmlParser.flush();
@@ -166,17 +159,14 @@ public class AnydataSerializeTest extends AbstractAnydataTest {
         Document doc = loadXmlDocument("/test-anydata.xml");
         final DOMSource domSource = new DOMSource(doc.getDocumentElement());
 
-        //Get specific attribute from Yang file.
-        final AnydataSchemaNode contWithAttr = (AnydataSchemaNode) SCHEMA_CONTEXT.findDataTreeChild(FOO_QNAME)
-            .orElseThrow();
-
         //Create NormalizedNodeResult
         NormalizedNodeResult normalizedResult = new NormalizedNodeResult();
         final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(normalizedResult);
 
         //Initialize Reader with XML file
         final XMLStreamReader reader = new DOMSourceXMLStreamReader(domSource);
-        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, SCHEMA_CONTEXT, contWithAttr);
+        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter,
+            Inference.ofDataTreePath(SCHEMA_CONTEXT, FOO_QNAME));
         xmlParser.parse(reader);
         xmlParser.flush();
 
index 6d9383b765c855c118ff782a4dcb0a398b209b17..422357a2519e51306a5ed4a0b99f30e6ab2cef7c 100644 (file)
@@ -14,7 +14,6 @@ import static org.junit.Assert.fail;
 
 import java.io.InputStream;
 import javax.xml.stream.XMLStreamReader;
-import org.junit.Before;
 import org.junit.Test;
 import org.opendaylight.yangtools.util.xml.UntrustedXML;
 import org.opendaylight.yangtools.yang.common.QName;
@@ -28,21 +27,14 @@ 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.EffectiveModelContext;
-import org.opendaylight.yangtools.yang.model.api.Module;
+import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack.Inference;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 
 public class Bug5396Test {
+    private static final QNameModule FOO = QNameModule.create(XMLNamespace.of("foo"), Revision.of("2016-03-22"));
 
-    private QNameModule fooModuleQName;
-    private EffectiveModelContext schemaContext;
-
-    @Before
-    public void setUp() {
-        fooModuleQName = QNameModule.create(XMLNamespace.of("foo"), Revision.of("2016-03-22"));
-        schemaContext = YangParserTestUtils.parseYangResource("/bug5396/yang/foo.yang");
-    }
+    private final EffectiveModelContext schemaContext = YangParserTestUtils.parseYangResource("/bug5396/yang/foo.yang");
 
     @Test
     public void test() throws Exception {
@@ -62,9 +54,6 @@ 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.findDataChildByName(
-                QName.create(fooModule.getQNameModule(), "root")).get();
 
         final XMLStreamReader reader = UntrustedXML.createXMLStreamReader(resourceAsStream);
 
@@ -72,7 +61,8 @@ public class Bug5396Test {
 
         final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
 
-        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, rootCont);
+        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter,
+            Inference.ofDataTreePath(schemaContext, QName.create(FOO, "root")));
         xmlParser.parse(reader);
 
         assertNotNull(result.getResult());
@@ -80,7 +70,7 @@ public class Bug5396Test {
         final ContainerNode rootContainer = (ContainerNode) result.getResult();
 
         DataContainerChild myLeaf = rootContainer.childByArg(new NodeIdentifier(
-                QName.create(fooModuleQName, "my-leaf")));
+                QName.create(FOO, "my-leaf")));
         assertTrue(myLeaf instanceof LeafNode);
         assertEquals(expectedValue, myLeaf.body());
     }
index 3bffe7aaf6c6fb9e30f25b3b26b74a1b4f707a8b..ff810ee4f96abc26d9a9ef35b303e4ff9ec014c1 100644 (file)
@@ -5,7 +5,6 @@
  * 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;
@@ -15,23 +14,24 @@ import javax.xml.stream.XMLStreamReader;
 import org.junit.Test;
 import org.opendaylight.yangtools.util.xml.UntrustedXML;
 import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.common.QNameModule;
+import org.opendaylight.yangtools.yang.common.XMLNamespace;
 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.EffectiveModelContext;
-import org.opendaylight.yangtools.yang.model.api.Module;
+import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack.Inference;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 
 public class Bug8083Test {
+    private static final QNameModule FOOBAR = QNameModule.create(XMLNamespace.of("foobar-ns"));
+    private static final QNameModule BAZ = QNameModule.create(XMLNamespace.of("baz-ns"));
+    private static final QNameModule ZAB = QNameModule.create(XMLNamespace.of("zab-ns"));
 
     @Test
     public void testInstanceIdentifierPathWithEmptyListKey() throws Exception {
         final EffectiveModelContext schemaContext = YangParserTestUtils.parseYangResource("/bug8083/yang/baz.yang");
-        final Module bazModule = schemaContext.getModules().iterator().next();
-        final ContainerSchemaNode topCont = (ContainerSchemaNode) bazModule.findDataChildByName(
-                QName.create(bazModule.getQNameModule(), "top-cont")).get();
 
         final InputStream resourceAsStream = Bug8083Test.class.getResourceAsStream("/bug8083/xml/baz.xml");
 
@@ -40,7 +40,8 @@ public class Bug8083Test {
         // deserialization
         final NormalizedNodeResult result = new NormalizedNodeResult();
         final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
-        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, topCont);
+        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter,
+            Inference.ofDataTreePath(schemaContext, QName.create(BAZ, "top-cont")));
         xmlParser.parse(reader);
         final NormalizedNode transformedInput = result.getResult();
         assertNotNull(transformedInput);
@@ -49,9 +50,6 @@ public class Bug8083Test {
     @Test
     public void testInstanceIdentifierPathWithIdentityrefListKey() throws Exception {
         final EffectiveModelContext schemaContext = YangParserTestUtils.parseYangResource("/bug8083/yang/zab.yang");
-        final Module zabModule = schemaContext.getModules().iterator().next();
-        final ContainerSchemaNode topCont = (ContainerSchemaNode) zabModule.findDataChildByName(
-                QName.create(zabModule.getQNameModule(), "top-cont")).get();
 
         final InputStream resourceAsStream = Bug8083Test.class.getResourceAsStream("/bug8083/xml/zab.xml");
 
@@ -60,7 +58,8 @@ public class Bug8083Test {
         // deserialization
         final NormalizedNodeResult result = new NormalizedNodeResult();
         final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
-        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, topCont);
+        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter,
+            Inference.ofDataTreePath(schemaContext, QName.create(ZAB, "top-cont")));
         xmlParser.parse(reader);
         final NormalizedNode transformedInput = result.getResult();
         assertNotNull(transformedInput);
@@ -69,9 +68,6 @@ public class Bug8083Test {
     @Test
     public void testInstanceIdentifierPathWithInstanceIdentifierListKey() throws Exception {
         final EffectiveModelContext schemaContext = YangParserTestUtils.parseYangResource("/bug8083/yang/foobar.yang");
-        final Module foobarModule = schemaContext.getModules().iterator().next();
-        final ContainerSchemaNode topCont = (ContainerSchemaNode) foobarModule.findDataChildByName(
-                QName.create(foobarModule.getQNameModule(), "top-cont")).get();
 
         final InputStream resourceAsStream = Bug8083Test.class.getResourceAsStream("/bug8083/xml/foobar.xml");
 
@@ -80,7 +76,8 @@ public class Bug8083Test {
         // deserialization
         final NormalizedNodeResult result = new NormalizedNodeResult();
         final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
-        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, topCont);
+        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter,
+            Inference.ofDataTreePath(schemaContext, QName.create(FOOBAR, "top-cont")));
         xmlParser.parse(reader);
         final NormalizedNode transformedInput = result.getResult();
         assertNotNull(transformedInput);
index 8dc315ae8ddb306a2e629cd5b5ac050510a66124..5b04598a206787010ae78e37b49529f63ab19e60 100644 (file)
@@ -5,7 +5,6 @@
  * 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;
@@ -17,41 +16,34 @@ import org.junit.BeforeClass;
 import org.junit.Test;
 import org.opendaylight.yangtools.util.xml.UntrustedXML;
 import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.common.QNameModule;
+import org.opendaylight.yangtools.yang.common.Revision;
+import org.opendaylight.yangtools.yang.common.XMLNamespace;
 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.EffectiveModelContext;
-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.util.SchemaInferenceStack.Inference;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 
 public class Bug8675Test {
+    private static final QNameModule FOO = QNameModule.create(XMLNamespace.of("foo"), Revision.of("2017-06-13"));
 
     private static EffectiveModelContext schemaContext;
-    private static Module fooModule;
 
     @BeforeClass
     public static void setup() {
         schemaContext = YangParserTestUtils.parseYangResource("/bug8675/foo.yang");
-        fooModule = schemaContext.getModules().iterator().next();
     }
 
     @AfterClass
     public static void cleanup() {
-        fooModule = null;
         schemaContext = null;
     }
 
     @Test
     public void testParsingEmptyElements() throws Exception {
-        final ContainerSchemaNode topLevelContainer = (ContainerSchemaNode) fooModule.findDataChildByName(
-                QName.create(fooModule.getQNameModule(), "top-level-container")).get();
-
         final InputStream resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream(
                 "/bug8675/foo.xml");
 
@@ -60,7 +52,8 @@ public class Bug8675Test {
         final NormalizedNodeResult result = new NormalizedNodeResult();
         final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
 
-        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, topLevelContainer);
+        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter,
+            Inference.ofDataTreePath(schemaContext, QName.create(FOO, "top-level-container")));
         xmlParser.parse(reader);
 
         final NormalizedNode transformedInput = result.getResult();
@@ -69,9 +62,6 @@ public class Bug8675Test {
 
     @Test
     public void testParsingEmptyRootElement() throws Exception {
-        final ContainerSchemaNode topLevelContainer = (ContainerSchemaNode) fooModule.findDataChildByName(
-                QName.create(fooModule.getQNameModule(), "top-level-container")).get();
-
         final InputStream resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream(
                 "/bug8675/foo-2.xml");
 
@@ -80,7 +70,8 @@ public class Bug8675Test {
         final NormalizedNodeResult result = new NormalizedNodeResult();
         final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
 
-        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, topLevelContainer);
+        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter,
+            Inference.ofDataTreePath(schemaContext, QName.create(FOO, "top-level-container")));
         xmlParser.parse(reader);
 
         final NormalizedNode transformedInput = result.getResult();
@@ -89,9 +80,6 @@ public class Bug8675Test {
 
     @Test
     public void testListAsRootElement() throws Exception {
-        final ListSchemaNode topLevelList = (ListSchemaNode) fooModule.findDataChildByName(
-                QName.create(fooModule.getQNameModule(), "top-level-list")).get();
-
         final InputStream resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream("/bug8675/foo-3.xml");
 
         final XMLStreamReader reader = UntrustedXML.createXMLStreamReader(resourceAsStream);
@@ -99,7 +87,8 @@ public class Bug8675Test {
         final NormalizedNodeResult result = new NormalizedNodeResult();
         final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
 
-        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, topLevelList);
+        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter,
+            Inference.ofDataTreePath(schemaContext, QName.create(FOO, "top-level-list")));
         xmlParser.parse(reader);
 
         final NormalizedNode transformedInput = result.getResult();
@@ -108,9 +97,6 @@ public class Bug8675Test {
 
     @Test
     public void testAnyXmlAsRootElement() throws Exception {
-        final AnyxmlSchemaNode topLevelAnyXml = (AnyxmlSchemaNode) fooModule.findDataChildByName(
-                QName.create(fooModule.getQNameModule(), "top-level-anyxml")).get();
-
         final InputStream resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream("/bug8675/foo-4.xml");
 
         final XMLStreamReader reader = UntrustedXML.createXMLStreamReader(resourceAsStream);
@@ -118,7 +104,8 @@ public class Bug8675Test {
         final NormalizedNodeResult result = new NormalizedNodeResult();
         final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
 
-        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, topLevelAnyXml);
+        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter,
+            Inference.ofDataTreePath(schemaContext, QName.create(FOO, "top-level-anyxml")));
         xmlParser.parse(reader);
 
         final NormalizedNode transformedInput = result.getResult();
@@ -127,9 +114,6 @@ public class Bug8675Test {
 
     @Test
     public void testLeafAsRootElement() throws Exception {
-        final LeafSchemaNode topLevelLeaf = (LeafSchemaNode) fooModule.findDataChildByName(
-                QName.create(fooModule.getQNameModule(), "top-level-leaf")).get();
-
         final InputStream resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream("/bug8675/foo-5.xml");
 
         final XMLStreamReader reader = UntrustedXML.createXMLStreamReader(resourceAsStream);
@@ -137,7 +121,8 @@ public class Bug8675Test {
         final NormalizedNodeResult result = new NormalizedNodeResult();
         final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
 
-        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, topLevelLeaf);
+        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter,
+            Inference.ofDataTreePath(schemaContext, QName.create(FOO, "top-level-leaf")));
         xmlParser.parse(reader);
 
         final NormalizedNode transformedInput = result.getResult();
@@ -146,9 +131,6 @@ public class Bug8675Test {
 
     @Test
     public void testLeafListAsRootElement() throws Exception {
-        final LeafListSchemaNode topLevelLeafList = (LeafListSchemaNode) fooModule.findDataChildByName(
-                QName.create(fooModule.getQNameModule(), "top-level-leaf-list")).get();
-
         final InputStream resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream("/bug8675/foo-6.xml");
 
         final XMLStreamReader reader = UntrustedXML.createXMLStreamReader(resourceAsStream);
@@ -156,7 +138,8 @@ public class Bug8675Test {
         final NormalizedNodeResult result = new NormalizedNodeResult();
         final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
 
-        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, topLevelLeafList);
+        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter,
+            Inference.ofDataTreePath(schemaContext, QName.create(FOO, "top-level-leaf-list")));
         xmlParser.parse(reader);
 
         final NormalizedNode transformedInput = result.getResult();
index 1980e24d8415290c0fb70df4938d29204f95bf23..e6074088f59a9ff6cf308976789ec94c0aff0710 100644 (file)
@@ -35,8 +35,8 @@ import org.junit.runners.Parameterized;
 import org.opendaylight.yangtools.util.xml.UntrustedXML;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
-import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
+import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack.Inference;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 import org.w3c.dom.Document;
 import org.w3c.dom.Node;
@@ -69,9 +69,6 @@ public class Bug8745Test {
 
     @Test
     public void testParsingAttributes() throws Exception {
-        final ContainerSchemaNode contWithAttr = (ContainerSchemaNode) SCHEMA_CONTEXT.findDataTreeChild(
-            QName.create("foo", "cont-with-attributes")).orElseThrow();
-
         final Document doc = loadDocument("/bug8745/foo.xml");
         final DOMSource domSource = new DOMSource(doc.getDocumentElement());
 
@@ -83,7 +80,8 @@ public class Bug8745Test {
                 xmlStreamWriter, SCHEMA_CONTEXT);
 
         final XMLStreamReader reader = new DOMSourceXMLStreamReader(domSource);
-        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, SCHEMA_CONTEXT, contWithAttr);
+        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter,
+            Inference.ofDataTreePath(SCHEMA_CONTEXT, QName.create("foo", "cont-with-attributes")));
         xmlParser.parse(reader);
 
         XMLUnit.setIgnoreWhitespace(true);
index ee05f7a8ec6b9194ce097d2c8b6b7257f504f273..6a6367a61c24a5dd5bf669f5bb17554bc61af4fd 100644 (file)
@@ -7,8 +7,6 @@
  */
 package org.opendaylight.yangtools.yang.data.codec.xml;
 
-import static org.hamcrest.CoreMatchers.instanceOf;
-import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 
@@ -30,9 +28,8 @@ import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStre
 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter;
 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.EffectiveModelContext;
-import org.opendaylight.yangtools.yang.model.api.SchemaNode;
+import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack.Inference;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 
 @RunWith(Parameterized.class)
@@ -62,11 +59,6 @@ public class Bug8803Test {
 
     @Test
     public void test() throws Exception {
-        final SchemaNode dataSchemaNode = SCHEMA_CONTEXT.findDataTreeChild(QName.create("foo-ns", "top-cont"))
-            .orElse(null);
-        assertThat(dataSchemaNode, instanceOf(ContainerSchemaNode.class));
-        final ContainerSchemaNode topContSchema = (ContainerSchemaNode) dataSchemaNode;
-
         final InputStream resourceAsStream = Bug8803Test.class.getResourceAsStream("/bug8803/foo.xml");
 
         // deserialization
@@ -74,7 +66,8 @@ public class Bug8803Test {
 
         final NormalizedNodeResult result = new NormalizedNodeResult();
         final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
-        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, SCHEMA_CONTEXT, topContSchema);
+        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter,
+            Inference.ofDataTreePath(SCHEMA_CONTEXT, QName.create("foo-ns", "top-cont")));
         xmlParser.parse(reader);
         final NormalizedNode transformedInput = result.getResult();
         assertNotNull(transformedInput);
index d58d5363cc07eb33c0dbd3d8afab17fece18aaa5..f066a8eb7057cc7808c6bce85270201d3855b8ed 100644 (file)
@@ -13,9 +13,7 @@ import static org.junit.Assert.assertTrue;
 
 import java.io.InputStream;
 import java.util.Collection;
-import java.util.Optional;
 import javax.xml.stream.XMLStreamReader;
-import org.junit.Before;
 import org.junit.Test;
 import org.opendaylight.yangtools.util.xml.UntrustedXML;
 import org.opendaylight.yangtools.yang.common.QName;
@@ -31,10 +29,8 @@ import org.opendaylight.yangtools.yang.data.api.schema.MapNode;
 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.DataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
-import org.opendaylight.yangtools.yang.model.api.Module;
+import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack.Inference;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 
 public class Bug890Test {
@@ -42,22 +38,10 @@ public class Bug890Test {
     private static final QName OUTGOING_LABELS_QNAME = QName.create(FOO_MODULE, "outgoing-labels");
     private static final QName INDEX_QNAME = QName.create(FOO_MODULE, "index");
 
-    private EffectiveModelContext schemaContext;
-
-    @Before
-    public void setUp() throws Exception {
-        schemaContext = YangParserTestUtils.parseYangResource("/bug890/yang/foo.yang");
-    }
-
     @Test
     public void testinputXml() throws Exception {
+        final EffectiveModelContext schemaContext = YangParserTestUtils.parseYangResource("/bug890/yang/foo.yang");
         final InputStream resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream("/bug890/xml/foo.xml");
-        final Module fooModule = schemaContext.getModules().iterator().next();
-        final Optional<DataSchemaNode> rootCont = fooModule.findDataChildByName(
-                QName.create(fooModule.getQNameModule(), "root"));
-        assertTrue(rootCont.isPresent());
-        ContainerSchemaNode containerSchemaNode = (ContainerSchemaNode) rootCont.get();
-        assertNotNull(containerSchemaNode);
 
         final XMLStreamReader reader = UntrustedXML.createXMLStreamReader(resourceAsStream);
 
@@ -65,7 +49,8 @@ public class Bug890Test {
 
         final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
 
-        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, containerSchemaNode);
+        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter,
+            Inference.ofDataTreePath(schemaContext, QName.create(FOO_MODULE, "root")));
         xmlParser.parse(reader);
 
         assertNotNull(result.getResult());
index 6e715b467e850098bee5934adf4bce8cfab815e1..10c01c448efc527068c2126a7a5cfcc44117bfe0 100644 (file)
@@ -11,7 +11,6 @@ import static java.util.Objects.requireNonNull;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 
-import com.google.common.collect.ImmutableList;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.StringWriter;
@@ -39,9 +38,8 @@ import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStre
 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter;
 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.EffectiveModelContext;
-import org.opendaylight.yangtools.yang.model.util.SchemaContextUtil;
+import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack.Inference;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 import org.w3c.dom.Document;
 import org.w3c.dom.Node;
@@ -74,9 +72,6 @@ public class DOMSourceXMLStreamReaderTest {
 
     @Test
     public void test() throws Exception {
-        final ContainerSchemaNode outerContainerSchema = (ContainerSchemaNode) SchemaContextUtil
-                .findNodeInSchemaContext(SCHEMA_CONTEXT, ImmutableList.of(QName.create("foo-ns", "top-cont")));
-        assertNotNull(outerContainerSchema);
 
         // deserialization
         final Document doc = loadDocument("/dom-reader-test/foo.xml");
@@ -85,7 +80,8 @@ public class DOMSourceXMLStreamReaderTest {
 
         final NormalizedNodeResult result = new NormalizedNodeResult();
         final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
-        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, SCHEMA_CONTEXT, outerContainerSchema);
+        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter,
+            Inference.ofDataTreePath(SCHEMA_CONTEXT, QName.create("foo-ns", "top-cont")));
         xmlParser.parse(domXMLReader);
         final NormalizedNode transformedInput = result.getResult();
         assertNotNull(transformedInput);
index fefd76779f1fcfd9f0ffc2d3f0466e442a811b7a..8efda81a190a0cdc40a5ba8d4585d4a1a748478f 100644 (file)
@@ -5,10 +5,8 @@
  * 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 com.google.common.base.Preconditions.checkState;
 import static java.util.Objects.requireNonNull;
 import static org.junit.Assert.assertNotNull;
 import static org.opendaylight.yangtools.yang.data.impl.schema.Builders.augmentationBuilder;
@@ -44,6 +42,7 @@ import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 import org.opendaylight.yangtools.util.xml.UntrustedXML;
 import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.common.QNameModule;
 import org.opendaylight.yangtools.yang.common.Revision;
 import org.opendaylight.yangtools.yang.common.Uint32;
 import org.opendaylight.yangtools.yang.common.XMLNamespace;
@@ -67,14 +66,8 @@ import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.CollectionNo
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.ListNodeBuilder;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeBuilder;
-import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
-import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
-import org.opendaylight.yangtools.yang.model.api.Module;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack.Inference;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 import org.w3c.dom.Document;
 import org.w3c.dom.Node;
@@ -97,8 +90,8 @@ public class NormalizedNodeXmlTranslationTest {
         });
     }
 
-    private static final String NAMESPACE = "urn:opendaylight:params:xml:ns:yang:controller:test";
-    private static final Revision REVISION = Revision.of("2014-03-13");
+    private static final QNameModule MODULE = QNameModule.create(
+        XMLNamespace.of("urn:opendaylight:params:xml:ns:yang:controller:test"), Revision.of("2014-03-13"));
 
     private static ContainerNode augmentChoiceHell2() {
         final NodeIdentifier container = getNodeIdentifier("container");
@@ -226,7 +219,7 @@ public class NormalizedNodeXmlTranslationTest {
     }
 
     private static NodeIdentifier getNodeIdentifier(final String localName) {
-        return new NodeIdentifier(QName.create(XMLNamespace.of(NAMESPACE), REVISION, localName));
+        return new NodeIdentifier(QName.create(MODULE, localName));
     }
 
     private static AugmentationIdentifier getAugmentIdentifier(final String... childNames) {
@@ -239,18 +232,16 @@ public class NormalizedNodeXmlTranslationTest {
         return new AugmentationIdentifier(qn);
     }
 
+    private final ContainerNode expectedNode;
+    private final String xmlPath;
+
     public NormalizedNodeXmlTranslationTest(final String yangPath, final String xmlPath,
             final ContainerNode expectedNode) {
         this.schema = YangParserTestUtils.parseYangResource(yangPath);
         this.xmlPath = xmlPath;
-        this.containerNode = (ContainerSchemaNode) getSchemaNode(schema, "test", "container");
         this.expectedNode = expectedNode;
     }
 
-    private final ContainerNode expectedNode;
-    private final ContainerSchemaNode containerNode;
-    private final String xmlPath;
-
     @Test
     public void testTranslationRepairing() throws Exception {
         testTranslation(TestFactories.REPAIRING_OUTPUT_FACTORY);
@@ -269,7 +260,8 @@ public class NormalizedNodeXmlTranslationTest {
         final NormalizedNodeResult result = new NormalizedNodeResult();
         final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
 
-        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schema, containerNode);
+        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter,
+            Inference.ofDataTreePath(schema, QName.create(MODULE, "container")));
         xmlParser.parse(reader);
 
         final NormalizedNode built = result.getResult();
@@ -341,40 +333,4 @@ public class NormalizedNodeXmlTranslationTest {
             throw new RuntimeException("Unable to serialize xml element " + xml, e);
         }
     }
-
-    private static DataSchemaNode getSchemaNode(final SchemaContext context, final String moduleName,
-                                               final String childNodeName) {
-        for (Module module : context.getModules()) {
-            if (module.getName().equals(moduleName)) {
-                DataSchemaNode found = findChildNode(module, childNodeName);
-                checkState(found != null, "Unable to find %s", childNodeName);
-                return found;
-            }
-        }
-        throw new IllegalStateException("Unable to find child node " + childNodeName);
-    }
-
-    // FIXME: duplicate of NormalizedDataBuilderTest.findChildNode()
-    private static DataSchemaNode findChildNode(final DataNodeContainer container, final String name) {
-        for (DataSchemaNode dataSchemaNode : container.getChildNodes()) {
-            if (dataSchemaNode.getQName().getLocalName().equals(name)) {
-                return dataSchemaNode;
-            }
-            if (dataSchemaNode instanceof DataNodeContainer) {
-                DataSchemaNode retVal = findChildNode((DataNodeContainer) dataSchemaNode, name);
-                if (retVal != null) {
-                    return retVal;
-                }
-            } else if (dataSchemaNode instanceof ChoiceSchemaNode) {
-                for (CaseSchemaNode caseNode : ((ChoiceSchemaNode) dataSchemaNode).getCases()) {
-                    DataSchemaNode retVal = findChildNode(caseNode, name);
-                    if (retVal != null) {
-                        return retVal;
-                    }
-                }
-            }
-        }
-        return null;
-    }
-
 }
index c056e0afb32f8e69a63c8d1612b6f24be70fcdde..557b5c451100a1e6bef1f8326b9f5ae7e28545ea 100644 (file)
@@ -15,6 +15,8 @@ import static org.junit.Assert.assertThrows;
 import java.io.InputStream;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
 import org.junit.Test;
 import org.opendaylight.yangtools.util.xml.UntrustedXML;
 import org.opendaylight.yangtools.yang.common.QName;
@@ -22,22 +24,26 @@ 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.EffectiveModelContext;
-import org.opendaylight.yangtools.yang.model.api.Module;
+import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack.Inference;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 
 public class StrictParsingModeTest {
+    private static EffectiveModelContext schemaContext;
+
+    @BeforeClass
+    public static void beforeClass() {
+        schemaContext = YangParserTestUtils.parseYangResource("/strict-parsing-mode-test/foo.yang");
+    }
+
+    @AfterClass
+    public static void afterClass() {
+        schemaContext = null;
+    }
 
     @Test
+    // unknown child nodes in the top-level-container node will be skipped when the strictParsing is set to false
     public void testLenientParsing() throws Exception {
-        // unknown child nodes in the top-level-container node will be skipped when the strictParsing is set to false
-        final EffectiveModelContext schemaContext = YangParserTestUtils.parseYangResource(
-                "/strict-parsing-mode-test/foo.yang");
-        final Module fooModule = schemaContext.getModules().iterator().next();
-        final ContainerSchemaNode topLevelContainer = (ContainerSchemaNode) fooModule.findDataChildByName(
-                QName.create(fooModule.getQNameModule(), "top-level-container")).get();
-
         final InputStream resourceAsStream = StrictParsingModeTest.class.getResourceAsStream(
                 "/strict-parsing-mode-test/foo.xml");
 
@@ -46,7 +52,8 @@ public class StrictParsingModeTest {
         final NormalizedNodeResult result = new NormalizedNodeResult();
         final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
 
-        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, topLevelContainer, false);
+        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter,
+            Inference.ofDataTreePath(schemaContext, QName.create("foo", "top-level-container")), false);
         xmlParser.parse(reader);
 
         final NormalizedNode transformedInput = result.getResult();
@@ -54,15 +61,9 @@ public class StrictParsingModeTest {
     }
 
     @Test
+    // should fail because strictParsing is switched on and the top-level-container node contains child nodes
+    // which are not defined in the provided YANG model
     public void testStrictParsing() throws Exception {
-        // should fail because strictParsing is switched on and the top-level-container node contains child nodes
-        // which are not defined in the provided YANG model
-        final EffectiveModelContext schemaContext = YangParserTestUtils.parseYangResource(
-                "/strict-parsing-mode-test/foo.yang");
-        final Module fooModule = schemaContext.getModules().iterator().next();
-        final ContainerSchemaNode topLevelContainer = (ContainerSchemaNode) fooModule.findDataChildByName(
-                QName.create(fooModule.getQNameModule(), "top-level-container")).get();
-
         final InputStream resourceAsStream = StrictParsingModeTest.class.getResourceAsStream(
                 "/strict-parsing-mode-test/foo.xml");
 
@@ -71,7 +72,8 @@ public class StrictParsingModeTest {
         final NormalizedNodeResult result = new NormalizedNodeResult();
         final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
 
-        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, topLevelContainer, true);
+        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter,
+            Inference.ofDataTreePath(schemaContext, QName.create("foo", "top-level-container")), true);
 
         final XMLStreamException ex = assertThrows(XMLStreamException.class, () -> xmlParser.parse(reader));
         assertThat(ex.getMessage(), containsString("Schema for node with name unknown-container-a and namespace foo "
index 400959af6268bea16b682f75382a525c4364da17..7d4c7753a8c259cbab459583c7eb498eec6c1aeb 100644 (file)
@@ -44,8 +44,8 @@ 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.EffectiveModelContext;
+import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack.Inference;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 import org.xml.sax.SAXException;
 
@@ -79,14 +79,14 @@ public class XmlToNormalizedNodesTest {
     private static final QName MY_LEAF_IN_LIST_3 = QName.create(BAZ_MODULE, "my-leaf-in-list-3");
 
     private static EffectiveModelContext schemaContext;
-    private static ContainerSchemaNode outerContainerSchema;
-    private static ContainerSchemaNode parentContainerSchema;
+    private static Inference outerContainerSchema;
+    private static Inference parentContainerSchema;
 
     @BeforeClass
     public static void setup() {
         schemaContext = YangParserTestUtils.parseYangResourceDirectory("/");
-        parentContainerSchema = (ContainerSchemaNode) schemaContext.findDataTreeChild(PARENT_CONTAINER).orElseThrow();
-        outerContainerSchema = (ContainerSchemaNode) schemaContext.findDataTreeChild(OUTER_CONTAINER).orElseThrow();
+        parentContainerSchema = Inference.ofDataTreePath(schemaContext, PARENT_CONTAINER);
+        outerContainerSchema = Inference.ofDataTreePath(schemaContext, OUTER_CONTAINER);
     }
 
     @AfterClass
@@ -106,7 +106,7 @@ public class XmlToNormalizedNodesTest {
         final NormalizedNodeResult result = new NormalizedNodeResult();
         final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
 
-        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, outerContainerSchema);
+        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, outerContainerSchema);
         xmlParser.parse(reader);
 
         xmlParser.flush();
@@ -131,7 +131,7 @@ public class XmlToNormalizedNodesTest {
         final NormalizedNodeResult result = new NormalizedNodeResult();
         final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
 
-        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, parentContainerSchema);
+        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, parentContainerSchema);
         xmlParser.parse(reader);
 
         final NormalizedNode transformedInput = result.getResult();
@@ -148,7 +148,7 @@ public class XmlToNormalizedNodesTest {
         final NormalizedNodeResult result = new NormalizedNodeResult();
         final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
 
-        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, parentContainerSchema);
+        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, parentContainerSchema);
         final XMLStreamException ex = assertThrows(XMLStreamException.class, () -> xmlParser.parse(reader));
         assertThat(ex.getMessage(), containsString("Duplicate element \"decimal64-leaf\" in namespace"
             + " \"foo-namespace\" with parent \"container leaf-container\" in XML input"));
@@ -164,7 +164,7 @@ public class XmlToNormalizedNodesTest {
         final NormalizedNodeResult result = new NormalizedNodeResult();
         final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
 
-        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, parentContainerSchema);
+        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, parentContainerSchema);
         final XMLStreamException ex = assertThrows(XMLStreamException.class, () -> xmlParser.parse(reader));
         assertThat(ex.getMessage(), containsString("Duplicate element \"my-anyxml\" in namespace"
             + " \"foo-namespace\" with parent \"container anyxml-container\" in XML input"));
@@ -180,7 +180,7 @@ public class XmlToNormalizedNodesTest {
         final NormalizedNodeResult result = new NormalizedNodeResult();
         final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
 
-        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, parentContainerSchema);
+        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, parentContainerSchema);
         final XMLStreamException ex = assertThrows(XMLStreamException.class, () -> xmlParser.parse(reader));
         assertThat(ex.getMessage(), containsString("Duplicate element \"leaf-container\" in namespace"
             + " \"foo-namespace\" with parent \"container parent-container\" in XML input"));
@@ -196,7 +196,7 @@ public class XmlToNormalizedNodesTest {
         final NormalizedNodeResult result = new NormalizedNodeResult();
         final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
 
-        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, outerContainerSchema);
+        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, outerContainerSchema);
         final XMLStreamException ex = assertThrows(XMLStreamException.class, () -> xmlParser.parse(reader));
         assertThat(ex.getMessage(), containsString(" START_ELEMENT "));
     }
@@ -211,7 +211,7 @@ public class XmlToNormalizedNodesTest {
         final NormalizedNodeResult result = new NormalizedNodeResult();
         final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
 
-        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, outerContainerSchema);
+        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, outerContainerSchema);
         final XMLStreamException ex = assertThrows(XMLStreamException.class, () -> xmlParser.parse(reader));
         assertThat(ex.getMessage(), containsString("</my-leaf-1>"));
     }
@@ -226,7 +226,7 @@ public class XmlToNormalizedNodesTest {
         final NormalizedNodeResult result = new NormalizedNodeResult();
         final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
 
-        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, outerContainerSchema);
+        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, outerContainerSchema);
         final XMLStreamException ex = assertThrows(XMLStreamException.class, () -> xmlParser.parse(reader));
         assertThat(ex.getMessage(), containsString("</my-container-1>"));
     }
@@ -241,7 +241,7 @@ public class XmlToNormalizedNodesTest {
         final NormalizedNodeResult result = new NormalizedNodeResult();
         final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
 
-        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext, outerContainerSchema);
+        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, outerContainerSchema);
         final XMLStreamException ex = assertThrows(XMLStreamException.class, () -> xmlParser.parse(reader));
 
         assertThat(ex.getMessage(), containsString("Schema for node with name my-container-1 and namespace "
index 5b71323a5e566a1e27dce8b2a4da1dd813c523f8..1e5d445d299d98b6b367d4ac75d270c5f8ae4e1f 100644 (file)
@@ -22,6 +22,7 @@ import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
 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.EffectiveModelContext;
+import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack.Inference;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 
 public class YT1107Test {
@@ -38,8 +39,8 @@ public class YT1107Test {
 
         final NormalizedNodeResult result = new NormalizedNodeResult();
         final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
-        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, schemaContext,
-            schemaContext.findDataTreeChild(PARENT).orElseThrow());
+        final XmlParserStream xmlParser = XmlParserStream.create(streamWriter,
+            Inference.ofDataTreePath(schemaContext, PARENT));
         xmlParser.parse(reader);
 
         assertEquals(Builders.containerBuilder()