diff options
author | janani b <janani.b@huawei.com> | 2018-10-08 16:13:36 +0530 |
---|---|---|
committer | janani b <janani.b@huawei.com> | 2018-10-08 16:33:50 +0530 |
commit | da54fc49d3f16d7028a42cd90ad1500973814790 (patch) | |
tree | 1a4e3a7c444d5e75cba8bdff5c36d1ad86b3eee0 | |
parent | 769622040a1fa819d2708c50d4904ac24b867a38 (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>
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" + |