From a9a65f283f95f8b8dc7d71cadacf0c2e58e331a6 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Tue, 4 Jun 2019 17:18:30 +0200 Subject: [PATCH] Revert "Convert anyxml nodes lazily" This reverts commit 49988c53b1741cca9797373eba0c8d7f21a7da3d, as it breaks CSIT. JIRA: NETCONF-616 Change-Id: I48bdde78422006c188096620d4029e255b950bc2 Signed-off-by: Robert Varga --- .../netconf/util/NetconfUtil.java | 27 +------------ netconf/sal-netconf-connector/pom.xml | 4 -- .../api/NetconfDeviceSchemasResolver.java | 4 +- .../sal/connect/netconf/NetconfDevice.java | 22 ++++------- .../connect/netconf/NetconfStateSchemas.java | 38 ++++--------------- .../NetconfStateSchemasResolverImpl.java | 7 ++-- .../mapping/NetconfMessageTransformer.java | 33 ++++++++++------ .../util/NetconfMessageTransformUtil.java | 5 +-- .../netconf/util/NodeContainerProxy.java | 2 +- .../connect/netconf/NetconfDeviceTest.java | 8 ++-- .../netconf/NetconfStateSchemasTest.java | 24 +++++------- .../netconf/sal/NetconfDeviceRpcTest.java | 18 +-------- .../NetconfMessageTransformerTest.java | 10 +---- .../netconf/util/NodeContainerProxyTest.java | 3 +- restconf/restconf-nb-bierman02/pom.xml | 4 -- .../impl/NormalizedNodeJsonBodyWriter.java | 19 +--------- .../impl/FakeContainerSchemaNode.java | 2 +- .../sal/restconf/impl/FakeRestconfModule.java | 18 ++++----- .../sal/restconf/impl/RestconfImpl.java | 3 +- 19 files changed, 76 insertions(+), 175 deletions(-) rename netconf/{netconf-util/src/main/java/org/opendaylight => sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect}/netconf/util/NodeContainerProxy.java (98%) diff --git a/netconf/netconf-util/src/main/java/org/opendaylight/netconf/util/NetconfUtil.java b/netconf/netconf-util/src/main/java/org/opendaylight/netconf/util/NetconfUtil.java index 217f106df2..635c507ad4 100644 --- a/netconf/netconf-util/src/main/java/org/opendaylight/netconf/util/NetconfUtil.java +++ b/netconf/netconf-util/src/main/java/org/opendaylight/netconf/util/NetconfUtil.java @@ -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; - } } diff --git a/netconf/sal-netconf-connector/pom.xml b/netconf/sal-netconf-connector/pom.xml index 800247689b..1d1cecbfff 100644 --- a/netconf/sal-netconf-connector/pom.xml +++ b/netconf/sal-netconf-connector/pom.xml @@ -95,10 +95,6 @@ org.opendaylight.mdsal.model yang-ext - - ${project.groupId} - netconf-util - org.slf4j slf4j-api diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/api/NetconfDeviceSchemasResolver.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/api/NetconfDeviceSchemasResolver.java index 6404842994..8031c15554 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/api/NetconfDeviceSchemasResolver.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/api/NetconfDeviceSchemasResolver.java @@ -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); } diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDevice.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDevice.java index dfd72c60de..84194ea3a5 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDevice.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDevice.java @@ -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 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 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()); diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfStateSchemas.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfStateSchemas.java index 06765305f4..bec05994ef 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfStateSchemas.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfStateSchemas.java @@ -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> optSchemasNode = findSchemasNode(schemasNodeResult.getResult(), - schemaContext); + final Optional> 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> findSchemasNode(final NormalizedNode result, - final SchemaContext schemaContext) { + private static Optional> findSchemasNode(final NormalizedNode result) { if (result == null) { return Optional.empty(); } - final Optional> rpcResultOpt = ((ContainerNode)result).getChild(NETCONF_DATA_NODEID); - if (!rpcResultOpt.isPresent()) { + final Optional> 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> nStateNode = ((DataContainerNode) dataNode).getChild( - toId(NetconfState.QNAME)); + final Optional> nStateNode = + ((DataContainerNode) dataNode.get()).getChild(toId(NetconfState.QNAME)); if (!nStateNode.isPresent()) { return Optional.empty(); } diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfStateSchemasResolverImpl.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfStateSchemasResolverImpl.java index f7c42ba360..089869899a 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfStateSchemasResolverImpl.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfStateSchemasResolverImpl.java @@ -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 diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/NetconfMessageTransformer.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/NetconfMessageTransformer.java index 52f5587e50..10603017c2 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/NetconfMessageTransformer.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/NetconfMessageTransformer.java @@ -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 getActions() { - final Builder builder = ImmutableSet.builder(); + Builder builder = ImmutableSet.builder(); for (DataSchemaNode dataSchemaNode : schemaContext.getChildNodes()) { if (dataSchemaNode instanceof ActionNodeContainer) { findAction(dataSchemaNode, builder); @@ -210,7 +209,7 @@ public class NetconfMessageTransformer implements MessageTransformer currentMappedRpcs = mappedRpcs; @@ -311,7 +322,7 @@ public class NetconfMessageTransformer implements MessageTransformeremptyList()); diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/util/NetconfMessageTransformUtil.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/util/NetconfMessageTransformUtil.java index 06fa0c4f61..8283d3f966 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/util/NetconfMessageTransformUtil.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/util/NetconfMessageTransformUtil.java @@ -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()) { diff --git a/netconf/netconf-util/src/main/java/org/opendaylight/netconf/util/NodeContainerProxy.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/util/NodeContainerProxy.java 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 3154b370f4..da65e55959 100644 --- a/netconf/netconf-util/src/main/java/org/opendaylight/netconf/util/NodeContainerProxy.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/util/NodeContainerProxy.java @@ -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; diff --git a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDeviceTest.java b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDeviceTest.java index 00a0c9b4ce..e5f2830d12 100644 --- a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDeviceTest.java +++ b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDeviceTest.java @@ -116,7 +116,7 @@ public class NetconfDeviceTest { TEST_NAMESPACE + "?module=" + TEST_MODULE + "2" + "&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); diff --git a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/NetconfStateSchemasTest.java b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/NetconfStateSchemasTest.java index 3b8648ef49..e8cf38e1ff 100644 --- a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/NetconfStateSchemasTest.java +++ b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/NetconfStateSchemasTest.java @@ -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 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 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 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 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); } diff --git a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceRpcTest.java b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceRpcTest.java index a4d86a4aa0..730ae8090d 100644 --- a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceRpcTest.java +++ b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceRpcTest.java @@ -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 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 diff --git a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/NetconfMessageTransformerTest.java b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/NetconfMessageTransformerTest.java index 42812abe38..0d94ef51d7 100644 --- a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/NetconfMessageTransformerTest.java +++ b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/NetconfMessageTransformerTest.java @@ -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())); diff --git a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/util/NodeContainerProxyTest.java b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/util/NodeContainerProxyTest.java index 2c0501e5e1..ede1b39313 100644 --- a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/util/NodeContainerProxyTest.java +++ b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/util/NodeContainerProxyTest.java @@ -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 diff --git a/restconf/restconf-nb-bierman02/pom.xml b/restconf/restconf-nb-bierman02/pom.xml index 5da2aa59e6..d86f749a39 100644 --- a/restconf/restconf-nb-bierman02/pom.xml +++ b/restconf/restconf-nb-bierman02/pom.xml @@ -129,10 +129,6 @@ org.opendaylight.netconf ietf-restconf - - org.opendaylight.netconf - netconf-util - net.java.dev.stax-utils stax-utils diff --git a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/NormalizedNodeJsonBodyWriter.java b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/NormalizedNodeJsonBodyWriter.java index 216d77f068..35f8b786c2 100644 --- a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/NormalizedNodeJsonBodyWriter.java +++ b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/rest/impl/NormalizedNodeJsonBodyWriter.java @@ -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 data = context.getData(); + final NormalizedNode data = context.getData(); if (data == null) { return; } @@ -114,17 +109,7 @@ public class NormalizedNodeJsonBodyWriter implements MessageBodyWriter getFeatures() { - return ImmutableSet.of(); + throw new UnsupportedOperationException("Not supported operations."); } @Override public Set getNotifications() { - return ImmutableSet.of(); + throw new UnsupportedOperationException("Not supported operations."); } @Override public Set getAugmentations() { - return ImmutableSet.of(); + throw new UnsupportedOperationException("Not supported operations."); } @Override public Set getRpcs() { - return ImmutableSet.of(); + throw new UnsupportedOperationException("Not supported operations."); } @Override public Set getDeviations() { - return ImmutableSet.of(); + throw new UnsupportedOperationException("Not supported operations."); } @Override public Set getIdentities() { - return ImmutableSet.of(); + throw new UnsupportedOperationException("Not supported operations."); } @Override public List getExtensionSchemaNodes() { - return ImmutableList.of(); + throw new UnsupportedOperationException("Not supported operations."); } @Override public List getUnknownSchemaNodes() { - return ImmutableList.of(); + throw new UnsupportedOperationException("Not supported operations."); } @Override diff --git a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/RestconfImpl.java b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/RestconfImpl.java index 4b868fe88a..fd012b56ed 100644 --- a/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/RestconfImpl.java +++ b/restconf/restconf-nb-bierman02/src/main/java/org/opendaylight/netconf/sal/restconf/impl/RestconfImpl.java @@ -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 fakeModules = new ArrayList<>(neededModules.size() + 1); -- 2.36.6