From da54fc49d3f16d7028a42cd90ad1500973814790 Mon Sep 17 00:00:00 2001 From: janani b Date: Mon, 8 Oct 2018 16:13:36 +0530 Subject: [PATCH] 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 --- .../dfserializer/DfSerializerUtil.java | 7 +- .../dfserializer/PropertiesNodeXmlListener.java | 12 ++-- .../dfserializer/XmlSerializer.java | 18 ++++- .../dfserializer/DataFormatSerializerTest.java | 20 ++++++ .../dfserializer/DataFormatUtilsTest.java | 78 ++++++++++++---------- 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("" + "\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; /** @@ -276,6 +277,25 @@ public class DataFormatSerializerTest { assertThat(dfCaptor.getResult(), is(ENCODE_TO_XML_YANG)); } + /** + * 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" + + "\n" + + " abc\n" + + " abc\n" + + " \n" + + " abc\n" + + " \n" + + " \n" + + " abc\n" + + " \n" + + " abc\n" + + " \n" + + " abc\n" + + " \n" + + "\n" + + "\n" + + " test\n" + + "\n" + + "\n" + + " create\n" + + "\n" + + "abc\n" + + "unbounded\n" + + "8\n" + + "\n" + + " true\n" + + ""; + + static final String ENCODE_TO_XML_YANG_AUG_POST = "\n" + + "abc" + + "" + + ENCODE_TO_XML_YANG_COMMON + "\n"; + static final String ENCODE_TO_XML_YANG = "\n" + "\n" + @@ -305,40 +346,8 @@ public final class DataFormatUtilsTest { " abc\n" + " abc\n" + " \n" + - " abc\n" + - " \n" + - " abc\n" + - " abc\n" + - " \n" + - " abc\n" + - " \n" + - " \n" + - " abc\n" + - " \n" + - " abc\n" + - " \n" + - " abc\n" + - " \n" + - " \n" + - " \n" + - " test\n" + - " \n" + - " \n" + - " create\n" + - " \n" + - " abc\n" + - " unbounded\n" + - " 8\n" + - " \n" + - " true\n" + - " \n" + + " abc"+ + addSpace(ENCODE_TO_XML_YANG_COMMON, 8) + "\n" + " \n" + " abc\n" + " abc\n" + @@ -362,7 +371,6 @@ public final class DataFormatUtilsTest { " \n" + "\n"; - static final String ENCODE_TO_JSON_RPC = "{\n" + " \"test-yang:input\": {\n" + " \"leaf30\": \"abc\",\n" + -- 2.16.6