From 31968ad1bc462ac60f961750a35e260d336b389d Mon Sep 17 00:00:00 2001 From: Phil Kedy Date: Fri, 22 Jan 2021 17:39:39 -0500 Subject: [PATCH 1/2] Add support deserialization of generic types per #293 --- sdk/src/main/java/io/dapr/utils/TypeRef.java | 20 ++++++++++++++++--- .../DefaultObjectSerializerTest.java | 12 +++++++++++ 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/sdk/src/main/java/io/dapr/utils/TypeRef.java b/sdk/src/main/java/io/dapr/utils/TypeRef.java index a3f9c32fc5..5a7c94000e 100644 --- a/sdk/src/main/java/io/dapr/utils/TypeRef.java +++ b/sdk/src/main/java/io/dapr/utils/TypeRef.java @@ -57,10 +57,10 @@ public TypeRef() { /** * Constructor for reflection. * - * @param clazz Class type to be referenced. + * @param type Type to be referenced. */ - private TypeRef(Class clazz) { - this.type = clazz; + private TypeRef(Type type) { + this.type = type; } /** @@ -118,4 +118,18 @@ public static TypeRef get(Class clazz) { return new TypeRef(clazz) {}; } + + /** + * Creates a reference to a given class type. + * @param type Type to be referenced. + * @param Type to be referenced. + * @return Class type reference. + */ + public static TypeRef get(Type type) { + if (type instanceof Class) { + Class clazz = (Class) type; + return get(clazz); + } + return new TypeRef(type) {}; + } } diff --git a/sdk/src/test/java/io/dapr/serializer/DefaultObjectSerializerTest.java b/sdk/src/test/java/io/dapr/serializer/DefaultObjectSerializerTest.java index 78a4ea049c..518b8f3324 100644 --- a/sdk/src/test/java/io/dapr/serializer/DefaultObjectSerializerTest.java +++ b/sdk/src/test/java/io/dapr/serializer/DefaultObjectSerializerTest.java @@ -12,6 +12,7 @@ import java.io.IOException; import java.io.Serializable; +import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Base64; import java.util.List; @@ -234,6 +235,17 @@ public void serializeObjectTest() { } catch (IOException exception) { fail(exception.getMessage()); } + + try { + serializedValue = SERIALIZER.serialize(obj); + assertNotNull(serializedValue); + Type t = MyObjectTestToSerialize.class; + TypeRef tr = TypeRef.get(t); + MyObjectTestToSerialize deserializedValue = SERIALIZER.deserialize(serializedValue, tr); + assertEquals(obj, deserializedValue); + } catch (IOException exception) { + fail(exception.getMessage()); + } } @Test From 985cf6a215b46e5d4952e42c1182b54d3b0af3cf Mon Sep 17 00:00:00 2001 From: Phil Kedy Date: Fri, 22 Jan 2021 18:09:39 -0500 Subject: [PATCH 2/2] Improving test coverage --- sdk/src/main/java/io/dapr/utils/TypeRef.java | 1 + .../dapr/serializer/DefaultObjectSerializerTest.java | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/sdk/src/main/java/io/dapr/utils/TypeRef.java b/sdk/src/main/java/io/dapr/utils/TypeRef.java index 5a7c94000e..aeb24b8e2d 100644 --- a/sdk/src/main/java/io/dapr/utils/TypeRef.java +++ b/sdk/src/main/java/io/dapr/utils/TypeRef.java @@ -130,6 +130,7 @@ public static TypeRef get(Type type) { Class clazz = (Class) type; return get(clazz); } + return new TypeRef(type) {}; } } diff --git a/sdk/src/test/java/io/dapr/serializer/DefaultObjectSerializerTest.java b/sdk/src/test/java/io/dapr/serializer/DefaultObjectSerializerTest.java index 518b8f3324..7cdd9ecc6a 100644 --- a/sdk/src/test/java/io/dapr/serializer/DefaultObjectSerializerTest.java +++ b/sdk/src/test/java/io/dapr/serializer/DefaultObjectSerializerTest.java @@ -437,6 +437,16 @@ public void deserializeArrayObjectTest() { } catch (IOException exception) { fail(exception.getMessage()); } + + try { + TypeRef> tr1 = new TypeRef>(){}; + Type t = tr1.getType(); + TypeRef tr = TypeRef.get(t); + result = (List) SERIALIZER.deserialize(jsonToDeserialize.getBytes(), tr); + assertEquals("The expected value is different than the actual result", expectedResult, result.get(0)); + } catch (IOException exception) { + fail(exception.getMessage()); + } } @Test