+ public synchronized DOMRpcResult toRpcResult(final NetconfMessage message, final SchemaPath rpc) {
+ final NormalizedNode<?, ?> normalizedNode;
+ final QName rpcQName = rpc.getLastComponent();
+ if (NetconfMessageTransformUtil.isDataRetrievalOperation(rpcQName)) {
+ final Element xmlData = NetconfMessageTransformUtil.getDataSubtree(message.getDocument());
+ final ContainerSchemaNode schemaForDataRead = NetconfMessageTransformUtil.createSchemaForDataRead(schemaContext);
+ final ContainerNode dataNode = parserFactory.getContainerNodeParser().parse(Collections.singleton(xmlData), schemaForDataRead);
+
+ normalizedNode = Builders.containerBuilder().withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(NetconfMessageTransformUtil.NETCONF_RPC_REPLY_QNAME))
+ .withChild(dataNode).build();
+ } else {
+ final Set<Element> documentElement = Collections.singleton(message.getDocument().getDocumentElement());
+
+ Map<QName, RpcDefinition> currentMappedRpcs = mappedRpcs;
+
+ // Determine whether a base netconf operation is being invoked and also check if the device exposed model for base netconf
+ // If no, use pre built base netconf operations model
+ final boolean needToUseBaseCtx = mappedRpcs.get(rpcQName) == null && isBaseRpc(rpcQName);
+ if(needToUseBaseCtx) {
+ currentMappedRpcs = MAPPED_BASE_RPCS;
+ }
+
+ final RpcDefinition rpcDefinition = currentMappedRpcs.get(rpcQName);
+ Preconditions.checkArgument(rpcDefinition != null, "Unable to parse response of %s, the rpc is unknown", rpcQName);
+
+ // In case no input for rpc is defined, we can simply construct the payload here
+ if (rpcDefinition.getOutput() == null) {
+ Preconditions.checkArgument(XmlElement.fromDomDocument(message.getDocument()).getOnlyChildElementWithSameNamespaceOptionally("ok").isPresent(),
+ "Unexpected content in response of rpc: %s, %s", rpcDefinition.getQName(), message);
+ normalizedNode = null;
+ } else {
+ normalizedNode = parserFactory.getContainerNodeParser().parse(documentElement, rpcDefinition.getOutput());
+ }
+ }
+ return new DefaultDOMRpcResult(normalizedNode);