[ONOS-6116] ONOS-YANG-DEMO1]DataNodeBuilder childs are getting reset to null.

Change-Id: If43e60b4681d6a4d21f1d3b55aa14632387d7dc7
diff --git a/serializers/json/src/main/java/org/onosproject/yang/serializers/json/DecoderUtils.java b/serializers/json/src/main/java/org/onosproject/yang/serializers/json/DecoderUtils.java
index 1e91cd7..db54520 100644
--- a/serializers/json/src/main/java/org/onosproject/yang/serializers/json/DecoderUtils.java
+++ b/serializers/json/src/main/java/org/onosproject/yang/serializers/json/DecoderUtils.java
@@ -51,10 +51,12 @@
         DataNode.Builder dataNodeBuilder = SerializerHelper.
                 initializeDataNode(context);
 
-        JsonWalker jsonWalker = new DefaultJsonWalker(dataNodeBuilder);
+        DefaultJsonWalker jsonWalker = new DefaultJsonWalker(dataNodeBuilder);
+        // FIXME: Handle scenario wherein there are multiple data nodes are
+        // there at root level.
         jsonWalker.walkJsonNode(null, rootNode);
-
-        return dataNodeBuilder.build();
+        // returning the updated data node builder
+        return jsonWalker.rootBuilder().build();
     }
 
     /**
@@ -76,9 +78,11 @@
         DataNode.Builder dataNodeBuilder = SerializerHelper.
                 initializeDataNode(ridBuilder);
 
-        JsonWalker jsonWalker = new DefaultJsonWalker(dataNodeBuilder);
+        DefaultJsonWalker jsonWalker = new DefaultJsonWalker(dataNodeBuilder);
+        // FIXME: Handle scenario wherein there are multiple data nodes are
+        // there at root level.
         jsonWalker.walkJsonNode(null, rootNode);
-
-        return dataNodeBuilder.build();
+        // returning the updated data node builder
+        return jsonWalker.rootBuilder().build();
     }
 }
diff --git a/serializers/json/src/main/java/org/onosproject/yang/serializers/json/DefaultJsonWalker.java b/serializers/json/src/main/java/org/onosproject/yang/serializers/json/DefaultJsonWalker.java
index 3c2c4b4..eaa4bdf 100644
--- a/serializers/json/src/main/java/org/onosproject/yang/serializers/json/DefaultJsonWalker.java
+++ b/serializers/json/src/main/java/org/onosproject/yang/serializers/json/DefaultJsonWalker.java
@@ -16,14 +16,15 @@
 
 package org.onosproject.yang.serializers.json;
 
-import java.util.Iterator;
-import java.util.Map;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.JsonNodeType;
 import org.onosproject.yang.model.DataNode;
 import org.onosproject.yang.runtime.helperutils.SerializerHelper;
 
+import java.util.Iterator;
+import java.util.Map;
+
 import static org.onosproject.yang.model.DataNode.Type.MULTI_INSTANCE_LEAF_VALUE_NODE;
 import static org.onosproject.yang.model.DataNode.Type.MULTI_INSTANCE_NODE;
 import static org.onosproject.yang.model.DataNode.Type.SINGLE_INSTANCE_LEAF_VALUE_NODE;
@@ -46,12 +47,24 @@
         dataNodeBuilder = db;
     }
 
+    /**
+     * Returns the root data node builder.
+     *
+     * @return data node builder
+     */
+    public DataNode.Builder rootBuilder() {
+        return dataNodeBuilder;
+    }
+
     @Override
     public void walkJsonNode(String fieldName, JsonNode jsonNode) {
         if (!jsonNode.isContainerNode()) {
             //the node has no children, so add it as leaf node to the data tree.
             addLeafNodeToDataTree(fieldName, jsonNode);
-            dataNodeBuilder = SerializerHelper.exitDataNode(dataNodeBuilder);
+            // this is to avoid exit node for top level node
+            if (dataNodeBuilder.parent() != null) {
+                dataNodeBuilder = SerializerHelper.exitDataNode(dataNodeBuilder);
+            }
             return;
         }
 
@@ -83,7 +96,10 @@
                 walkJsonNode(null, element);
 
                 // We are done with this array element.
-                dataNodeBuilder = SerializerHelper.exitDataNode(dataNodeBuilder);
+                // this is to avoid exit node for top level node
+                if (dataNodeBuilder.parent() != null) {
+                    dataNodeBuilder = SerializerHelper.exitDataNode(dataNodeBuilder);
+                }
             }
 
             // We are done with this array node.
@@ -114,7 +130,7 @@
             // SerializerHelper.exitDataNode(dataNodeBuilder);
         }
 
-        if (fieldName != null) {
+        if (fieldName != null && dataNodeBuilder.parent() != null) {
             // move up since we finish creating a container node.
             dataNodeBuilder = SerializerHelper.exitDataNode(dataNodeBuilder);
         }