summaryrefslogtreecommitdiffstats
path: root/cps-service/src
diff options
context:
space:
mode:
Diffstat (limited to 'cps-service/src')
-rw-r--r--cps-service/src/main/java/org/onap/cps/utils/XmlFileUtils.java46
-rw-r--r--cps-service/src/test/groovy/org/onap/cps/utils/XmlFileUtilsSpec.groovy34
2 files changed, 42 insertions, 38 deletions
diff --git a/cps-service/src/main/java/org/onap/cps/utils/XmlFileUtils.java b/cps-service/src/main/java/org/onap/cps/utils/XmlFileUtils.java
index 94b97bd88f..bbfb7f4d2e 100644
--- a/cps-service/src/main/java/org/onap/cps/utils/XmlFileUtils.java
+++ b/cps-service/src/main/java/org/onap/cps/utils/XmlFileUtils.java
@@ -189,30 +189,32 @@ public class XmlFileUtils {
private static void createXmlElements(final Document document, final Node parentNode,
final Map<String, Object> dataMap) {
- for (final Map.Entry<String, Object> mapEntry : dataMap.entrySet()) {
- if (mapEntry.getValue() instanceof List) {
- appendList(document, parentNode, mapEntry);
- } else if (mapEntry.getValue() instanceof Map) {
- appendMap(document, parentNode, mapEntry);
+ for (final Map.Entry<String, Object> dataNodeMapEntry : dataMap.entrySet()) {
+ if (dataNodeMapEntry.getValue() instanceof List) {
+ appendList(document, parentNode, dataNodeMapEntry);
+ } else if (dataNodeMapEntry.getValue() instanceof Map) {
+ appendMap(document, parentNode, dataNodeMapEntry);
} else {
- appendObject(document, parentNode, mapEntry);
+ appendObject(document, parentNode, dataNodeMapEntry);
}
}
}
private static void appendList(final Document document, final Node parentNode,
- final Map.Entry<String, Object> mapEntry) {
- final List<Object> list = (List<Object>) mapEntry.getValue();
- if (list.isEmpty()) {
- final Element listElement = document.createElement(mapEntry.getKey());
+ final Map.Entry<String, Object> dataNodeMapEntry) {
+ final List<Object> dataNodeMaps = (List<Object>) dataNodeMapEntry.getValue();
+ if (dataNodeMaps.isEmpty()) {
+ final Element listElement = document.createElement(dataNodeMapEntry.getKey());
parentNode.appendChild(listElement);
} else {
- for (final Object element : list) {
- final Element listElement = document.createElement(mapEntry.getKey());
- if (element instanceof Map) {
- createXmlElements(document, listElement, (Map<String, Object>) element);
+ for (final Object dataNodeMap : dataNodeMaps) {
+ final Element listElement = document.createElement(dataNodeMapEntry.getKey());
+ if (dataNodeMap == null) {
+ parentNode.appendChild(listElement);
+ } else if (dataNodeMap instanceof Map) {
+ createXmlElements(document, listElement, (Map<String, Object>) dataNodeMap);
} else {
- listElement.appendChild(document.createTextNode(element.toString()));
+ listElement.appendChild(document.createTextNode(dataNodeMap.toString()));
}
parentNode.appendChild(listElement);
}
@@ -220,16 +222,18 @@ public class XmlFileUtils {
}
private static void appendMap(final Document document, final Node parentNode,
- final Map.Entry<String, Object> mapEntry) {
- final Element childElement = document.createElement(mapEntry.getKey());
- createXmlElements(document, childElement, (Map<String, Object>) mapEntry.getValue());
+ final Map.Entry<String, Object> dataNodeMapEntry) {
+ final Element childElement = document.createElement(dataNodeMapEntry.getKey());
+ createXmlElements(document, childElement, (Map<String, Object>) dataNodeMapEntry.getValue());
parentNode.appendChild(childElement);
}
private static void appendObject(final Document document, final Node parentNode,
- final Map.Entry<String, Object> mapEntry) {
- final Element element = document.createElement(mapEntry.getKey());
- element.appendChild(document.createTextNode(mapEntry.getValue().toString()));
+ final Map.Entry<String, Object> dataNodeMapEntry) {
+ final Element element = document.createElement(dataNodeMapEntry.getKey());
+ if (dataNodeMapEntry.getValue() != null) {
+ element.appendChild(document.createTextNode(dataNodeMapEntry.getValue().toString()));
+ }
parentNode.appendChild(element);
}
diff --git a/cps-service/src/test/groovy/org/onap/cps/utils/XmlFileUtilsSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/utils/XmlFileUtilsSpec.groovy
index 3b21145293..9a932c9279 100644
--- a/cps-service/src/test/groovy/org/onap/cps/utils/XmlFileUtilsSpec.groovy
+++ b/cps-service/src/test/groovy/org/onap/cps/utils/XmlFileUtilsSpec.groovy
@@ -32,7 +32,7 @@ import static org.onap.cps.utils.XmlFileUtils.convertDataMapsToXml
class XmlFileUtilsSpec extends Specification {
- def 'Parse a valid xml content #scenario'(){
+ def 'Parse a valid xml content #scenario'() {
given: 'YANG model schema context'
def yangResourceNameToContent = TestUtils.getYangResourcesAsMap('bookstore.yang')
def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent).getSchemaContext()
@@ -41,13 +41,13 @@ class XmlFileUtilsSpec extends Specification {
then: 'the result xml is wrapped by root node defined in YANG schema'
assert parsedXmlContent == expectedOutput
where:
- scenario | xmlData || expectedOutput
- 'without root data node' | '<?xml version="1.0" encoding="UTF-8"?><class> </class>' || '<?xml version="1.0" encoding="UTF-8"?><stores xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"><class> </class></stores>'
- 'with root data node' | '<?xml version="1.0" encoding="UTF-8"?><stores><class> </class></stores>' || '<?xml version="1.0" encoding="UTF-8"?><stores><class> </class></stores>'
- 'no xml header' | '<stores><class> </class></stores>' || '<stores><class> </class></stores>'
+ scenario | xmlData || expectedOutput
+ 'without root data node' | '<?xml version="1.0" encoding="UTF-8"?><class> </class>' || '<?xml version="1.0" encoding="UTF-8"?><stores xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"><class> </class></stores>'
+ 'with root data node' | '<?xml version="1.0" encoding="UTF-8"?><stores><class> </class></stores>' || '<?xml version="1.0" encoding="UTF-8"?><stores><class> </class></stores>'
+ 'no xml header' | '<stores><class> </class></stores>' || '<stores><class> </class></stores>'
}
- def 'Parse a invalid xml content'(){
+ def 'Parse a invalid xml content'() {
given: 'YANG model schema context'
def yangResourceNameToContent = TestUtils.getYangResourcesAsMap('bookstore.yang')
def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent).getSchemaContext()
@@ -84,9 +84,6 @@ class XmlFileUtilsSpec extends Specification {
'nested XML branch' | [['test-tree': [branch: [name: 'Left', nest: [name: 'Small', birds: 'Sparrow']]]]] || '<test-tree><branch><name>Left</name><nest><name>Small</name><birds>Sparrow</birds></nest></branch></test-tree>'
'list of branch within a test tree' | [['test-tree': [branch: [[name: 'Left', nest: [name: 'Small', birds: 'Sparrow']], [name: 'Right', nest: [name: 'Big', birds: 'Owl']]]]]] || '<test-tree><branch><name>Left</name><nest><name>Small</name><birds>Sparrow</birds></nest></branch><branch><name>Right</name><nest><name>Big</name><birds>Owl</birds></nest></branch></test-tree>'
'list of birds under a nest' | [['nest': ['name': 'Small', 'birds': ['Sparrow']]]] || '<nest><name>Small</name><birds>Sparrow</birds></nest>'
- 'XML Content map with null key/value' | [['test-tree': [branch: [name: 'Left', nest: []]]]] || '<test-tree><branch><name>Left</name><nest/></branch></test-tree>'
- 'XML Content list is empty' | [['nest': ['name': 'Small', 'birds': []]]] || '<nest><name>Small</name><birds/></nest>'
- 'XML with mixed content in list' | [['branch': ['name': 'Left', 'nest': ['name': 'Small', 'birds': ['', 'Sparrow']]]]] || '<branch><name>Left</name><nest><name>Small</name><birds/><birds>Sparrow</birds></nest></branch>'
}
def 'Convert data maps to XML with null or empty maps and lists'() {
@@ -95,11 +92,14 @@ class XmlFileUtilsSpec extends Specification {
then: 'the result contains the expected XML or handles nulls correctly'
assert result == expectedXmlOutput
where:
- scenario | dataMaps || expectedXmlOutput
- 'null entry in map' | [['branch': []]] || '<branch/>'
- 'list with null object' | [['branch': [name: 'Left', nest: [name: 'Small', birds: []]]]] || '<branch><name>Left</name><nest><name>Small</name><birds/></nest></branch>'
- 'list containing null list' | [['test-tree': [branch: '']]] || '<test-tree><branch/></test-tree>'
- 'nested map with null values' | [['test-tree': [branch: [name: 'Left', nest: '']]]] || '<test-tree><branch><name>Left</name><nest/></branch></test-tree>'
+ scenario | dataMaps || expectedXmlOutput
+ 'null entry in map' | [['branch': []]] || '<branch/>'
+ 'XML Content list is empty' | [['nest': ['name': 'Small', 'birds': [null]]]] || '<nest><name>Small</name><birds/></nest>'
+ 'XML with mixed content in list' | [['branch': ['name': 'Left', 'nest': ['name': 'Small', 'birds': [null, 'Sparrow']]]]] || '<branch><name>Left</name><nest><name>Small</name><birds/><birds>Sparrow</birds></nest></branch>'
+ 'list with null object' | [['branch': [name: 'Left', nest: [name: 'Small', birds: [null]]]]] || '<branch><name>Left</name><nest><name>Small</name><birds/></nest></branch>'
+ 'list containing null values' | [['branch': [null, null, null]]] || '<branch/><branch/><branch/>'
+ 'nested map with null values' | [['test-tree': [branch: [name: 'Left', nest: null]]]] || '<test-tree><branch><name>Left</name><nest/></branch></test-tree>'
+ 'mixed list with null values' | [['branch': ['name': 'Left', 'nest': ['name': 'Small', 'birds': [null, 'Sparrow', null]]]]] || '<branch><name>Left</name><nest><name>Small</name><birds/><birds>Sparrow</birds><birds/></nest></branch>'
}
def 'Converting data maps to xml with no data'() {
@@ -109,7 +109,7 @@ class XmlFileUtilsSpec extends Specification {
convertDataMapsToXml(dataMapWithNull)
then: 'a validation exception is thrown'
def exception = thrown(DataValidationException)
- and:'the cause is a null pointer exception'
+ and: 'the cause is a null pointer exception'
assert exception.cause instanceof NullPointerException
}
@@ -120,9 +120,9 @@ class XmlFileUtilsSpec extends Specification {
convertDataMapsToXml(dataMap)
then: 'a validation exception is thrown'
def exception = thrown(DataValidationException)
- and:'the cause is a document object model exception'
+ and: 'the cause is a document object model exception'
assert exception.cause instanceof DOMException
}
-}
+} \ No newline at end of file