[ONOS-5764]Decoder is returning Null
Change-Id: I51dabe5a7133df6e5766cb3ed3c36a596936263b
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/DefaultYangCodecHandler.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/DefaultYangCodecHandler.java
index 3e990be..266b391 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/DefaultYangCodecHandler.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/DefaultYangCodecHandler.java
@@ -205,7 +205,6 @@
if (ydtBuilder != null) {
return getObjectList(ydtBuilder.getRootNode());
}
-
return null;
}
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/xml/DefaultXmlCodecWalker.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/xml/DefaultXmlCodecWalker.java
index b5a9ea2..11a14ff 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/xml/DefaultXmlCodecWalker.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/xml/DefaultXmlCodecWalker.java
@@ -35,7 +35,10 @@
public void walk(XmlListener listener, Element element,
Element rootElement) {
try {
- listener.enterXmlElement(element, getElementType(element),
+ Element newElement = element.createCopy();
+ newElement.remove(element.getNamespace());
+
+ listener.enterXmlElement(element, getElementType(newElement),
rootElement);
if (element.hasContent() && !element.isTextOnly()) {
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/xml/XmlCodecListener.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/xml/XmlCodecListener.java
index 1c6536a..eefc60f 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/xml/XmlCodecListener.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ych/defaultcodecs/xml/XmlCodecListener.java
@@ -37,6 +37,8 @@
*/
private YdtExtendedBuilder ydtExtBuilder;
+ private String prevNodeNamespace;
+
/**
* Sets the YANG data tree builder object.
*
@@ -69,21 +71,42 @@
nameSpace = element.getNamespace().getURI();
}
+ /*
+ * When new module has to be added, and if curnode has reference of
+ * previous module, then we need to traverse back to parent(logical root
+ * node).
+ */
+ if (ydtExtBuilder.getRootNode() == ydtExtBuilder.getCurNode()
+ .getParent() && prevNodeNamespace != null &&
+ !prevNodeNamespace.equals(nameSpace)) {
+ ydtExtBuilder.traverseToParent();
+ }
+
if (nodeType == OBJECT_NODE && element.content() == null || element
.content().isEmpty()) {
nodeType = TEXT_NODE;
}
if (nodeType == OBJECT_NODE) {
if (ydtExtBuilder != null) {
+ if (ydtExtBuilder.getCurNode() == ydtExtBuilder.getRootNode()) {
+ ydtExtBuilder.addChild(null, nameSpace, opType);
+ }
ydtExtBuilder.addChild(element.getName(), nameSpace, opType);
}
} else if (nodeType == TEXT_NODE) {
if (ydtExtBuilder != null) {
+ if (ydtExtBuilder.getCurNode() == ydtExtBuilder.getRootNode()) {
+ ydtExtBuilder.addChild(null, nameSpace, opType);
+ }
ydtExtBuilder.addLeaf(element.getName(), nameSpace,
element.getText());
}
}
+
+ if (nameSpace != null) {
+ prevNodeNamespace = nameSpace;
+ }
}
@Override
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YangRequestWorkBench.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YangRequestWorkBench.java
index 75e00f2..cd37eea 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YangRequestWorkBench.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ydt/YangRequestWorkBench.java
@@ -317,6 +317,20 @@
boolean contextSwitch = false;
YangSchemaNode augmentingSchema = null;
YangSchemaNodeIdentifier id = getNodeIdentifier(name, namespace);
+ if (name == null) {
+ if (!curNode.equals(rootNode)) {
+ throw new YdtException("Name is null for node other than module");
+ }
+
+ /*
+ * Since XML will not have module name, id.name will be null. In
+ * that case get schema node by using namespace. In NBI flow,
+ * name will never be null.
+ */
+ YangSchemaNode node = registry
+ .getSchemaWrtNameSpace(id.getNameSpace().getModuleNamespace());
+ id.setName(node.getName());
+ }
try {
// Module/sub-module node handler.