Details
-
Type:
Bug
-
Status:
Resolved
-
Priority:
Critical
-
Resolution: Fixed
-
Affects Version/s: 1.0
-
Fix Version/s: 1.3.3
-
Labels:None
-
Number of attachments :
Description
Following JSON structure is wrongly transformed to XML by MappedXMLStreamReader
{"folders":{
"folder":[
{
"name":"images",
},
{
"name":"misc",
}
]
}
}
The correct XML should looks like:
<folders> <folder> <name>images</name> </folder> <folder> <name>misc</name> </folder> </folders>
Following code shows, that the event END_ELEMENT for </folder> is never produced:
JSONObject obj = new JSONObject(new JSONTokener(getClasspathFileContent("json/valid/test.txt"))); XMLStreamReader r = new MappedXMLStreamReader(obj, new MappedNamespaceConvention(config)); StringBuilder indent = new StringBuilder(); int c; while(r.hasNext()) { if (XMLStreamReader.START_ELEMENT == r.next()) { System.out.print(indent); System.out.println("<"+r.getName()+">"); indent.append(" "); } else if (XMLStreamReader.END_ELEMENT == r.next()) { indent.replace(0, 2, ""); System.out.print(indent); System.out.println("</"+r.getName()+">"); } }
Sample code above is buggy: please note that r.next() advances the reader, so by the time 'else' part gets invoked, one event has already been skipped. Instead, you should get event type via sr.next() first, then compare it.