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;
+ }
}
}
}