From e20624cb882dac390486c5d6e8f3b00713c227ed Mon Sep 17 00:00:00 2001 From: "Arun Karunagath (kra3)" Date: Wed, 16 Dec 2015 18:23:29 +0530 Subject: [PATCH 1/4] Keep proper data type for JSON arrays between conversions. --- src/main/java/org/kordamp/json/xml/XMLSerializer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/kordamp/json/xml/XMLSerializer.java b/src/main/java/org/kordamp/json/xml/XMLSerializer.java index d6079754..4b67f589 100644 --- a/src/main/java/org/kordamp/json/xml/XMLSerializer.java +++ b/src/main/java/org/kordamp/json/xml/XMLSerializer.java @@ -1368,10 +1368,10 @@ private void setValue(JSONArray jsonArray, Element element, String defaultType) params = StringUtils.split(paramsAttribute.getValue(), ","); jsonArray.element(new JSONFunction(params, text)); return; - } else { + }/* else { jsonArray.element(simplifyValue(null, processElement(element, type))); return; - } + }*/ } boolean classProcessed = false; From b58513ad03cddabcdd764cf162ead84f944337b1 Mon Sep 17 00:00:00 2001 From: "Arun Karunagath (kra3)" Date: Thu, 17 Dec 2015 20:22:54 +0530 Subject: [PATCH 2/4] Properly convert to and from JSON and XML, (Fixed Arrays, #7) --- .gitignore | 1 + .../java/org/kordamp/json/xml/XMLSerializer.java | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 8566b943..c0357189 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ build *.iws .idea out +/.nb-gradle/ \ No newline at end of file diff --git a/src/main/java/org/kordamp/json/xml/XMLSerializer.java b/src/main/java/org/kordamp/json/xml/XMLSerializer.java index 4b67f589..8f923cd2 100644 --- a/src/main/java/org/kordamp/json/xml/XMLSerializer.java +++ b/src/main/java/org/kordamp/json/xml/XMLSerializer.java @@ -522,6 +522,7 @@ public JSON read(String xml) { try { Document doc = new Builder().build(new StringReader(xml)); Element root = doc.getRootElement(); + log.info("[ " + root.getLocalName() + " " + isNullObject(root) + " " + isArray(root, true)); if (isNullObject(root)) { return JSONNull.getInstance(); } @@ -830,7 +831,7 @@ private boolean checkChildElements(Element element, boolean isTopLevel) { } } } - + String childName = elements.get(0) .getQualifiedName(); for (int i = 1; i < elementCount; i++) { @@ -929,7 +930,7 @@ private boolean isArray(Element element, boolean isTopLevel) { && (element.getAttribute(addJsonPrefix("class")) != null && element.getAttribute(addJsonPrefix("type")) != null)) { isArray = checkChildElements(element, isTopLevel); } - + if (isArray) { // check namespace for (int j = 0; j < element.getNamespaceDeclarationCount(); j++) { @@ -941,6 +942,11 @@ private boolean isArray(Element element, boolean isTopLevel) { } } + if(!isArray && isTopLevel && !isForceTopLevelObject() + && element.getQualifiedName().equalsIgnoreCase(getArrayName())){ + isArray = true; + } + return isArray; } @@ -974,6 +980,12 @@ private boolean isNullObject(Element element) { && (element.getAttribute(addJsonPrefix("class")) != null && element.getAttribute(addJsonPrefix("type")) != null)) { return true; } +// String clazz = getClass(element); +// if(element.getAttribute(addJsonPrefix("class")) != null && +// (clazz.equalsIgnoreCase(JSONTypes.OBJECT) || +// clazz.equalsIgnoreCase(JSONTypes.ARRAY))){ +// return false; +// } } if (skipWhitespace && element.getChildCount() == 1 && element.getChild(0) instanceof Text) { return true; From d098e14cad38e68e7c45697163e6250e5dc26396 Mon Sep 17 00:00:00 2001 From: "Arun Karunagath (kra3)" Date: Thu, 17 Dec 2015 21:27:50 +0530 Subject: [PATCH 3/4] Cleaning up stale code which is introduced while testing. --- src/main/java/org/kordamp/json/xml/XMLSerializer.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/main/java/org/kordamp/json/xml/XMLSerializer.java b/src/main/java/org/kordamp/json/xml/XMLSerializer.java index 8f923cd2..601dc78b 100644 --- a/src/main/java/org/kordamp/json/xml/XMLSerializer.java +++ b/src/main/java/org/kordamp/json/xml/XMLSerializer.java @@ -980,12 +980,6 @@ private boolean isNullObject(Element element) { && (element.getAttribute(addJsonPrefix("class")) != null && element.getAttribute(addJsonPrefix("type")) != null)) { return true; } -// String clazz = getClass(element); -// if(element.getAttribute(addJsonPrefix("class")) != null && -// (clazz.equalsIgnoreCase(JSONTypes.OBJECT) || -// clazz.equalsIgnoreCase(JSONTypes.ARRAY))){ -// return false; -// } } if (skipWhitespace && element.getChildCount() == 1 && element.getChild(0) instanceof Text) { return true; From f5dfa99510152f4c78112e41520b8e5c4da47ab8 Mon Sep 17 00:00:00 2001 From: "Arun Karunagath (kra3)" Date: Thu, 17 Dec 2015 22:20:37 +0530 Subject: [PATCH 4/4] Added few more test cases --- .../json/xml/TestXMLSerializer_reads.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/test/java/org/kordamp/json/xml/TestXMLSerializer_reads.java b/src/test/java/org/kordamp/json/xml/TestXMLSerializer_reads.java index c2b4f71c..270643c2 100644 --- a/src/test/java/org/kordamp/json/xml/TestXMLSerializer_reads.java +++ b/src/test/java/org/kordamp/json/xml/TestXMLSerializer_reads.java @@ -309,14 +309,28 @@ public void testReadNestedObject() { JSONObject expected = JSONObject.fromObject("{name:\"json\",nested:{id:1}}"); Assertions.assertEquals(expected, actual); } + + public void testReadNestedArray(){ + String xml = " values 1 "; + JSON actual = (JSONArray) xmlSerializer.read(xml); + JSON expected = JSONArray.fromObject("[[\"values\", 1]]"); + Assertions.assertEquals(expected, actual); + } + public void testReadSingleElementArray(){ + String xml = " val "; + JSON actual = xmlSerializer.read(xml); + JSON expected = JSONArray.fromObject("[\"val\"]"); + Assertions.assertEquals(expected, actual); + } + public void testReadNumberArray_withDefaultType() { String xml = "1.12.23"; JSON actual = xmlSerializer.read(xml); JSON expected = JSONArray.fromObject("[1.1,2.2,3]"); Assertions.assertEquals(expected, actual); } - + public void testReadNumberArray_withoutDefaultType() { String xml = "1.12.23"; JSON actual = xmlSerializer.read(xml);