Revert "Convert anyxml nodes lazily" 96/82396/2
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 4 Jun 2019 15:18:30 +0000 (17:18 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Tue, 4 Jun 2019 15:19:02 +0000 (17:19 +0200)
This reverts commit 49988c53b1741cca9797373eba0c8d7f21a7da3d,
as it breaks CSIT.

JIRA: NETCONF-616
Change-Id: I48bdde78422006c188096620d4029e255b950bc2
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 files changed:
netconf/netconf-util/src/main/java/org/opendaylight/netconf/util/NetconfUtil.java
netconf/sal-netconf-connector/pom.xml
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/api/NetconfDeviceSchemasResolver.java
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDevice.java
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfStateSchemas.java
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfStateSchemasResolverImpl.java
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/NetconfMessageTransformer.java
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/util/NetconfMessageTransformUtil.java
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/util/NodeContainerProxy.java [moved from netconf/netconf-util/src/main/java/org/opendaylight/netconf/util/NodeContainerProxy.java with 98% similarity]
netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDeviceTest.java
netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/NetconfStateSchemasTest.java
netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceRpcTest.java
netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/NetconfMessageTransformerTest.java
netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/util/NodeContainerProxyTest.java
restconf/restconf-nb-bierman02/pom.xml
restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/NormalizedNodeJsonBodyWriter.java
restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/FakeContainerSchemaNode.java
restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/FakeRestconfModule.java
restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/RestconfImpl.java

index 217f106df265d226478b062ce4a87d80b96d5314..635c507ad40cdfcba6211a4b3aaef86580564d07 100644 (file)
@@ -9,13 +9,11 @@ package org.opendaylight.netconf.util;
 
 import com.google.common.base.Preconditions;
 import java.io.IOException;
-import java.net.URISyntaxException;
 import java.util.Iterator;
 import javax.xml.stream.XMLOutputFactory;
 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.Nullable;
 import org.opendaylight.netconf.api.DocumentedException;
 import org.opendaylight.netconf.api.xml.XmlElement;
@@ -23,33 +21,22 @@ import org.opendaylight.netconf.api.xml.XmlNetconfConstants;
 import org.opendaylight.netconf.api.xml.XmlUtil;
 import org.opendaylight.yangtools.rfc7952.data.api.NormalizedMetadata;
 import org.opendaylight.yangtools.rfc7952.data.util.NormalizedMetadataWriter;
-import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 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.api.schema.stream.NormalizedNodeWriter;
 import org.opendaylight.yangtools.yang.data.codec.xml.XMLStreamNormalizedNodeStreamWriter;
-import org.opendaylight.yangtools.yang.data.codec.xml.XmlCodecFactory;
-import org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream;
-import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter;
-import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult;
-import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
-import org.xml.sax.SAXException;
 
 public final class NetconfUtil {
 
-    public static final QName NETCONF_QNAME =
-            QName.create("urn:ietf:params:xml:ns:netconf:base:1.0", "2011-06-01", "netconf").intern();
-    public static final QName NETCONF_DATA_QNAME = QName.create(NETCONF_QNAME, "data").intern();
-    public static final XMLOutputFactory XML_FACTORY;
-
     private static final Logger LOG = LoggerFactory.getLogger(NetconfUtil.class);
+    public static final XMLOutputFactory XML_FACTORY;
 
     static {
         XML_FACTORY = XMLOutputFactory.newFactory();
@@ -144,16 +131,4 @@ public final class NetconfUtil {
             xmlWriter.close();
         }
     }
-
-    public static NormalizedNodeResult transformDOMSourceToNormalizedNode(final SchemaContext schemaContext,
-            final DOMSource value) throws XMLStreamException, URISyntaxException, IOException, SAXException {
-        final NormalizedNodeResult resultHolder = new NormalizedNodeResult();
-        final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(resultHolder);
-        final XmlCodecFactory codecs = XmlCodecFactory.create(schemaContext);
-        final ContainerSchemaNode dataRead = new NodeContainerProxy(NETCONF_DATA_QNAME, schemaContext.getChildNodes());
-        try (XmlParserStream xmlParserStream = XmlParserStream.create(writer, codecs, dataRead)) {
-            xmlParserStream.traverse(value);
-        }
-        return resultHolder;
-    }
 }
index 800247689b68776843d7fca9123fe6c4f0f634a8..1d1cecbfff69e5423801809f5325147eb47a7f22 100644 (file)
       <groupId>org.opendaylight.mdsal.model</groupId>
       <artifactId>yang-ext</artifactId>
     </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>netconf-util</artifactId>
-    </dependency>
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
index 6404842994fbf434d9aa2818b3d8c07a994e9e6d..8031c15554facdb0cb378016c59e26b33153079b 100644 (file)
@@ -11,13 +11,11 @@ package org.opendaylight.netconf.sal.connect.api;
 import org.opendaylight.netconf.sal.connect.netconf.listener.NetconfSessionPreferences;
 import org.opendaylight.netconf.sal.connect.netconf.sal.NetconfDeviceRpc;
 import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 
 /**
  * Factory for netconf device schemas.
  */
 public interface NetconfDeviceSchemasResolver {
     NetconfDeviceSchemas resolve(
-            NetconfDeviceRpc deviceRpc, NetconfSessionPreferences remoteSessionCapabilities, RemoteDeviceId id,
-            SchemaContext schemaContext);
+            NetconfDeviceRpc deviceRpc, NetconfSessionPreferences remoteSessionCapabilities, RemoteDeviceId id);
 }
index dfd72c60de4054d133c9c0cf51df4de86a82970c..84194ea3a55e2051b789a8d6417ff0e2f3c7c67b 100644 (file)
@@ -106,16 +106,14 @@ public class NetconfDevice
      */
     static NetconfDeviceRpc getRpcForInitialization(final NetconfDeviceCommunicator listener,
                                                     final boolean notificationSupport) {
-        final BaseSchema baseSchema = resolveBaseSchema(notificationSupport);
+        final BaseSchema baseSchema = notificationSupport
+                ? BaseSchema.BASE_NETCONF_CTX_WITH_NOTIFICATIONS
+                : BaseSchema.BASE_NETCONF_CTX;
 
         return new NetconfDeviceRpc(baseSchema.getSchemaContext(), listener,
                 new NetconfMessageTransformer(baseSchema.getSchemaContext(), false, baseSchema));
     }
 
-    private static BaseSchema resolveBaseSchema(final boolean notificationSupport) {
-        return notificationSupport ? BaseSchema.BASE_NETCONF_CTX_WITH_NOTIFICATIONS : BaseSchema.BASE_NETCONF_CTX;
-    }
-
     public NetconfDevice(final SchemaResourcesDTO schemaResourcesDTO, final RemoteDeviceId id,
                          final RemoteDeviceHandler<NetconfSessionPreferences> salFacade,
                          final ListeningExecutorService globalProcessingExecutor,
@@ -153,8 +151,7 @@ public class NetconfDevice
         final NetconfDeviceRpc initRpc =
                 getRpcForInitialization(listener, remoteSessionCapabilities.isNotificationsSupported());
         final DeviceSourcesResolver task =
-                new DeviceSourcesResolver(remoteSessionCapabilities, id, stateSchemasResolver, initRpc,
-                        resolveBaseSchema(remoteSessionCapabilities.isNotificationsSupported()).getSchemaContext());
+                new DeviceSourcesResolver(remoteSessionCapabilities, id, stateSchemasResolver, initRpc);
         final ListenableFuture<DeviceSources> sourceResolverFuture = processingExecutor.submit(task);
 
         if (shouldListenOnSchemaChange(remoteSessionCapabilities)) {
@@ -352,29 +349,26 @@ public class NetconfDevice
         private final NetconfSessionPreferences remoteSessionCapabilities;
         private final RemoteDeviceId id;
         private final NetconfDeviceSchemasResolver stateSchemasResolver;
-        private final SchemaContext schemaContext;
 
         DeviceSourcesResolver(final NetconfDeviceRpc deviceRpc,
                               final NetconfSessionPreferences remoteSessionCapabilities,
-                              final RemoteDeviceId id, final NetconfDeviceSchemasResolver stateSchemasResolver,
-                              final SchemaContext schemaContext) {
+                              final RemoteDeviceId id, final NetconfDeviceSchemasResolver stateSchemasResolver) {
             this.deviceRpc = deviceRpc;
             this.remoteSessionCapabilities = remoteSessionCapabilities;
             this.id = id;
             this.stateSchemasResolver = stateSchemasResolver;
-            this.schemaContext = schemaContext;
         }
 
         DeviceSourcesResolver(final NetconfSessionPreferences remoteSessionCapabilities, final RemoteDeviceId id,
                                      final NetconfDeviceSchemasResolver stateSchemasResolver,
-                                     final NetconfDeviceRpc rpcForMonitoring, final SchemaContext schemaCtx) {
-            this(rpcForMonitoring, remoteSessionCapabilities, id, stateSchemasResolver, schemaCtx);
+                                     final NetconfDeviceRpc rpcForMonitoring) {
+            this(rpcForMonitoring, remoteSessionCapabilities, id, stateSchemasResolver);
         }
 
         @Override
         public DeviceSources call() {
             final NetconfDeviceSchemas availableSchemas =
-                    stateSchemasResolver.resolve(deviceRpc, remoteSessionCapabilities, id, schemaContext);
+                    stateSchemasResolver.resolve(deviceRpc, remoteSessionCapabilities, id);
             LOG.debug("{}: Schemas exposed by ietf-netconf-monitoring: {}", id,
                     availableSchemas.getAvailableYangSchemasQNames());
 
index 06765305f4b71a8224d5a2df757916f4e9165a71..bec05994ef3e8beda133821dcfa7a6b2b22e133e 100644 (file)
@@ -9,7 +9,6 @@ package org.opendaylight.netconf.sal.connect.netconf;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkState;
-import static com.google.common.base.Verify.verify;
 import static org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil.NETCONF_DATA_NODEID;
 import static org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil.NETCONF_GET_NODEID;
 import static org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil.NETCONF_GET_PATH;
@@ -18,14 +17,11 @@ import static org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTr
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableSet;
-import java.io.IOException;
 import java.net.URI;
-import java.net.URISyntaxException;
 import java.util.HashSet;
 import java.util.Optional;
 import java.util.Set;
 import java.util.concurrent.ExecutionException;
-import javax.xml.stream.XMLStreamException;
 import org.opendaylight.mdsal.dom.api.DOMRpcResult;
 import org.opendaylight.mdsal.dom.api.DOMRpcService;
 import org.opendaylight.netconf.sal.connect.api.NetconfDeviceSchemas;
@@ -33,14 +29,12 @@ import org.opendaylight.netconf.sal.connect.netconf.listener.NetconfSessionPrefe
 import org.opendaylight.netconf.sal.connect.netconf.schema.mapping.BaseSchema;
 import org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil;
 import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId;
-import org.opendaylight.netconf.util.NetconfUtil;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.NetconfState;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.Yang;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.Schemas;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.schemas.Schema;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.data.api.schema.AnyXmlNode;
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
 import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild;
 import org.opendaylight.yangtools.yang.data.api.schema.DataContainerNode;
@@ -50,10 +44,8 @@ import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
 import org.opendaylight.yangtools.yang.data.api.schema.MapNode;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.xml.sax.SAXException;
 
 /**
  * Holds QNames for all yang modules reported by ietf-netconf-monitoring/state/schemas.
@@ -96,8 +88,7 @@ public final class NetconfStateSchemas implements NetconfDeviceSchemas {
      * Issue get request to remote device and parse response to find all schemas under netconf-state/schemas.
      */
     static NetconfStateSchemas create(final DOMRpcService deviceRpc,
-            final NetconfSessionPreferences remoteSessionCapabilities, final RemoteDeviceId id,
-            final SchemaContext schemaContext) {
+                                  final NetconfSessionPreferences remoteSessionCapabilities, final RemoteDeviceId id) {
         if (!remoteSessionCapabilities.isMonitoringSupported()) {
             // TODO - need to search for get-schema support, not just ietf-netconf-monitoring support
             // issue might be a deviation to ietf-netconf-monitoring where get-schema is unsupported...
@@ -123,8 +114,7 @@ public final class NetconfStateSchemas implements NetconfDeviceSchemas {
             return EMPTY;
         }
 
-        final Optional<? extends NormalizedNode<?, ?>> optSchemasNode = findSchemasNode(schemasNodeResult.getResult(),
-                schemaContext);
+        final Optional<? extends NormalizedNode<?, ?>> optSchemasNode = findSchemasNode(schemasNodeResult.getResult());
         if (!optSchemasNode.isPresent()) {
             LOG.warn("{}: Unable to detect available schemas, get to {} was empty", id, STATE_SCHEMAS_IDENTIFIER);
             return EMPTY;
@@ -162,30 +152,18 @@ public final class NetconfStateSchemas implements NetconfDeviceSchemas {
         return new NetconfStateSchemas(availableYangSchemas);
     }
 
-    private static Optional<? extends NormalizedNode<?, ?>> findSchemasNode(final NormalizedNode<?, ?> result,
-            final SchemaContext schemaContext) {
+    private static Optional<? extends NormalizedNode<?, ?>> findSchemasNode(final NormalizedNode<?, ?> result) {
         if (result == null) {
             return Optional.empty();
         }
-        final Optional<DataContainerChild<?, ?>> rpcResultOpt = ((ContainerNode)result).getChild(NETCONF_DATA_NODEID);
-        if (!rpcResultOpt.isPresent()) {
+        final Optional<DataContainerChild<?, ?>> dataNode = ((DataContainerNode<?>) result)
+                .getChild(NETCONF_DATA_NODEID);
+        if (!dataNode.isPresent()) {
             return Optional.empty();
         }
 
-        final DataContainerChild<?, ?> rpcResult = rpcResultOpt.get();
-        verify(rpcResult instanceof AnyXmlNode, "Unexpected result %s", rpcResult);
-        final NormalizedNode<?, ?> dataNode;
-
-        try {
-            dataNode = NetconfUtil.transformDOMSourceToNormalizedNode(schemaContext,
-                    ((AnyXmlNode) rpcResult).getValue()).getResult();
-        } catch (XMLStreamException | URISyntaxException | IOException | SAXException e) {
-            LOG.warn("Failed to transform {}", rpcResult, e);
-            return Optional.empty();
-        }
-
-        final Optional<DataContainerChild<?, ?>> nStateNode = ((DataContainerNode<?>) dataNode).getChild(
-            toId(NetconfState.QNAME));
+        final Optional<DataContainerChild<? extends YangInstanceIdentifier.PathArgument, ?>> nStateNode =
+                ((DataContainerNode<?>) dataNode.get()).getChild(toId(NetconfState.QNAME));
         if (!nStateNode.isPresent()) {
             return Optional.empty();
         }
index f7c42ba360fb0681cabef36d935f543eb0c2c383..089869899ac9209c7445c7b9025fd266d2b14859 100644 (file)
@@ -14,7 +14,6 @@ import org.opendaylight.netconf.sal.connect.netconf.sal.NetconfDeviceRpc;
 import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.ModulesState;
 import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 
 /**
  * Default implementation resolving schemas QNames from netconf-state or from modules-state.
@@ -24,10 +23,10 @@ public final class NetconfStateSchemasResolverImpl implements NetconfDeviceSchem
 
     @Override
     public NetconfDeviceSchemas resolve(final NetconfDeviceRpc deviceRpc,
-            final NetconfSessionPreferences remoteSessionCapabilities,
-            final RemoteDeviceId id, final SchemaContext schemaContext) {
+                                        final NetconfSessionPreferences remoteSessionCapabilities,
+                                        final RemoteDeviceId id) {
         if (remoteSessionCapabilities.isMonitoringSupported()) {
-            return NetconfStateSchemas.create(deviceRpc, remoteSessionCapabilities, id, schemaContext);
+            return NetconfStateSchemas.create(deviceRpc, remoteSessionCapabilities, id);
         }
 
         // FIXME: I think we should prefer YANG library here
index 52f5587e500cb07533058a5bb57aa2545ac06350..10603017c2e909c7a2371993761d9435b0bf977b 100644 (file)
@@ -9,6 +9,7 @@ package org.opendaylight.netconf.sal.connect.netconf.schema.mapping;
 
 import static org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil.CREATE_SUBSCRIPTION_RPC_QNAME;
 import static org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil.IETF_NETCONF_NOTIFICATIONS;
+import static org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil.NETCONF_RPC_REPLY_NODEID;
 import static org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil.NETCONF_URI;
 import static org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil.toPath;
 
@@ -47,8 +48,6 @@ import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.Revision;
 import org.opendaylight.yangtools.yang.common.RpcError;
 import org.opendaylight.yangtools.yang.common.YangConstants;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.data.api.schema.AnyXmlNode;
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
@@ -109,7 +108,7 @@ public class NetconfMessageTransformer implements MessageTransformer<NetconfMess
 
     @VisibleForTesting
     Set<ActionDefinition> getActions() {
-        final Builder<ActionDefinition> builder = ImmutableSet.builder();
+        Builder<ActionDefinition> builder = ImmutableSet.builder();
         for (DataSchemaNode dataSchemaNode : schemaContext.getChildNodes()) {
             if (dataSchemaNode instanceof ActionNodeContainer) {
                 findAction(dataSchemaNode, builder);
@@ -210,7 +209,7 @@ public class NetconfMessageTransformer implements MessageTransformer<NetconfMess
             // If the schema context for netconf device does not contain model for base netconf operations,
             // use default pre build context with just the base model
             // This way operations like lock/unlock are supported even if the source for base model was not provided
-            final SchemaContext ctx = needToUseBaseCtx ? baseSchema.getSchemaContext() : schemaContext;
+            SchemaContext ctx = needToUseBaseCtx ? baseSchema.getSchemaContext() : schemaContext;
             NetconfMessageTransformUtil.writeNormalizedRpc((ContainerNode) payload, result, rpcInput, ctx);
         } catch (final XMLStreamException | IOException | IllegalStateException e) {
             throw new IllegalStateException("Unable to serialize " + rpcInput, e);
@@ -274,12 +273,24 @@ public class NetconfMessageTransformer implements MessageTransformer<NetconfMess
         final QName rpcQName = rpc.getLastComponent();
         if (NetconfMessageTransformUtil.isDataRetrievalOperation(rpcQName)) {
             final Element xmlData = NetconfMessageTransformUtil.getDataSubtree(message.getDocument());
-            final AnyXmlNode anyXmlNode = Builders.anyXmlBuilder()
-                    .withNodeIdentifier(NetconfMessageTransformUtil.NETCONF_DATA_NODEID)
-                    .withValue(new DOMSource(xmlData)).build();
-            normalizedNode = Builders.containerBuilder().withNodeIdentifier(
-                    new YangInstanceIdentifier.NodeIdentifier(NetconfMessageTransformUtil.NETCONF_RPC_REPLY_QNAME))
-                    .withChild(anyXmlNode).build();
+            final ContainerSchemaNode schemaForDataRead =
+                    NetconfMessageTransformUtil.createSchemaForDataRead(schemaContext);
+            final ContainerNode dataNode;
+
+            try {
+                final NormalizedNodeResult resultHolder = new NormalizedNodeResult();
+                final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(resultHolder);
+                final XmlParserStream xmlParser = XmlParserStream.create(writer, schemaContext, schemaForDataRead,
+                        strictParsing);
+                xmlParser.traverse(new DOMSource(xmlData));
+                dataNode = (ContainerNode) resultHolder.getResult();
+            } catch (XMLStreamException | URISyntaxException | IOException | SAXException e) {
+                throw new IllegalArgumentException(String.format("Failed to parse data response %s", xmlData), e);
+            }
+
+            normalizedNode = Builders.containerBuilder()
+                    .withNodeIdentifier(NETCONF_RPC_REPLY_NODEID)
+                    .withChild(dataNode).build();
         } else {
 
             Map<QName, RpcDefinition> currentMappedRpcs = mappedRpcs;
@@ -311,7 +322,7 @@ public class NetconfMessageTransformer implements MessageTransformer<NetconfMess
             }
         }
         Preconditions.checkNotNull(actionDefinition, "Action does not exist: %s", action);
-        final ContainerNode normalizedNode = (ContainerNode) parseResult(message, actionDefinition);
+        ContainerNode normalizedNode = (ContainerNode) parseResult(message, actionDefinition);
 
         if (normalizedNode == null) {
             return new SimpleDOMActionResult(Collections.<RpcError>emptyList());
index 06fa0c4f6198c6c5da9b8d07a3ae35a9cbc58308..8283d3f966fb59187a77e69bd2fb71495583607a 100644 (file)
@@ -39,7 +39,6 @@ import org.opendaylight.netconf.api.xml.XmlUtil;
 import org.opendaylight.netconf.notifications.NetconfNotification;
 import org.opendaylight.netconf.sal.connect.util.MessageCounter;
 import org.opendaylight.netconf.util.NetconfUtil;
-import org.opendaylight.netconf.util.NodeContainerProxy;
 import org.opendaylight.netconf.util.messages.NetconfMessageUtil;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.base._1._0.rev110601.edit.config.input.EditContent;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification._1._0.rev080714.CreateSubscriptionInput;
@@ -465,7 +464,7 @@ public final class NetconfMessageTransformUtil {
         final Element actionData = prepareActionData(rootSchemaContextNode, actionNS,
                 domDataTreeIdentifier.getRootIdentifier().getPathArguments().iterator(), document);
 
-        final Element specificActionElement = document.createElement(action);
+        Element specificActionElement = document.createElement(action);
         actionData.appendChild(specificActionElement);
         rpcNS.appendChild(actionNS);
         document.appendChild(rpcNS);
@@ -477,7 +476,7 @@ public final class NetconfMessageTransformUtil {
         if (iterator.hasNext()) {
             final PathArgument next = iterator.next();
 
-            final DataSchemaContextNode<?> current = currentParentSchemaNode.getChild(next);
+            DataSchemaContextNode<?> current = currentParentSchemaNode.getChild(next);
             Preconditions.checkArgument(current != null, "Invalid input: schema for argument %s not found", next);
 
             if (current.isMixin()) {
similarity index 98%
rename from netconf/netconf-util/src/main/java/org/opendaylight/netconf/util/NodeContainerProxy.java
rename to netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/util/NodeContainerProxy.java
index 3154b370f42024c5ee9ff43445427685bad4ec61..da65e5595934cc2655da5532c760a314e5371f45 100644 (file)
@@ -5,7 +5,7 @@
  * 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.netconf.util;
+package org.opendaylight.netconf.sal.connect.netconf.util;
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Maps;
index 00a0c9b4cea7f9caba9bb58b5b44fbdb126caf31..e5f2830d120dc2f928b87bae67c5fc43bc8cbdf3 100644 (file)
@@ -116,7 +116,7 @@ public class NetconfDeviceTest {
             TEST_NAMESPACE + "?module=" + TEST_MODULE + "2" + "&amp;revision=" + TEST_REVISION;
 
     private static final NetconfDeviceSchemasResolver STATE_SCHEMAS_RESOLVER =
-        (deviceRpc, remoteSessionCapabilities, id, schemaContext) -> NetconfStateSchemas.EMPTY;
+        (deviceRpc, remoteSessionCapabilities, id) -> NetconfStateSchemas.EMPTY;
 
     @Test
     public void testNetconfDeviceFlawedModelFailedResolution() throws Exception {
@@ -137,8 +137,7 @@ public class NetconfDeviceTest {
             }
         }).when(schemaFactory).createSchemaContext(anyCollectionOf(SourceIdentifier.class));
 
-        final NetconfDeviceSchemasResolver stateSchemasResolver = (deviceRpc, remoteSessionCapabilities, id,
-                schemaContext) -> {
+        final NetconfDeviceSchemasResolver stateSchemasResolver = (deviceRpc, remoteSessionCapabilities, id) -> {
             final Module first = Iterables.getFirst(schema.getModules(), null);
             final QName qName = QName.create(first.getQNameModule(), first.getName());
             final NetconfStateSchemas.RemoteYangSchema source1 = new NetconfStateSchemas.RemoteYangSchema(qName);
@@ -225,8 +224,7 @@ public class NetconfDeviceTest {
             }
         }).when(schemaFactory).createSchemaContext(anyCollectionOf(SourceIdentifier.class));
 
-        final NetconfDeviceSchemasResolver stateSchemasResolver = (deviceRpc, remoteSessionCapabilities, id,
-            schemaContext) -> {
+        final NetconfDeviceSchemasResolver stateSchemasResolver = (deviceRpc, remoteSessionCapabilities, id) -> {
             final Module first = Iterables.getFirst(schema.getModules(), null);
             final QName qName = QName.create(first.getQNameModule(), first.getName());
             final NetconfStateSchemas.RemoteYangSchema source1 = new NetconfStateSchemas.RemoteYangSchema(qName);
index 3b8648ef49530ac9deec1ad0e834308638f7a43e..e8cf38e1ff0b1605aa6910c49e2ceef685d89504 100644 (file)
@@ -30,7 +30,6 @@ import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
 import org.junit.Assert;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
@@ -75,12 +74,10 @@ public class NetconfStateSchemasTest {
     @Mock
     private DOMRpcService rpc;
 
-    private SchemaContext schemaContext;
-
     @Before
     public void setUp() throws Exception {
         MockitoAnnotations.initMocks(this);
-        schemaContext = BaseSchema.BASE_NETCONF_CTX_WITH_NOTIFICATIONS.getSchemaContext();
+        final SchemaContext schemaContext = BaseSchema.BASE_NETCONF_CTX_WITH_NOTIFICATIONS.getSchemaContext();
         final DataSchemaNode schemasNode =
                 ((ContainerSchemaNode) schemaContext
                         .getDataChildByName(NetconfState.QNAME)).getDataChildByName(Schemas.QNAME);
@@ -106,7 +103,6 @@ public class NetconfStateSchemasTest {
                 hasItem(QName.create("urn:TBD:params:xml:ns:yang:network-topology", "2013-07-12", "network-topology")));
     }
 
-    @Ignore
     @Test
     public void testCreate2() throws Exception {
         final ContainerNode netconfState = Builders.containerBuilder()
@@ -124,8 +120,8 @@ public class NetconfStateSchemasTest {
                 .withChild(data)
                 .build();
         when(rpc.invokeRpc(eq(toPath(NETCONF_GET_QNAME)), any()))
-            .thenReturn(immediateFluentFuture(new DefaultDOMRpcResult(rpcReply)));
-        final NetconfStateSchemas stateSchemas = NetconfStateSchemas.create(rpc, CAPS, deviceId, schemaContext);
+                .thenReturn(immediateFluentFuture(new DefaultDOMRpcResult(rpcReply)));
+        final NetconfStateSchemas stateSchemas = NetconfStateSchemas.create(rpc, CAPS, deviceId);
         final Set<QName> availableYangSchemasQNames = stateSchemas.getAvailableYangSchemasQNames();
         assertEquals(numberOfLegalSchemas, availableYangSchemasQNames.size());
 
@@ -136,7 +132,7 @@ public class NetconfStateSchemasTest {
     @Test
     public void testCreateMonitoringNotSupported() throws Exception {
         final NetconfSessionPreferences caps = NetconfSessionPreferences.fromStrings(Collections.emptySet());
-        final NetconfStateSchemas stateSchemas = NetconfStateSchemas.create(rpc, caps, deviceId, schemaContext);
+        final NetconfStateSchemas stateSchemas = NetconfStateSchemas.create(rpc, caps, deviceId);
         final Set<QName> availableYangSchemasQNames = stateSchemas.getAvailableYangSchemasQNames();
         Assert.assertTrue(availableYangSchemasQNames.isEmpty());
     }
@@ -144,8 +140,8 @@ public class NetconfStateSchemasTest {
     @Test
     public void testCreateFail() throws Exception {
         when(rpc.invokeRpc(eq(toPath(NETCONF_GET_QNAME)), any())).thenReturn(
-                immediateFailedFluentFuture(new DOMRpcImplementationNotAvailableException("not available")));
-        final NetconfStateSchemas stateSchemas = NetconfStateSchemas.create(rpc, CAPS, deviceId, schemaContext);
+            immediateFailedFluentFuture(new DOMRpcImplementationNotAvailableException("not available")));
+        final NetconfStateSchemas stateSchemas = NetconfStateSchemas.create(rpc, CAPS, deviceId);
         final Set<QName> availableYangSchemasQNames = stateSchemas.getAvailableYangSchemasQNames();
         Assert.assertTrue(availableYangSchemasQNames.isEmpty());
     }
@@ -154,8 +150,8 @@ public class NetconfStateSchemasTest {
     public void testCreateRpcError() throws Exception {
         final RpcError rpcError = RpcResultBuilder.newError(RpcError.ErrorType.RPC, "fail", "fail");
         when(rpc.invokeRpc(eq(toPath(NETCONF_GET_QNAME)), any()))
-            .thenReturn(immediateFluentFuture(new DefaultDOMRpcResult(rpcError)));
-        final NetconfStateSchemas stateSchemas = NetconfStateSchemas.create(rpc, CAPS, deviceId, schemaContext);
+                .thenReturn(immediateFluentFuture(new DefaultDOMRpcResult(rpcError)));
+        final NetconfStateSchemas stateSchemas = NetconfStateSchemas.create(rpc, CAPS, deviceId);
         final Set<QName> availableYangSchemasQNames = stateSchemas.getAvailableYangSchemasQNames();
         Assert.assertTrue(availableYangSchemasQNames.isEmpty());
     }
@@ -169,8 +165,8 @@ public class NetconfStateSchemasTest {
             try {
                 when(interruptedFuture.get()).thenThrow(new InterruptedException("interrupted"));
                 when(rpc.invokeRpc(eq(toPath(NETCONF_GET_QNAME)), any())).thenReturn(
-                        FluentFuture.from(interruptedFuture));
-                NetconfStateSchemas.create(rpc, CAPS, deviceId, schemaContext);
+                    FluentFuture.from(interruptedFuture));
+                NetconfStateSchemas.create(rpc, CAPS, deviceId);
             } catch (final InterruptedException | ExecutionException e) {
                 LOG.info("Operation failed.", e);
             }
index a4d86a4aa07abc0117bd4ba24e16b20ffdb4f0ce..730ae8090d409a220e9188ffbc929574a5656e7f 100644 (file)
@@ -7,7 +7,6 @@
  */
 package org.opendaylight.netconf.sal.connect.netconf.sal;
 
-import static org.junit.Assert.assertNotNull;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.verify;
@@ -30,23 +29,17 @@ import org.opendaylight.netconf.api.NetconfMessage;
 import org.opendaylight.netconf.api.xml.XmlUtil;
 import org.opendaylight.netconf.sal.connect.api.RemoteDeviceCommunicator;
 import org.opendaylight.netconf.sal.connect.netconf.schema.mapping.NetconfMessageTransformer;
-import org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.base._1._0.rev110601.$YangModuleInfoImpl;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
-import org.opendaylight.yangtools.yang.data.api.schema.AnyXmlNode;
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
-import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
 import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
-import org.w3c.dom.Node;
 
 public class NetconfDeviceRpcTest {
 
@@ -85,16 +78,7 @@ public class NetconfDeviceRpcTest {
     public void testInvokeRpc() throws Exception {
         NormalizedNode<?, ?> input = createNode("urn:ietf:params:xml:ns:netconf:base:1.0", "2011-06-01", "filter");
         final DOMRpcResult result = rpc.invokeRpc(path, input).get();
-        Assert.assertEquals(expectedReply.getResult().getIdentifier(), result.getResult().getIdentifier());
-        Assert.assertEquals(resolveNode(expectedReply), resolveNode(result));
-    }
-
-    private Node resolveNode(final DOMRpcResult result) {
-        DataContainerChild<? extends PathArgument, ?> value = ((ContainerNode) result.getResult())
-                .getChild(NodeIdentifier.create(NetconfMessageTransformUtil.NETCONF_DATA_QNAME)).get();
-        Node node = ((AnyXmlNode)value).getValue().getNode();
-        assertNotNull(node);
-        return node;
+        Assert.assertEquals(expectedReply, result);
     }
 
     @Test
index 42812abe38440e4d257f6282457b1743d76e0367..0d94ef51d71dc9e1d1d19adad6aa1f684f4d4eb9 100644 (file)
@@ -58,7 +58,6 @@ import org.opendaylight.netconf.api.xml.XmlUtil;
 import org.opendaylight.netconf.sal.connect.netconf.schema.NetconfRemoteSchemaYangSourceProvider;
 import org.opendaylight.netconf.sal.connect.netconf.util.NetconfBaseOps;
 import org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil;
-import org.opendaylight.netconf.util.NetconfUtil;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.base._1._0.rev110601.$YangModuleInfoImpl;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.NetconfState;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.Capabilities;
@@ -77,7 +76,6 @@ import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
 import org.opendaylight.yangtools.yang.data.api.schema.MapNode;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
-import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeBuilder;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableLeafNodeBuilder;
 import org.opendaylight.yangtools.yang.model.api.ActionDefinition;
@@ -229,13 +227,9 @@ public class NetconfMessageTransformerTest {
         final MapEntryNode schemaNode =
                 Builders.mapEntryBuilder().withNodeIdentifier(identifierWithPredicates).withValue(values).build();
 
-        final AnyXmlNode data = (AnyXmlNode) ((ContainerNode) compositeNodeRpcResult
+        final ContainerNode data = (ContainerNode) ((ContainerNode) compositeNodeRpcResult
                 .getResult()).getChild(toId(NETCONF_DATA_QNAME)).get();
-
-        NormalizedNodeResult nodeResult =
-                NetconfUtil.transformDOMSourceToNormalizedNode(schema, data.getValue());
-        ContainerNode result = (ContainerNode) nodeResult.getResult();
-        final ContainerNode state = (ContainerNode) result.getChild(toId(NetconfState.QNAME)).get();
+        final ContainerNode state = (ContainerNode) data.getChild(toId(NetconfState.QNAME)).get();
         final ContainerNode schemas = (ContainerNode) state.getChild(toId(Schemas.QNAME)).get();
         final MapNode schemaParent = (MapNode) schemas.getChild(toId(Schema.QNAME)).get();
         assertEquals(1, Iterables.size(schemaParent.getValue()));
index 2c0501e5e1e1e1708911be5f1917e0ad119a4c1f..ede1b39313c0cb8b8e42410613e6917390badee3 100644 (file)
@@ -17,7 +17,6 @@ import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
-import org.opendaylight.netconf.util.NodeContainerProxy;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
@@ -133,4 +132,4 @@ public class NodeContainerProxyTest {
         proxy.getStatus();
     }
 
-}
+}
\ No newline at end of file
index 5da2aa59e6313a5c5401187d12248b58cb27d68a..d86f749a39ab5f866352ade7999c0df773e75ed7 100644 (file)
       <groupId>org.opendaylight.netconf</groupId>
       <artifactId>ietf-restconf</artifactId>
     </dependency>
-    <dependency>
-      <groupId>org.opendaylight.netconf</groupId>
-      <artifactId>netconf-util</artifactId>
-    </dependency>
     <dependency>
       <groupId>net.java.dev.stax-utils</groupId>
       <artifactId>stax-utils</artifactId>
index 216d77f068475cee685e47d353879c1380c8e26a..35f8b786c256370387eca5843da9d2f20bae9a52 100644 (file)
@@ -15,7 +15,6 @@ import java.io.OutputStreamWriter;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Type;
 import java.net.URI;
-import java.net.URISyntaxException;
 import java.nio.charset.StandardCharsets;
 import java.util.Map.Entry;
 import javax.ws.rs.Produces;
@@ -24,15 +23,12 @@ import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.MultivaluedMap;
 import javax.ws.rs.ext.MessageBodyWriter;
 import javax.ws.rs.ext.Provider;
-import javax.xml.stream.XMLStreamException;
 import org.opendaylight.netconf.sal.rest.api.Draft02;
 import org.opendaylight.netconf.sal.rest.api.RestconfNormalizedNodeWriter;
 import org.opendaylight.netconf.sal.rest.api.RestconfService;
-import org.opendaylight.netconf.util.NetconfUtil;
 import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
 import org.opendaylight.restconf.common.context.NormalizedNodeContext;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
-import org.opendaylight.yangtools.yang.data.api.schema.AnyXmlNode;
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
 import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild;
 import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
@@ -48,7 +44,6 @@ import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
-import org.xml.sax.SAXException;
 
 /**
  * Normalized node writer for JSON.
@@ -84,7 +79,7 @@ public class NormalizedNodeJsonBodyWriter implements MessageBodyWriter<Normalize
                 httpHeaders.add(entry.getKey(), entry.getValue());
             }
         }
-        NormalizedNode<?, ?> data = context.getData();
+        final NormalizedNode<?, ?> data = context.getData();
         if (data == null) {
             return;
         }
@@ -114,17 +109,7 @@ public class NormalizedNodeJsonBodyWriter implements MessageBodyWriter<Normalize
              *  which is not visible in restconf
              */
             nnWriter = createNormalizedNodeWriter(context,path,jsonWriter, depth);
-            if (data instanceof ContainerNode) {
-                writeChildren(nnWriter,(ContainerNode) data);
-            } else if (data instanceof AnyXmlNode) {
-                try {
-                    writeChildren(nnWriter,
-                            (ContainerNode) NetconfUtil.transformDOMSourceToNormalizedNode(
-                                    context.getSchemaContext(), ((AnyXmlNode)data).getValue()).getResult());
-                } catch (XMLStreamException | URISyntaxException | SAXException e) {
-                    throw new RuntimeException(e);
-                }
-            }
+            writeChildren(nnWriter,(ContainerNode) data);
         } else if (context.getSchemaNode() instanceof RpcDefinition) {
             /*
              *  RpcDefinition is not supported as initial codec in JSONStreamWriter,
index c7f1f0fa485dffc5fefb4d9d1fc20fc10bc38df1..7a7b13605082d76052aa985f4df116467c472453 100644 (file)
@@ -127,7 +127,7 @@ class FakeContainerSchemaNode implements ContainerSchemaNode {
 
     @Override
     public boolean isPresenceContainer() {
-        return false;
+        throw new UnsupportedOperationException("Not supported.");
     }
 
     @Override
index e4b8bb4cee5e2e1536faf2a236e3eabf50aa6abf..fcd4d653369e19ba677b557966354368dec61a5e 100644 (file)
@@ -118,7 +118,7 @@ final class FakeRestconfModule implements Module {
 
     @Override
     public YangVersion getYangVersion() {
-        return YangVersion.VERSION_1_1;
+        throw new UnsupportedOperationException("Not supported operations.");
     }
 
     @Override
@@ -153,42 +153,42 @@ final class FakeRestconfModule implements Module {
 
     @Override
     public Set<FeatureDefinition> getFeatures() {
-        return ImmutableSet.of();
+        throw new UnsupportedOperationException("Not supported operations.");
     }
 
     @Override
     public Set<NotificationDefinition> getNotifications() {
-        return ImmutableSet.of();
+        throw new UnsupportedOperationException("Not supported operations.");
     }
 
     @Override
     public Set<AugmentationSchemaNode> getAugmentations() {
-        return ImmutableSet.of();
+        throw new UnsupportedOperationException("Not supported operations.");
     }
 
     @Override
     public Set<RpcDefinition> getRpcs() {
-        return ImmutableSet.of();
+        throw new UnsupportedOperationException("Not supported operations.");
     }
 
     @Override
     public Set<Deviation> getDeviations() {
-        return ImmutableSet.of();
+        throw new UnsupportedOperationException("Not supported operations.");
     }
 
     @Override
     public Set<IdentitySchemaNode> getIdentities() {
-        return ImmutableSet.of();
+        throw new UnsupportedOperationException("Not supported operations.");
     }
 
     @Override
     public List<ExtensionDefinition> getExtensionSchemaNodes() {
-        return ImmutableList.of();
+        throw new UnsupportedOperationException("Not supported operations.");
     }
 
     @Override
     public List<UnknownSchemaNode> getUnknownSchemaNodes() {
-        return ImmutableList.of();
+        throw new UnsupportedOperationException("Not supported operations.");
     }
 
     @Override
index 4b868fe88a5410ea14e943779d8e78f83bd370a1..fd012b56ed5e87d41b1fecac60e2c53c9fdf3008 100644 (file)
@@ -76,7 +76,6 @@ import org.opendaylight.restconf.common.util.DataChangeScope;
 import org.opendaylight.restconf.common.validation.RestconfValidationUtils;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
 import org.opendaylight.yang.gen.v1.urn.sal.restconf.event.subscription.rev140708.NotificationOutputTypeGrouping.NotificationOutputType;
-import org.opendaylight.yangtools.yang.common.Empty;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.QNameModule;
 import org.opendaylight.yangtools.yang.common.Revision;
@@ -375,7 +374,7 @@ public final class RestconfImpl implements RestconfService {
                 Builders.containerBuilder(fakeCont);
 
         for (final LeafSchemaNode leaf : fakeRpcSchema) {
-            containerBuilder.withChild(Builders.leafBuilder(leaf).withValue(Empty.getInstance()).build());
+            containerBuilder.withChild(Builders.leafBuilder(leaf).build());
         }
 
         final Collection<Module> fakeModules = new ArrayList<>(neededModules.size() + 1);