Fix xml to json converter
authorEduardo Ramos Testillano (ert) <eduardo.ramos.testillano@gmail.com>
Mon, 1 Nov 2021 12:56:53 +0000 (13:56 +0100)
committerEduardo Ramos Testillano (ert) <eduardo.ramos.testillano@gmail.com>
Mon, 1 Nov 2021 12:56:53 +0000 (13:56 +0100)
When an array has a unique element, xmltodict does not
parse it as an array, but a single object. This causes
a problem in the diameter xml conversion because the
library for reverse conversion [0] won't follow the
diameter message dtd template.

Fortunately, xmltodict supports [1] force array for specific
node name, so we will force this for 'avp' which is the
one affected.

[0] https://github.com/testillano/json2xml
[1] https://stackoverflow.com/questions/37207353/xmltodict-does-not-return-a-list-for-one-element

example/diameter/launcher/resources/rest_api/helpers/diameterJsonHelper/xml2json.py

index 707053d..bb25d8e 100755 (executable)
@@ -46,7 +46,7 @@ except:
 # force the value just in case xmltodict implementation
 # changes. The anna::core::functions::json2xml helper,
 # assumes this prefix in order to work properly.
-result=xmltodict.parse(xml, attr_prefix='@')
+result=xmltodict.parse(xml, force_list={'avp'}, attr_prefix='@')
 
 if parent:
   result = { parent: result }