You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@johnzon.apache.org by rm...@apache.org on 2019/04/01 11:54:14 UTC

[johnzon] branch master updated (0e77865 -> fde35c2)

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

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


    from 0e77865  JOHNZON-204 update to latest jsonp spec
     new 34ed330  JOHNZON-205: add support for arrays in toStructure
     new fde35c2  JOHNZON-205: add support for arrays in toStructure fixup

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../apache/johnzon/mapper/MappingGeneratorImpl.java |  6 ++++++
 .../java/org/apache/johnzon/mapper/MapperTest.java  | 21 ++++++++++++++++++++-
 .../java/org/superbiz/MultiStructureObject.java     |  1 +
 3 files changed, 27 insertions(+), 1 deletion(-)


[johnzon] 01/02: JOHNZON-205: add support for arrays in toStructure

Posted by rm...@apache.org.
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 <el...@apache.org>
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;


[johnzon] 02/02: JOHNZON-205: add support for arrays in toStructure fixup

Posted by rm...@apache.org.
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 fde35c273bc489a33e4e14447ed4f23d2e30c438
Author: Alexander Falb <el...@apache.org>
AuthorDate: Sun Mar 31 17:02:07 2019 +0200

    JOHNZON-205: add support for arrays in toStructure fixup
---
 .../java/org/apache/johnzon/mapper/Mapper.java     | 25 +++-------------------
 .../johnzon/mapper/MappingGeneratorImpl.java       |  6 ++++++
 2 files changed, 9 insertions(+), 22 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 cc5cdde..77b22b6 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,31 +146,12 @@ public class Mapper implements Closeable {
         if (BigInteger.class.isInstance(object)) {
             return provider.createValue(BigInteger.class.cast(object));
         }
-
         final JsonObjectGenerator objectGenerator = new JsonObjectGenerator(builderFactory);
-        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);
-        }
+        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/main/java/org/apache/johnzon/mapper/MappingGeneratorImpl.java b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingGeneratorImpl.java
index bb1d2f3..d35a580 100644
--- a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingGeneratorImpl.java
+++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingGeneratorImpl.java
@@ -94,6 +94,12 @@ public class MappingGeneratorImpl implements MappingGenerator {
                 return;
             }
 
+            if (objectClass.isArray()) {
+                final Adapter adapter = config.findAdapter(objectClass);
+                writeArray(objectClass, adapter, null, object, ignoredProperties, jsonPointer);
+                return;
+            }
+
             if (object instanceof Iterable) {
                 doWriteIterable((Iterable) object, ignoredProperties, jsonPointer);
                 return;