You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@johnzon.apache.org by st...@apache.org on 2018/08/29 15:34:43 UTC

[1/2] johnzon git commit: JOHNZON-169 add unit test for @JsonbTypeDeserializer on list

Repository: johnzon
Updated Branches:
  refs/heads/master 4e8b6524a -> 2845dd882


JOHNZON-169 add unit test for @JsonbTypeDeserializer on list


Project: http://git-wip-us.apache.org/repos/asf/johnzon/repo
Commit: http://git-wip-us.apache.org/repos/asf/johnzon/commit/29af5fb2
Tree: http://git-wip-us.apache.org/repos/asf/johnzon/tree/29af5fb2
Diff: http://git-wip-us.apache.org/repos/asf/johnzon/diff/29af5fb2

Branch: refs/heads/master
Commit: 29af5fb25f3bb2be6685b009df751e86152f62a1
Parents: 4e8b652
Author: Mark Struberg <st...@apache.org>
Authored: Wed Aug 29 15:24:03 2018 +0200
Committer: Mark Struberg <st...@apache.org>
Committed: Wed Aug 29 15:24:03 2018 +0200

----------------------------------------------------------------------
 .../apache/johnzon/jsonb/SerializerTest.java    | 66 +++++++++++++++++++-
 1 file changed, 65 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/johnzon/blob/29af5fb2/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/SerializerTest.java
----------------------------------------------------------------------
diff --git a/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/SerializerTest.java b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/SerializerTest.java
index a6771ef..bf704e9 100644
--- a/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/SerializerTest.java
+++ b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/SerializerTest.java
@@ -35,10 +35,11 @@ import java.util.ArrayList;
 import java.util.List;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
-// TODO: enhance
 public class SerializerTest {
+
     @Test
     public void roundTrip() {
         final Jsonb jsonb = JsonbBuilder.create();
@@ -120,4 +121,67 @@ public class SerializerTest {
             generator.write("name", obj.name);
         }
     }
+
+    /**
+     * see JOHNZON-169
+     */
+    @Test
+    public void testArrayParseWithDeserializer() {
+        String json = "{\"student\":[{\"val\":\"max,24\"}]}";
+        Jsonb jsonb = JsonbBuilder.create();
+
+        StudentHolder studentHolder = jsonb.fromJson(json, StudentHolder.class);
+        assertNotNull(studentHolder);
+        assertNotNull(studentHolder.getStudent());
+        assertEquals(1, studentHolder.getStudent().size());
+        assertEquals("max", studentHolder.getStudent().get(0).getName());
+        assertEquals(24, studentHolder.getStudent().get(0).getAge());
+    }
+
+    public static class Student {
+        private String name;
+        private int age;
+
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public int getAge() {
+            return age;
+        }
+
+        public void setAge(int age) {
+            this.age = age;
+        }
+    }
+
+    public static class StudentDeserializer implements JsonbDeserializer<Student> {
+        @Override
+        public Student deserialize(JsonParser parser, DeserializationContext ctx, Type rtType) {
+            String val = parser.getObject().getString("val");
+            String[] parts = val.split(",");
+            Student s = new Student();
+            s.setName(parts[0]);
+            s.setAge(Integer.parseInt(parts[1]));
+
+            return s;
+        }
+    }
+
+    public static class StudentHolder {
+        @JsonbTypeDeserializer(StudentDeserializer.class)
+        private List<Student> student;
+
+        public List<Student> getStudent() {
+            return student;
+        }
+
+        public void setStudent(List<Student> student) {
+            this.student = student;
+        }
+    }
 }


[2/2] johnzon git commit: JOHNZON-184 fix TypeAwareAdapter support for other types than String

Posted by st...@apache.org.
JOHNZON-184 fix TypeAwareAdapter support for other types than String


Project: http://git-wip-us.apache.org/repos/asf/johnzon/repo
Commit: http://git-wip-us.apache.org/repos/asf/johnzon/commit/2845dd88
Tree: http://git-wip-us.apache.org/repos/asf/johnzon/tree/2845dd88
Diff: http://git-wip-us.apache.org/repos/asf/johnzon/diff/2845dd88

Branch: refs/heads/master
Commit: 2845dd8825b7b7d4f5f594f05a2ccea202bdb652
Parents: 29af5fb
Author: Mark Struberg <st...@apache.org>
Authored: Wed Aug 29 17:33:32 2018 +0200
Committer: Mark Struberg <st...@apache.org>
Committed: Wed Aug 29 17:33:32 2018 +0200

----------------------------------------------------------------------
 .../org/apache/johnzon/jsonb/AdapterTest.java   | 43 ++++++++++++++++++++
 .../johnzon/mapper/MappingParserImpl.java       | 29 ++++++++-----
 2 files changed, 61 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/johnzon/blob/2845dd88/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/AdapterTest.java
----------------------------------------------------------------------
diff --git a/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/AdapterTest.java b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/AdapterTest.java
index 775442e..d6b8a05 100644
--- a/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/AdapterTest.java
+++ b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/AdapterTest.java
@@ -176,4 +176,47 @@ public class AdapterTest {
             return bar;
         }
     }
+
+    @Test
+    public void testAdapterOnEnum() {
+        Jsonb jsonb = JsonbBuilder.newBuilder().build();
+
+        DoorDTO door = new DoorDTO();
+        door.status = DoorStatus.OPEN;
+        String jsonS = jsonb.toJson(door);
+        assertEquals(
+                "The expected result must be a door with a status open as its enum ordinal",
+                "{\"status\":0}",
+                jsonS);
+
+        DoorDTO doorDTO = jsonb.fromJson(jsonS, DoorDTO.class);
+
+        assertEquals(
+                "The expected result must be a door with a status open as an enum value",
+                DoorStatus.OPEN,
+                doorDTO.status);
+    }
+
+    static class DoorDTO {
+        @JsonbTypeAdapter(StatusAdapter.class)
+        public DoorStatus status;
+    }
+
+    public enum DoorStatus {
+        OPEN, CLOSE
+    }
+
+    public static class StatusAdapter implements JsonbAdapter<DoorStatus, Integer> {
+
+        @Override
+        public Integer adaptToJson(DoorStatus obj) {
+            return obj.ordinal();
+        }
+
+        @Override
+        public DoorStatus adaptFromJson(Integer obj) {
+            return DoorStatus.values()[obj];
+        }
+
+    }
 }

http://git-wip-us.apache.org/repos/asf/johnzon/blob/2845dd88/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java
----------------------------------------------------------------------
diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java
index e2dc84d..a920324 100644
--- a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java
+++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java
@@ -442,17 +442,24 @@ public class MappingParserImpl implements MappingParser {
             }
         }
         if (adapterKey == null) {
-            final Type[] types = converter.getClass().getGenericInterfaces();
-            for (final Type t : types) {
-                if (!ParameterizedType.class.isInstance(t)) {
-                    continue;
-                }
-                final ParameterizedType pt = ParameterizedType.class.cast(t);
-                if (Adapter.class == pt.getRawType()) {
-                    final Type[] actualTypeArguments = pt.getActualTypeArguments();
-                    adapterKey = new AdapterKey(actualTypeArguments[0], actualTypeArguments[1]);
-                    reverseAdaptersRegistry.putIfAbsent(converter, adapterKey);
-                    break;
+            if (converter instanceof TypeAwareAdapter) {
+                TypeAwareAdapter typeAwareAdapter = (TypeAwareAdapter) converter;
+                adapterKey = new AdapterKey(typeAwareAdapter.getFrom(), typeAwareAdapter.getTo());
+                reverseAdaptersRegistry.putIfAbsent(converter, adapterKey);
+
+            } else {
+                final Type[] types = converter.getClass().getGenericInterfaces();
+                for (final Type t : types) {
+                    if (!ParameterizedType.class.isInstance(t)) {
+                        continue;
+                    }
+                    final ParameterizedType pt = ParameterizedType.class.cast(t);
+                    if (Adapter.class == pt.getRawType()) {
+                        final Type[] actualTypeArguments = pt.getActualTypeArguments();
+                        adapterKey = new AdapterKey(actualTypeArguments[0], actualTypeArguments[1]);
+                        reverseAdaptersRegistry.putIfAbsent(converter, adapterKey);
+                        break;
+                    }
                 }
             }
         }