Eliminate use of SchemaPath in netconf-util 92/103192/3
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 10 Nov 2022 15:05:14 +0000 (16:05 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Thu, 10 Nov 2022 16:31:43 +0000 (17:31 +0100)
We can easily replace SchemaPath with an optional
SchemaNodeIdentifier.Absolute.

Change-Id: Ibf36b7c5eedf59f0136ab6636d0ea06a5f9b97fa
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
netconf/mdsal-netconf-notification/src/main/java/org/opendaylight/netconf/mdsal/notification/impl/NetconfNotificationManager.java
netconf/mdsal-netconf-notification/src/main/java/org/opendaylight/netconf/mdsal/notification/impl/ops/NotificationsTransformUtil.java
netconf/mdsal-netconf-notification/src/test/java/org/opendaylight/netconf/mdsal/notification/impl/ops/NotificationsTransformUtilTest.java
netconf/netconf-util/src/main/java/org/opendaylight/netconf/util/NetconfUtil.java
netconf/netconf-util/src/test/java/org/opendaylight/netconf/util/NetconfUtilTest.java
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/util/NetconfMessageTransformUtil.java

index 1b6391083ab6fda7090020102d77ee39fae2f852..f25724efb87e485113b96953abadf402ebebe524 100644 (file)
@@ -46,7 +46,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.not
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev190104.YangLibraryChange;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev190104.YangLibraryUpdate;
 import org.opendaylight.yangtools.yang.binding.Notification;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -276,10 +276,9 @@ public class NetconfNotificationManager implements NetconfNotificationCollector,
     }
 
     private static class BaseNotificationPublisherReg implements BaseNotificationPublisherRegistration {
-
-        static final SchemaPath CAPABILITY_CHANGE_SCHEMA_PATH = SchemaPath.create(true, NetconfCapabilityChange.QNAME);
-        static final SchemaPath SESSION_START_PATH = SchemaPath.create(true, NetconfSessionStart.QNAME);
-        static final SchemaPath SESSION_END_PATH = SchemaPath.create(true, NetconfSessionEnd.QNAME);
+        static final Absolute CAPABILITY_CHANGE_SCHEMA_PATH = Absolute.of(NetconfCapabilityChange.QNAME);
+        static final Absolute SESSION_START_PATH = Absolute.of(NetconfSessionStart.QNAME);
+        static final Absolute SESSION_END_PATH = Absolute.of(NetconfSessionEnd.QNAME);
 
         private final NotificationPublisherRegistration baseRegistration;
         private final NotificationsTransformUtil transformUtil;
@@ -295,7 +294,7 @@ public class NetconfNotificationManager implements NetconfNotificationCollector,
             baseRegistration.close();
         }
 
-        private NetconfNotification serializeNotification(final Notification notification, final SchemaPath path) {
+        private NetconfNotification serializeNotification(final Notification<?> notification, final Absolute path) {
             return transformUtil.transform(notification, path);
         }
 
@@ -317,8 +316,8 @@ public class NetconfNotificationManager implements NetconfNotificationCollector,
     }
 
     private static class YangLibraryPublisherReg implements YangLibraryPublisherRegistration {
-        static final SchemaPath YANG_LIBRARY_CHANGE_PATH = SchemaPath.create(true, YangLibraryChange.QNAME);
-        static final SchemaPath YANG_LIBRARY_UPDATE_PATH = SchemaPath.create(true, YangLibraryUpdate.QNAME);
+        static final Absolute YANG_LIBRARY_CHANGE_PATH = Absolute.of(YangLibraryChange.QNAME);
+        static final Absolute YANG_LIBRARY_UPDATE_PATH = Absolute.of(YangLibraryUpdate.QNAME);
 
         private final NotificationPublisherRegistration baseRegistration;
         private final NotificationsTransformUtil transformUtil;
index 10c8bc331f9f8ea621bbd3f4fd419753335be17c..f6ae762330f5a94dd58c985a92148b13693fef7c 100644 (file)
@@ -30,7 +30,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.librar
 import org.opendaylight.yangtools.yang.binding.Notification;
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
 import org.opendaylight.yangtools.yang.parser.api.YangParserException;
 import org.opendaylight.yangtools.yang.parser.api.YangParserFactory;
 import org.w3c.dom.Document;
@@ -55,20 +55,21 @@ public final class NotificationsTransformUtil {
     /**
      * Transform base notification for capabilities into NetconfNotification.
      */
-    public NetconfNotification transform(final Notification notification, final SchemaPath path) {
+    public NetconfNotification transform(final Notification<?> notification, final Absolute path) {
         return transform(notification, Optional.empty(), path);
     }
 
-    public NetconfNotification transform(final Notification notification, final Date eventTime, final SchemaPath path) {
+    public NetconfNotification transform(final Notification<?> notification, final Date eventTime,
+            final Absolute path) {
         return transform(notification, Optional.ofNullable(eventTime), path);
     }
 
-    private NetconfNotification transform(final Notification notification, final Optional<Date> eventTime,
-            final SchemaPath path) {
+    private NetconfNotification transform(final Notification<?> notification, final Optional<Date> eventTime,
+            final Absolute path) {
         final ContainerNode containerNode = serializer.toNormalizedNodeNotification(notification);
         final DOMResult result = new DOMResult(XmlUtil.newDocument());
         try {
-            NetconfUtil.writeNormalizedNode(containerNode, result, path, schemaContext);
+            NetconfUtil.writeNormalizedNode(containerNode, result, schemaContext, path);
         } catch (final XMLStreamException | IOException e) {
             throw new IllegalStateException("Unable to serialize " + notification, e);
         }
index 6f0e58dfde857124453788737f1323598c5f520e..1b00fbd3da61e73fe3a4f2c46f17020564d30094 100644 (file)
@@ -25,7 +25,7 @@ import org.opendaylight.netconf.notifications.NetconfNotification;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.NetconfCapabilityChange;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.NetconfCapabilityChangeBuilder;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
 import org.opendaylight.yangtools.yang.parser.api.YangParserException;
 import org.opendaylight.yangtools.yang.parser.impl.DefaultYangParserFactory;
 import org.xml.sax.SAXException;
@@ -64,7 +64,7 @@ public class NotificationsTransformUtilTest {
 
         final NetconfCapabilityChange capabilityChange = netconfCapabilityChangeBuilder.build();
         final NetconfNotification transform = UTIL.transform(capabilityChange, DATE,
-                SchemaPath.create(true, NetconfCapabilityChange.QNAME));
+            Absolute.of(NetconfCapabilityChange.QNAME));
 
         final String serialized = XmlUtil.toString(transform.getDocument());
 
index 867c782776c36f1cd372dcade4449e7ef4359d15..96072648bd5cd51e1b1f6ff991443c31cb302c94 100644 (file)
@@ -21,6 +21,7 @@ import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamWriter;
 import javax.xml.transform.dom.DOMResult;
 import javax.xml.transform.dom.DOMSource;
+import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.netconf.api.DocumentedException;
 import org.opendaylight.netconf.api.xml.XmlElement;
@@ -46,7 +47,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.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
@@ -139,15 +140,15 @@ public final class NetconfUtil {
      *
      * @param normalized data to be written
      * @param result     DOM result holder
-     * @param schemaPath schema path of the parent node
      * @param context    mountpoint schema context
+     * @param path       optional schema node identifier of the parent node
      * @throws IOException        when failed to write data into {@link NormalizedNodeStreamWriter}
      * @throws XMLStreamException when failed to serialize data into XML document
      */
     public static void writeNormalizedNode(final NormalizedNode normalized, final DOMResult result,
-            final SchemaPath schemaPath, final EffectiveModelContext context) throws IOException, XMLStreamException {
+            final EffectiveModelContext context, final @Nullable Absolute path) throws IOException, XMLStreamException {
         final XMLStreamWriter xmlWriter = XML_FACTORY.createXMLStreamWriter(result);
-        try (var streamWriter = XMLStreamNormalizedNodeStreamWriter.create(xmlWriter, context, schemaPath);
+        try (var streamWriter = newWriter(xmlWriter, context, path);
              var writer = NormalizedNodeWriter.forStreamWriter(streamWriter)) {
             writer.write(normalized);
             writer.flush();
@@ -162,22 +163,22 @@ public final class NetconfUtil {
      * @param normalized data to be written
      * @param metadata   metadata to be written
      * @param result     DOM result holder
-     * @param schemaPath schema path of the parent node
      * @param context    mountpoint schema context
+     * @param path       optional schema node identifier of the parent node
      * @throws IOException        when failed to write data into {@link NormalizedNodeStreamWriter}
      * @throws XMLStreamException when failed to serialize data into XML document
      */
     public static void writeNormalizedNode(final NormalizedNode normalized, final @Nullable NormalizedMetadata metadata,
-            final DOMResult result, final SchemaPath schemaPath, final EffectiveModelContext context)
+            final DOMResult result, final EffectiveModelContext context, final @Nullable Absolute path)
                 throws IOException, XMLStreamException {
         if (metadata == null) {
-            writeNormalizedNode(normalized, result, schemaPath, context);
+            writeNormalizedNode(normalized, result, context, path);
             return;
         }
 
         final XMLStreamWriter xmlWriter = XML_FACTORY.createXMLStreamWriter(result);
         XML_NAMESPACE_SETTER.initializeNamespace(xmlWriter);
-        try (var streamWriter = XMLStreamNormalizedNodeStreamWriter.create(xmlWriter, context, schemaPath);
+        try (var streamWriter = newWriter(xmlWriter, context, path);
              var writer = NormalizedMetadataWriter.forStreamWriter(streamWriter)) {
             writer.write(normalized, metadata);
             writer.flush();
@@ -191,16 +192,16 @@ public final class NetconfUtil {
      *
      * @param query      path to the root node
      * @param result     DOM result holder
-     * @param schemaPath schema path of the parent node
      * @param context    mountpoint schema context
+     * @param path       optional schema node identifier of the parent node
      * @throws IOException        when failed to write data into {@link NormalizedNodeStreamWriter}
      * @throws XMLStreamException when failed to serialize data into XML document
      */
     public static void writeNormalizedNode(final YangInstanceIdentifier query, final DOMResult result,
-            final SchemaPath schemaPath, final EffectiveModelContext context) throws IOException, XMLStreamException {
+            final EffectiveModelContext context, final @Nullable Absolute path) throws IOException, XMLStreamException {
         final XMLStreamWriter xmlWriter = XML_FACTORY.createXMLStreamWriter(result);
         XML_NAMESPACE_SETTER.initializeNamespace(xmlWriter);
-        try (var streamWriter = XMLStreamNormalizedNodeStreamWriter.create(xmlWriter, context, schemaPath);
+        try (var streamWriter = newWriter(xmlWriter, context, path);
              var writer = new EmptyListXmlWriter(streamWriter, xmlWriter)) {
             final Iterator<PathArgument> it = query.getPathArguments().iterator();
             final PathArgument first = it.next();
@@ -217,22 +218,22 @@ public final class NetconfUtil {
      * @param query      path to the root node
      * @param metadata   metadata to be written
      * @param result     DOM result holder
-     * @param schemaPath schema path of the parent node
      * @param context    mountpoint schema context
+     * @param path       optional schema node identifier of the parent node
      * @throws IOException        when failed to write data into {@link NormalizedNodeStreamWriter}
      * @throws XMLStreamException when failed to serialize data into XML document
      */
     public static void writeNormalizedNode(final YangInstanceIdentifier query,
-            final @Nullable NormalizedMetadata metadata, final DOMResult result, final SchemaPath schemaPath,
-            final EffectiveModelContext context) throws IOException, XMLStreamException {
+            final @Nullable NormalizedMetadata metadata, final DOMResult result, final EffectiveModelContext context,
+            final @Nullable Absolute path) throws IOException, XMLStreamException {
         if (metadata == null) {
-            writeNormalizedNode(query, result, schemaPath, context);
+            writeNormalizedNode(query, result, context, path);
             return;
         }
 
         final XMLStreamWriter xmlWriter = XML_FACTORY.createXMLStreamWriter(result);
         XML_NAMESPACE_SETTER.initializeNamespace(xmlWriter);
-        try (var streamWriter = XMLStreamNormalizedNodeStreamWriter.create(xmlWriter, context, schemaPath);
+        try (var streamWriter = newWriter(xmlWriter, context, path);
              var writer = new EmptyListXmlMetadataWriter(streamWriter, xmlWriter,
                  streamWriter.getExtensions().getInstance(StreamWriterMetadataExtension.class), metadata)) {
             final Iterator<PathArgument> it = query.getPathArguments().iterator();
@@ -248,20 +249,20 @@ public final class NetconfUtil {
      *
      * @param query      path to the root node
      * @param result     DOM result holder
-     * @param schemaPath schema path of the parent node
      * @param context    mountpoint schema context
+     * @param path       optional schema node identifier of the parent node
      * @throws IOException        failed to write filter into {@link NormalizedNodeStreamWriter}
      * @throws XMLStreamException failed to serialize filter into XML document
      */
     public static void writeFilter(final YangInstanceIdentifier query, final DOMResult result,
-            final SchemaPath schemaPath, final EffectiveModelContext context) throws IOException, XMLStreamException {
+            final EffectiveModelContext context, final @Nullable Absolute path) throws IOException, XMLStreamException {
         if (query.isEmpty()) {
             // No query at all
             return;
         }
 
         final XMLStreamWriter xmlWriter = XML_FACTORY.createXMLStreamWriter(result);
-        try (var streamWriter = XMLStreamNormalizedNodeStreamWriter.create(xmlWriter, context, schemaPath);
+        try (var streamWriter = newWriter(xmlWriter, context, path);
              var writer = new EmptyListXmlWriter(streamWriter, xmlWriter)) {
             final Iterator<PathArgument> it = query.getPathArguments().iterator();
             final PathArgument first = it.next();
@@ -277,15 +278,15 @@ public final class NetconfUtil {
      *
      * @param query      path to the root node
      * @param result     DOM result holder
-     * @param schemaPath schema path of the parent node
      * @param context    mountpoint schema context
+     * @param path       optional schema node identifier of the parent node
      * @param fields     list of specific fields for which the filter should be created
      * @throws IOException        failed to write filter into {@link NormalizedNodeStreamWriter}
      * @throws XMLStreamException failed to serialize filter into XML document
      * @throws NullPointerException if any argument is null
      */
     public static void writeFilter(final YangInstanceIdentifier query, final DOMResult result,
-                                   final SchemaPath schemaPath, final EffectiveModelContext context,
+                                   final EffectiveModelContext context, final @Nullable Absolute path,
                                    final List<YangInstanceIdentifier> fields) throws IOException, XMLStreamException {
         if (query.isEmpty() || fields.isEmpty()) {
             // No query at all
@@ -297,7 +298,7 @@ public final class NetconfUtil {
 
         final XMLStreamWriter xmlWriter = XML_FACTORY.createXMLStreamWriter(result);
         try {
-            try (var streamWriter = XMLStreamNormalizedNodeStreamWriter.create(xmlWriter, context, schemaPath);
+            try (var streamWriter = newWriter(xmlWriter, context, path);
                  var writer = new EmptyListXmlWriter(streamWriter, xmlWriter)) {
                 final PathArgument first = rootNode.element();
                 StreamingContext.fromSchemaAndQNameChecked(context, first.getNodeType())
@@ -416,4 +417,11 @@ public final class NetconfUtil {
             final DOMSource value) throws XMLStreamException, URISyntaxException, IOException, SAXException {
         return transformDOMSourceToNormalizedNode(new EmptyMountPointContext(schemaContext), value);
     }
+
+    // FIXME: this should not be needed once we have yangtools-10.0.1.
+    private static @NonNull NormalizedNodeStreamWriter newWriter(final XMLStreamWriter writer,
+            final EffectiveModelContext context, final @Nullable Absolute path) {
+        return path == null ? XMLStreamNormalizedNodeStreamWriter.create(writer, context)
+            : XMLStreamNormalizedNodeStreamWriter.create(writer, context, path);
+    }
 }
index fd291b22ad6ac569e3daa6e52b730283fb595cd2..0ba23df973572c1ba47733c1c17fe9995acda45d 100644 (file)
@@ -33,7 +33,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
 import org.opendaylight.yangtools.yang.data.api.schema.MapNode;
 import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
 import org.w3c.dom.Document;
 
 public class NetconfUtilTest {
@@ -75,8 +75,7 @@ public class NetconfUtilTest {
                 .withChild(sessionList)
                 .build();
         final DOMResult result = new DOMResult(XmlUtil.newDocument());
-        final SchemaPath path = SchemaPath.create(true, NetconfState.QNAME);
-        NetconfUtil.writeNormalizedNode(sessions, result, path, context);
+        NetconfUtil.writeNormalizedNode(sessions, result, context, Absolute.of(NetconfState.QNAME));
         final Document actual = (Document) result.getNode();
         final Document expected = XmlUtil.readXmlToDocument(getClass().getResourceAsStream("/sessions.xml"));
         final Diff diff = XMLUnit.compareXML(expected, actual);
index e740c6d9a91d5a5e1e1b7af76daea4daa45f64d8..a4c8f909f81421411ec364f2d5ef3a899a384fa4 100644 (file)
@@ -148,14 +148,14 @@ public final class NetconfMessageTransformUtil {
     public static final @NonNull NodeIdentifier NETCONF_CONFIG_NODEID = NodeIdentifier.create(NETCONF_CONFIG_QNAME);
 
     public static final @NonNull QName NETCONF_COMMIT_QNAME = QName.create(NETCONF_QNAME, "commit").intern();
-    public static final @NonNull SchemaPath NETCONF_COMMIT_PATH = toPath(NETCONF_COMMIT_QNAME);
+    public static final @NonNull Absolute NETCONF_COMMIT_PATH = toPath(NETCONF_COMMIT_QNAME);
     public static final @NonNull QName NETCONF_VALIDATE_QNAME = QName.create(NETCONF_QNAME, "validate").intern();
     public static final @NonNull NodeIdentifier NETCONF_VALIDATE_NODEID = NodeIdentifier.create(NETCONF_VALIDATE_QNAME);
-    public static final @NonNull SchemaPath NETCONF_VALIDATE_PATH = toPath(NETCONF_VALIDATE_QNAME);
+    public static final @NonNull Absolute NETCONF_VALIDATE_PATH = toPath(NETCONF_VALIDATE_QNAME);
     public static final @NonNull QName NETCONF_COPY_CONFIG_QNAME = QName.create(NETCONF_QNAME, "copy-config").intern();
     public static final @NonNull NodeIdentifier NETCONF_COPY_CONFIG_NODEID =
         NodeIdentifier.create(NETCONF_COPY_CONFIG_QNAME);
-    public static final @NonNull SchemaPath NETCONF_COPY_CONFIG_PATH = toPath(NETCONF_COPY_CONFIG_QNAME);
+    public static final @NonNull Absolute NETCONF_COPY_CONFIG_PATH = toPath(NETCONF_COPY_CONFIG_QNAME);
 
     public static final @NonNull QName NETCONF_OPERATION_QNAME = QName.create(NETCONF_QNAME, "operation").intern();
     private static final @NonNull QName NETCONF_OPERATION_QNAME_LEGACY =
@@ -167,18 +167,18 @@ public final class NetconfMessageTransformUtil {
     public static final @NonNull QName NETCONF_EDIT_CONFIG_QNAME = QName.create(NETCONF_QNAME, "edit-config").intern();
     public static final @NonNull NodeIdentifier NETCONF_EDIT_CONFIG_NODEID =
         NodeIdentifier.create(NETCONF_EDIT_CONFIG_QNAME);
-    public static final @NonNull SchemaPath NETCONF_EDIT_CONFIG_PATH = toPath(NETCONF_EDIT_CONFIG_QNAME);
+    public static final @NonNull Absolute NETCONF_EDIT_CONFIG_PATH = toPath(NETCONF_EDIT_CONFIG_QNAME);
     public static final @NonNull QName NETCONF_GET_CONFIG_QNAME = QName.create(NETCONF_QNAME, "get-config");
     public static final @NonNull NodeIdentifier NETCONF_GET_CONFIG_NODEID =
         NodeIdentifier.create(NETCONF_GET_CONFIG_QNAME);
-    public static final @NonNull SchemaPath NETCONF_GET_CONFIG_PATH = toPath(NETCONF_GET_CONFIG_QNAME);
+    public static final @NonNull Absolute NETCONF_GET_CONFIG_PATH = toPath(NETCONF_GET_CONFIG_QNAME);
     public static final @NonNull QName NETCONF_DISCARD_CHANGES_QNAME = QName.create(NETCONF_QNAME, "discard-changes");
-    public static final @NonNull SchemaPath NETCONF_DISCARD_CHANGES_PATH = toPath(NETCONF_DISCARD_CHANGES_QNAME);
+    public static final @NonNull Absolute NETCONF_DISCARD_CHANGES_PATH = toPath(NETCONF_DISCARD_CHANGES_QNAME);
     public static final @NonNull QName NETCONF_TYPE_QNAME = QName.create(NETCONF_QNAME, "type").intern();
     public static final @NonNull QName NETCONF_FILTER_QNAME = QName.create(NETCONF_QNAME, "filter").intern();
     public static final @NonNull QName NETCONF_GET_QNAME = QName.create(NETCONF_QNAME, "get").intern();
     public static final @NonNull NodeIdentifier NETCONF_GET_NODEID = NodeIdentifier.create(NETCONF_GET_QNAME);
-    public static final @NonNull SchemaPath NETCONF_GET_PATH = toPath(NETCONF_GET_QNAME);
+    public static final @NonNull Absolute NETCONF_GET_PATH = toPath(NETCONF_GET_QNAME);
     public static final @NonNull QName NETCONF_RPC_QNAME = QName.create(NETCONF_QNAME, "rpc").intern();
     public static final QName YANG_QNAME = null;
     public static final URI NETCONF_ACTION_NAMESPACE = URI.create("urn:ietf:params:xml:ns:yang:1");
@@ -199,10 +199,10 @@ public final class NetconfMessageTransformUtil {
 
     public static final @NonNull QName NETCONF_LOCK_QNAME = QName.create(NETCONF_QNAME, "lock").intern();
     public static final @NonNull NodeIdentifier NETCONF_LOCK_NODEID = NodeIdentifier.create(NETCONF_LOCK_QNAME);
-    public static final @NonNull SchemaPath NETCONF_LOCK_PATH = toPath(NETCONF_LOCK_QNAME);
+    public static final @NonNull Absolute NETCONF_LOCK_PATH = toPath(NETCONF_LOCK_QNAME);
     public static final @NonNull QName NETCONF_UNLOCK_QNAME = QName.create(NETCONF_QNAME, "unlock").intern();
     public static final @NonNull NodeIdentifier NETCONF_UNLOCK_NODEID = NodeIdentifier.create(NETCONF_UNLOCK_QNAME);
-    public static final @NonNull SchemaPath NETCONF_UNLOCK_PATH = toPath(NETCONF_UNLOCK_QNAME);
+    public static final @NonNull Absolute NETCONF_UNLOCK_PATH = toPath(NETCONF_UNLOCK_QNAME);
 
     public static final @NonNull NodeIdentifier EDIT_CONTENT_NODEID = NodeIdentifier.create(EditContent.QNAME);
 
@@ -222,7 +222,7 @@ public final class NetconfMessageTransformUtil {
     public static final @NonNull ContainerNode CREATE_SUBSCRIPTION_RPC_CONTENT = Builders.containerBuilder()
             .withNodeIdentifier(NodeIdentifier.create(CREATE_SUBSCRIPTION_RPC_QNAME)).build();
 
-    public static final @NonNull SchemaPath CREATE_SUBSCRIPTION_RPC_PATH = toPath(CREATE_SUBSCRIPTION_RPC_QNAME);
+    public static final @NonNull Absolute CREATE_SUBSCRIPTION_RPC_PATH = toPath(CREATE_SUBSCRIPTION_RPC_QNAME);
 
     public static final @NonNull NodeIdentifier NETCONF_FILTER_NODEID = NodeIdentifier.create(NETCONF_FILTER_QNAME);
 
@@ -239,7 +239,7 @@ public final class NetconfMessageTransformUtil {
                                                        final EffectiveModelContext ctx) {
         final Element element = getNetconfFilterElement();
         try {
-            NetconfUtil.writeFilter(identifier, new DOMResult(element), SchemaPath.ROOT, ctx);
+            NetconfUtil.writeFilter(identifier, new DOMResult(element), ctx, null);
         } catch (IOException | XMLStreamException e) {
             throw new IllegalStateException("Unable to serialize filter element for path " + identifier, e);
         }
@@ -261,7 +261,7 @@ public final class NetconfMessageTransformUtil {
 
         for (final FieldsFilter filter : fieldsFilters) {
             try {
-                NetconfUtil.writeFilter(filter.path(), new DOMResult(element), SchemaPath.ROOT, ctx, filter.fields());
+                NetconfUtil.writeFilter(filter.path(), new DOMResult(element), ctx, null, filter.fields());
             } catch (IOException | XMLStreamException e) {
                 throw new IllegalStateException(String.format(
                         "Unable to serialize filter element for path %s with fields: %s",
@@ -385,10 +385,9 @@ public final class NetconfMessageTransformUtil {
                         nnWriter.write(lastChildOverride.get());
                     }
                 }
-                NetconfUtil.writeNormalizedNode(result.getResult(), metadata, new DOMResult(element),
-                        SchemaPath.ROOT, ctx);
+                NetconfUtil.writeNormalizedNode(result.getResult(), metadata, new DOMResult(element), ctx, null);
             } else {
-                NetconfUtil.writeNormalizedNode(dataPath, metadata, new DOMResult(element), SchemaPath.ROOT, ctx);
+                NetconfUtil.writeNormalizedNode(dataPath, metadata, new DOMResult(element), ctx, null);
             }
         } catch (final IOException | XMLStreamException e) {
             throw new IllegalStateException("Unable to serialize edit config content element for path " + dataPath, e);
@@ -429,8 +428,8 @@ public final class NetconfMessageTransformUtil {
                 .withChild(createEditConfigAnyxml(ctx, dataPath, operation, lastChildOverride)).build();
     }
 
-    public static @NonNull SchemaPath toPath(final QName rpc) {
-        return SchemaPath.ROOT.createChild(rpc);
+    public static @NonNull Absolute toPath(final QName rpc) {
+        return Absolute.of(rpc);
     }
 
     public static Map.Entry<Instant, XmlElement> stripNotification(final NetconfMessage message) {