X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=netconf%2Fmdsal-netconf-connector%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fnetconf%2Fmdsal%2Fconnector%2Fops%2Fget%2FAbstractGet.java;h=f02bc08adf0a1c5c95d34b225a1e64cc1a966049;hb=refs%2Fchanges%2F30%2F84030%2F3;hp=8eaef5545191261dbc535e08036444a56acb975f;hpb=fa66a1b149f2155298692ec4d6a0264ee55e6a0c;p=netconf.git diff --git a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/get/AbstractGet.java b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/get/AbstractGet.java index 8eaef55451..f02bc08adf 100644 --- a/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/get/AbstractGet.java +++ b/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/get/AbstractGet.java @@ -28,6 +28,8 @@ 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.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; +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.api.schema.stream.NormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter; @@ -60,6 +62,7 @@ public abstract class AbstractGet extends AbstractSingletonNetconfOperation { protected Node transformNormalizedNode(final Document document, final NormalizedNode data, final YangInstanceIdentifier dataRoot) { + final DOMResult result = new DOMResult(document.createElement(XmlNetconfConstants.DATA_KEY)); final XMLStreamWriter xmlWriter = getXmlStreamWriter(result); @@ -69,7 +72,15 @@ public abstract class AbstractGet extends AbstractSingletonNetconfOperation { final NormalizedNodeWriter nnWriter = NormalizedNodeWriter.forStreamWriter(nnStreamWriter, true); - writeRootElement(xmlWriter, nnWriter, (ContainerNode) data); + if (data instanceof ContainerNode) { + writeRootElement(xmlWriter, nnWriter, (ContainerNode) data); + } else if (data instanceof MapNode) { + writeRootElement(xmlWriter, nnWriter, (MapNode) data); + } else { + throw new IllegalArgumentException("Unable to transform node of type: " + data.getClass().toString() + + " offending node: " + data.toString()); + } + return result.getNode(); } @@ -103,6 +114,23 @@ public abstract class AbstractGet extends AbstractSingletonNetconfOperation { } } + private static void writeRootElement(final XMLStreamWriter xmlWriter, final NormalizedNodeWriter nnWriter, + final MapNode data) { + try { + if (data.getNodeType().equals(SchemaContext.NAME)) { + for (final MapEntryNode child : data.getValue()) { + nnWriter.write(child); + } + } else { + nnWriter.write(data); + } + nnWriter.flush(); + xmlWriter.flush(); + } catch (XMLStreamException | IOException e) { + throw new RuntimeException(e); + } + } + protected Element serializeNodeWithParentStructure(final Document document, final YangInstanceIdentifier dataRoot, final NormalizedNode node) { if (!dataRoot.equals(ROOT)) {