Fix empty get failing on mounted devices when using xml
[netconf.git] / restconf / restconf-nb-rfc8040 / src / main / java / org / opendaylight / restconf / nb / rfc8040 / jersey / providers / XmlNormalizedNodeBodyWriter.java
index b5c085ca679df8856e9fae5e6d9b0578b4237e1a..d9af3d4c80a74295f91b5f2518875c3af8c16c83 100644 (file)
@@ -116,7 +116,8 @@ public class XmlNormalizedNodeBodyWriter extends AbstractNormalizedNodeBodyWrite
                 ((ActionDefinition) pathContext.getSchemaNode()).getOutput().getPath(), depth, fields);
             writeElements(xmlWriter, nnWriter, (ContainerNode) data);
         } else {
-            if (SchemaPath.ROOT.equals(path)) {
+            final boolean isRoot = SchemaPath.ROOT.equals(path);
+            if (isRoot) {
                 nnWriter = createNormalizedNodeWriter(xmlWriter, schemaCtx, path, depth, fields);
             } else {
                 nnWriter = createNormalizedNodeWriter(xmlWriter, schemaCtx, path.getParent(), depth, fields);
@@ -129,13 +130,31 @@ public class XmlNormalizedNodeBodyWriter extends AbstractNormalizedNodeBodyWrite
                     .addChild((MapEntryNode) data)
                     .build());
             } else {
-                nnWriter.write(data);
+                if (isRoot && data instanceof ContainerNode && ((ContainerNode) data).isEmpty()) {
+                    writeEmptyDataNode(xmlWriter, data);
+                } else {
+                    nnWriter.write(data);
+                }
             }
         }
 
         nnWriter.flush();
     }
 
+    private static void writeEmptyDataNode(final XMLStreamWriter xmlWriter, final NormalizedNode data)
+            throws IOException {
+        final QName nodeType = data.getIdentifier().getNodeType();
+        final String namespace = nodeType.getNamespace().toString();
+        try {
+            xmlWriter.writeStartElement(XMLConstants.DEFAULT_NS_PREFIX, nodeType.getLocalName(), namespace);
+            xmlWriter.writeDefaultNamespace(namespace);
+            xmlWriter.writeEndElement();
+            xmlWriter.flush();
+        } catch (XMLStreamException e) {
+            throw new IOException("Failed to write elements", e);
+        }
+    }
+
     private static RestconfNormalizedNodeWriter createNormalizedNodeWriter(final XMLStreamWriter xmlWriter,
             final EffectiveModelContext schemaContext, final SchemaPath schemaPath, final DepthParam depth,
             final List<Set<QName>> fields) {