From 38b899d8b8348bf2853f15cc97a46c772be9533f Mon Sep 17 00:00:00 2001 From: Phil Kedy Date: Fri, 22 Jan 2021 18:49:51 -0500 Subject: [PATCH] Add java.lang.reflect.Type to TypeRef per #331 (#449) * Add support deserialization of generic types per #293 * Improving test coverage --- sdk/src/main/java/io/dapr/utils/TypeRef.java | 21 +++++++++++++++--- .../DefaultObjectSerializerTest.java | 22 +++++++++++++++++++ 2 files changed, 40 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 a3f9c32fc..aeb24b8e2 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 abstract class 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,19 @@ public abstract class TypeRef { 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 78a4ea049..7cdd9ecc6 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 org.junit.Test; 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 class DefaultObjectSerializerTest { } 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 @@ -425,6 +437,16 @@ public class DefaultObjectSerializerTest { } 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