[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);
}