aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjanani b <janani.b@huawei.com>2018-10-08 16:13:36 +0530
committerjanani b <janani.b@huawei.com>2018-10-08 16:33:50 +0530
commitda54fc49d3f16d7028a42cd90ad1500973814790 (patch)
tree1a4e3a7c444d5e75cba8bdff5c36d1ad86b3eee0
parent769622040a1fa819d2708c50d4904ac24b867a38 (diff)
Appending dummy root node to XML data format
To hold all the children in XML message a dummy root node is added Issue-ID: CCSDK-324 Change-Id: I7cf0266d15e6bfaa2b9207e77d8bd5372a164b4f Signed-off-by: janani b <janani.b@huawei.com>
-rw-r--r--restconf-client/provider/src/main/java/org/onap/ccsdk/sli/plugins/yangserializers/dfserializer/DfSerializerUtil.java7
-rw-r--r--restconf-client/provider/src/main/java/org/onap/ccsdk/sli/plugins/yangserializers/dfserializer/PropertiesNodeXmlListener.java12
-rw-r--r--restconf-client/provider/src/main/java/org/onap/ccsdk/sli/plugins/yangserializers/dfserializer/XmlSerializer.java18
-rw-r--r--restconf-client/provider/src/test/java/org/onap/ccsdk/sli/plugins/yangserializers/dfserializer/DataFormatSerializerTest.java20
-rw-r--r--restconf-client/provider/src/test/java/org/onap/ccsdk/sli/plugins/yangserializers/dfserializer/DataFormatUtilsTest.java78
5 files changed, 87 insertions, 48 deletions
diff --git a/restconf-client/provider/src/main/java/org/onap/ccsdk/sli/plugins/yangserializers/dfserializer/DfSerializerUtil.java b/restconf-client/provider/src/main/java/org/onap/ccsdk/sli/plugins/yangserializers/dfserializer/DfSerializerUtil.java
index 598b08c1..fbebd2b2 100644
--- a/restconf-client/provider/src/main/java/org/onap/ccsdk/sli/plugins/yangserializers/dfserializer/DfSerializerUtil.java
+++ b/restconf-client/provider/src/main/java/org/onap/ccsdk/sli/plugins/yangserializers/dfserializer/DfSerializerUtil.java
@@ -210,11 +210,10 @@ public final class DfSerializerUtil {
* @return base type definition
*/
static TypeDefinition<?> resolveBaseTypeFrom(TypeDefinition<?> type) {
- TypeDefinition superType;
- for(superType = type; superType.getBaseType() != null;
- superType = superType.getBaseType()) {
+ TypeDefinition superType = type;
+ while (superType.getBaseType() != null) {
+ superType = superType.getBaseType();
}
return superType;
}
-
}
diff --git a/restconf-client/provider/src/main/java/org/onap/ccsdk/sli/plugins/yangserializers/dfserializer/PropertiesNodeXmlListener.java b/restconf-client/provider/src/main/java/org/onap/ccsdk/sli/plugins/yangserializers/dfserializer/PropertiesNodeXmlListener.java
index 39a08e38..f098195e 100644
--- a/restconf-client/provider/src/main/java/org/onap/ccsdk/sli/plugins/yangserializers/dfserializer/PropertiesNodeXmlListener.java
+++ b/restconf-client/provider/src/main/java/org/onap/ccsdk/sli/plugins/yangserializers/dfserializer/PropertiesNodeXmlListener.java
@@ -78,11 +78,13 @@ public class PropertiesNodeXmlListener implements PropertiesNodeListener {
@Override
public void start(PropertiesNode node) {
- //Do Nothing.
+ rootElement = addElement(null, node);
+ elementStack.push(rootElement);
}
@Override
public void end(PropertiesNode node) throws SvcLogicException {
+ xmlData = rootElement.asXML();
xmlData = UTF_HEADER + xmlData;
writer = getXmlWriter(xmlData, "4");
}
@@ -113,9 +115,6 @@ public class PropertiesNodeXmlListener implements PropertiesNodeListener {
NODE_TYPE_ERR, node.nodeType().toString()));
}
if (element != null) {
- if (elementStack.isEmpty()) {
- rootElement = element;
- }
elementStack.push(element);
}
}
@@ -133,10 +132,7 @@ public class PropertiesNodeXmlListener implements PropertiesNodeListener {
case MULTI_INSTANCE_NODE:
case MULTI_INSTANCE_LEAF_NODE:
case SINGLE_INSTANCE_LEAF_NODE:
- if (!elementStack.isEmpty() &&
- elementStack.peek().equals(rootElement)) {
- xmlData = rootElement.asXML();
- } else {
+ if (!elementStack.isEmpty()) {
elementStack.pop();
}
break;
diff --git a/restconf-client/provider/src/main/java/org/onap/ccsdk/sli/plugins/yangserializers/dfserializer/XmlSerializer.java b/restconf-client/provider/src/main/java/org/onap/ccsdk/sli/plugins/yangserializers/dfserializer/XmlSerializer.java
index 6eeb4b82..f3c6723e 100644
--- a/restconf-client/provider/src/main/java/org/onap/ccsdk/sli/plugins/yangserializers/dfserializer/XmlSerializer.java
+++ b/restconf-client/provider/src/main/java/org/onap/ccsdk/sli/plugins/yangserializers/dfserializer/XmlSerializer.java
@@ -61,7 +61,7 @@ public class XmlSerializer extends DataFormatSerializer {
PropertiesNodeXmlListener xmlListener = new PropertiesNodeXmlListener();
nodeWalker.walk(xmlListener, propNode);
Writer writer = xmlListener.getWriter();
- return writer.toString();
+ return removeRootNode(writer.toString(), propNode.name());
}
@Override
@@ -85,4 +85,20 @@ public class XmlSerializer extends DataFormatSerializer {
return serializerContext().getPropNodeSerializer().decode(
listener.serializerHelper().getPropertiesNode());
}
+
+ /**
+ * Removes root node from the XML data format message and makes the
+ * string to be pretty print.
+ *
+ * @param xml XML data format message
+ * @param rootName root node name
+ * @return pretty print format XML message
+ */
+ private static String removeRootNode(String xml, String rootName) {
+ xml = xml.replace("\n<" + rootName + ">", "\n");
+ xml = xml.replace("</" + rootName + ">" + "\n", "");
+ xml = xml.replaceAll("\n" + " ", "\n");
+ xml = xml.replaceFirst("\n", "");
+ return xml;
+ }
} \ No newline at end of file
diff --git a/restconf-client/provider/src/test/java/org/onap/ccsdk/sli/plugins/yangserializers/dfserializer/DataFormatSerializerTest.java b/restconf-client/provider/src/test/java/org/onap/ccsdk/sli/plugins/yangserializers/dfserializer/DataFormatSerializerTest.java
index 40f4c4b1..1185eea1 100644
--- a/restconf-client/provider/src/test/java/org/onap/ccsdk/sli/plugins/yangserializers/dfserializer/DataFormatSerializerTest.java
+++ b/restconf-client/provider/src/test/java/org/onap/ccsdk/sli/plugins/yangserializers/dfserializer/DataFormatSerializerTest.java
@@ -54,6 +54,7 @@ import static org.onap.ccsdk.sli.plugins.yangserializers.dfserializer.DataFormat
import static org.onap.ccsdk.sli.plugins.yangserializers.dfserializer.DataFormatUtilsTest.ENCODE_TO_XML_ID;
import static org.onap.ccsdk.sli.plugins.yangserializers.dfserializer.DataFormatUtilsTest.ENCODE_TO_XML_RPC;
import static org.onap.ccsdk.sli.plugins.yangserializers.dfserializer.DataFormatUtilsTest.ENCODE_TO_XML_YANG;
+import static org.onap.ccsdk.sli.plugins.yangserializers.dfserializer.DataFormatUtilsTest.ENCODE_TO_XML_YANG_AUG_POST;
/**
@@ -277,6 +278,25 @@ public class DataFormatSerializerTest {
}
/**
+ * Verifies encoding of parameters to XML data format with augment as
+ * root child.
+ *
+ * @throws SvcLogicException when test case fails
+ */
+ @Test
+ public void encodeToXmlWithAugAsRootChild() throws SvcLogicException {
+ String pre = "test-yang:cont1.cont2.";
+ SvcLogicContext ctx = createAttListYang(pre);
+ p.put("dirPath", "src/test/resources");
+ p.put("format", "xml");
+ p.put("httpMethod", "post");
+ p.put("restapiUrl", "http://echo.getpostman" +
+ ".com/restconf/operations/test-yang:cont1/cont2/cont4");
+ restconf.sendRequest(p, ctx);
+ assertThat(dfCaptor.getResult(), is(ENCODE_TO_XML_YANG_AUG_POST));
+ }
+
+ /**
* Verifies decoding of parameters from XML data format with containers,
* grouping and augment.
*
diff --git a/restconf-client/provider/src/test/java/org/onap/ccsdk/sli/plugins/yangserializers/dfserializer/DataFormatUtilsTest.java b/restconf-client/provider/src/test/java/org/onap/ccsdk/sli/plugins/yangserializers/dfserializer/DataFormatUtilsTest.java
index 7e6445fc..a0a154bf 100644
--- a/restconf-client/provider/src/test/java/org/onap/ccsdk/sli/plugins/yangserializers/dfserializer/DataFormatUtilsTest.java
+++ b/restconf-client/provider/src/test/java/org/onap/ccsdk/sli/plugins/yangserializers/dfserializer/DataFormatUtilsTest.java
@@ -249,6 +249,47 @@ public final class DataFormatUtilsTest {
" }\n" +
"}";
+ static final String ENCODE_TO_XML_YANG_COMMON = "\n" +
+ "<cont13 xmlns=\"urn:opendaylight:params:xml:ns:yang:" +
+ "augment\">\n" +
+ " <ll9>abc</ll9>\n" +
+ " <ll9>abc</ll9>\n" +
+ " <list9>\n" +
+ " <leaf27>abc</leaf27>\n" +
+ " </list9>\n" +
+ " <list9>\n" +
+ " <leaf27>abc</leaf27>\n" +
+ " </list9>\n" +
+ " <leaf28>abc</leaf28>\n" +
+ " <cont12>\n" +
+ " <leaf26>abc</leaf26>\n" +
+ " </cont12>\n" +
+ "</cont13>\n" +
+ "<list7 xmlns=\"urn:opendaylight:params:xml:ns:yang:a" +
+ "ugment\">\n" +
+ " <leaf14>test</leaf14>\n" +
+ "</list7>\n" +
+ "<list7 xmlns=\"urn:opendaylight:params:xml:ns:yang:a" +
+ "ugment\">\n" +
+ " <leaf14>create</leaf14>\n" +
+ "</list7>\n" +
+ "<leaf15 xmlns=\"urn:opendaylight:params:xml:ns:yang:" +
+ "augment\">abc</leaf15>\n" +
+ "<ll6 xmlns=\"urn:opendaylight:params:xml:ns:yang:aug" +
+ "ment\">unbounded</ll6>\n" +
+ "<ll6 xmlns=\"urn:opendaylight:params:xml:ns:yang:aug" +
+ "ment\">8</ll6>\n" +
+ "<cont5 xmlns=\"urn:opendaylight:params:xml:ns:yang:a" +
+ "ugment\">\n" +
+ " <leaf13>true</leaf13>\n" +
+ "</cont5>";
+
+ static final String ENCODE_TO_XML_YANG_AUG_POST = "<?xml version=\"1.0\"" +
+ " encoding=\"UTF-8\" standalone=\"no\"?>\n" +
+ "<leaf10 xmlns=\"urn:opendaylight:params:xml:ns:yang:test\">abc" +
+ "</leaf10>" +
+ ENCODE_TO_XML_YANG_COMMON + "\n";
+
static final String ENCODE_TO_XML_YANG = "<?xml version=\"1.0\" encoding" +
"=\"UTF-8\" standalone=\"no\"?>\n" +
"<cont2 xmlns=\"urn:opendaylight:params:xml:ns:yang:test\">\n" +
@@ -305,40 +346,8 @@ public final class DataFormatUtilsTest {
" <ll5>abc</ll5>\n" +
" <ll5>abc</ll5>\n" +
" <cont4>\n" +
- " <leaf10>abc</leaf10>\n" +
- " <cont13 xmlns=\"urn:opendaylight:params:xml:ns:yang:" +
- "augment\">\n" +
- " <ll9>abc</ll9>\n" +
- " <ll9>abc</ll9>\n" +
- " <list9>\n" +
- " <leaf27>abc</leaf27>\n" +
- " </list9>\n" +
- " <list9>\n" +
- " <leaf27>abc</leaf27>\n" +
- " </list9>\n" +
- " <leaf28>abc</leaf28>\n" +
- " <cont12>\n" +
- " <leaf26>abc</leaf26>\n" +
- " </cont12>\n" +
- " </cont13>\n" +
- " <list7 xmlns=\"urn:opendaylight:params:xml:ns:yang:a" +
- "ugment\">\n" +
- " <leaf14>test</leaf14>\n" +
- " </list7>\n" +
- " <list7 xmlns=\"urn:opendaylight:params:xml:ns:yang:a" +
- "ugment\">\n" +
- " <leaf14>create</leaf14>\n" +
- " </list7>\n" +
- " <leaf15 xmlns=\"urn:opendaylight:params:xml:ns:yang:" +
- "augment\">abc</leaf15>\n" +
- " <ll6 xmlns=\"urn:opendaylight:params:xml:ns:yang:aug" +
- "ment\">unbounded</ll6>\n" +
- " <ll6 xmlns=\"urn:opendaylight:params:xml:ns:yang:aug" +
- "ment\">8</ll6>\n" +
- " <cont5 xmlns=\"urn:opendaylight:params:xml:ns:yang:a" +
- "ugment\">\n" +
- " <leaf13>true</leaf13>\n" +
- " </cont5>\n" +
+ " <leaf10>abc</leaf10>"+
+ addSpace(ENCODE_TO_XML_YANG_COMMON, 8) + "\n" +
" </cont4>\n" +
" <ll4>abc</ll4>\n" +
" <ll4>abc</ll4>\n" +
@@ -362,7 +371,6 @@ public final class DataFormatUtilsTest {
" </list6>\n" +
"</cont2>\n";
-
static final String ENCODE_TO_JSON_RPC = "{\n" +
" \"test-yang:input\": {\n" +
" \"leaf30\": \"abc\",\n" +