diff options
Diffstat (limited to 'cps-service/src')
-rw-r--r-- | cps-service/src/main/java/org/onap/cps/utils/XmlFileUtils.java | 46 | ||||
-rw-r--r-- | cps-service/src/test/groovy/org/onap/cps/utils/XmlFileUtilsSpec.groovy | 34 |
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 |