This is an automated email from the ASF dual-hosted git repository.

rmannibucau pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/johnzon.git

commit 34ed330ad37e2c819205342934961cb0ac449cb6
Author: Alexander Falb <[email protected]>
AuthorDate: Sun Mar 31 15:42:24 2019 +0200

    JOHNZON-205: add support for arrays in toStructure
---
 .../java/org/apache/johnzon/mapper/Mapper.java     | 25 +++++++++++++++++++---
 .../java/org/apache/johnzon/mapper/MapperTest.java | 21 +++++++++++++++++-
 .../java/org/superbiz/MultiStructureObject.java    |  1 +
 3 files changed, 43 insertions(+), 4 deletions(-)

diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mapper.java 
b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mapper.java
index 77b22b6..cc5cdde 100644
--- a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mapper.java
+++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mapper.java
@@ -39,7 +39,7 @@ import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Collection;
-
+import java.util.List;
 import javax.json.JsonArray;
 import javax.json.JsonBuilderFactory;
 import javax.json.JsonObject;
@@ -146,12 +146,31 @@ public class Mapper implements Closeable {
         if (BigInteger.class.isInstance(object)) {
             return provider.createValue(BigInteger.class.cast(object));
         }
+
         final JsonObjectGenerator objectGenerator = new 
JsonObjectGenerator(builderFactory);
-        writeObject(object, objectGenerator, null,
-                isDeduplicateObjects(object.getClass()) ? new 
JsonPointerTracker(null, "/") : null);
+        if (object.getClass().isArray()) {
+            writeObject(objectToList(object), objectGenerator, null,
+                    isDeduplicateObjects(object.getClass()) ? new 
JsonPointerTracker(null, "/") : null);
+        } else {
+            writeObject(object, objectGenerator, null,
+                    isDeduplicateObjects(object.getClass()) ? new 
JsonPointerTracker(null, "/") : null);
+        }
         return objectGenerator.getResult();
     }
 
+    private List objectToList(Object object) {
+        if (Object[].class.isInstance(object)) {
+            return asList(Object[].class.cast(object));
+        }
+
+        int size = Array.getLength(object);
+        Object[] out = new Object[size];
+        for (int i = 0; i < size; i++) {
+            out[i] = Array.get(object, i);
+        }
+        return asList(out);
+    }
+
     public void writeObject(final Object object, final Writer stream) {
         if (JsonValue.class.isInstance(object)
                 || Boolean.class.isInstance(object) || 
String.class.isInstance(object) || Number.class.isInstance(object)
diff --git 
a/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperTest.java 
b/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperTest.java
index 912fbb2..44e79a1 100644
--- a/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperTest.java
+++ b/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperTest.java
@@ -99,15 +99,34 @@ public class MapperTest {
         object.polymorphic.put("b", "2");
         object.nesteds = Collections.singletonList(n1);
         object.nestedMap = Collections.singletonMap("n1", n1);
+        object.anArray = new int[]{3, 4, 5};
 
         final JsonValue structure = new 
MapperBuilder().setAttributeOrder(String.CASE_INSENSITIVE_ORDER).build().toStructure(object);
         assertEquals(JsonValue.ValueType.OBJECT, structure.getValueType());
         final JsonObject jsonObject = structure.asJsonObject();
-        
assertEquals("{\"data\":\"some\",\"names\":[\"first\",\"second\"],\"nestedMap\":{\"n1\":{\"number\":3}},"
 +
+        
assertEquals("{\"anArray\":[3,4,5],\"data\":\"some\",\"names\":[\"first\",\"second\"],\"nestedMap\":{\"n1\":{\"number\":3}},"
 +
                 
"\"nesteds\":[{\"number\":3}],\"polymorphic\":{\"a\":1,\"b\":\"2\"}}", 
jsonObject.toString());
     }
 
     @Test
+    public void mapToJsonArray() {
+        int[] anArray = new int[]{3, 4, 5};
+        final JsonValue structure = new 
MapperBuilder().build().toStructure(anArray);
+        assertEquals(JsonValue.ValueType.ARRAY, structure.getValueType());
+        final JsonArray jsonArray = structure.asJsonArray();
+        assertEquals("[3,4,5]", jsonArray.toString());
+    }
+
+    @Test
+    public void mapToJsonList() {
+        List<Integer> anList = asList(3,4,5);
+        final JsonValue structure = new 
MapperBuilder().build().toStructure(anList);
+        assertEquals(JsonValue.ValueType.ARRAY, structure.getValueType());
+        final JsonArray jsonArray = structure.asJsonArray();
+        assertEquals("[3,4,5]", jsonArray.toString());
+    }
+
+    @Test
     public void ignoreAllStrategy() {
         final StringWriter writer = new StringWriter();
         final Child object = new Child();
diff --git 
a/johnzon-mapper/src/test/java/org/superbiz/MultiStructureObject.java 
b/johnzon-mapper/src/test/java/org/superbiz/MultiStructureObject.java
index 3207c43..0aa04f3 100644
--- a/johnzon-mapper/src/test/java/org/superbiz/MultiStructureObject.java
+++ b/johnzon-mapper/src/test/java/org/superbiz/MultiStructureObject.java
@@ -27,6 +27,7 @@ public class MultiStructureObject {
     public Collection<Nested> nesteds;
     public Map<String, Nested> nestedMap;
     public Collection<String> names;
+    public int[] anArray;
 
     public static class Nested {
         public int number;

Reply via email to