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 17593519c58eb07c4a7d8bc2a07d09ba11a51c00 Author: Romain Manni-Bucau <rmannibu...@gmail.com> AuthorDate: Tue Sep 21 10:58:09 2021 +0200 JOHNZON-351 support collection raw classes cast to Type in JSON-B --- .../main/java/org/apache/johnzon/jsonb/JohnzonJsonb.java | 9 ++++++++- .../test/java/org/apache/johnzon/jsonb/JsonbReadTest.java | 13 +++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JohnzonJsonb.java b/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JohnzonJsonb.java index 1d6f1b1..bd9e9bc 100644 --- a/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JohnzonJsonb.java +++ b/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JohnzonJsonb.java @@ -136,7 +136,7 @@ public class JohnzonJsonb implements Jsonb, AutoCloseable, JsonbExtension { } else if (JsonArray.class == runtimeType) { return (T) delegate.readJsonArray(new StringReader(str)); } else if (isCollection(runtimeType)) { - return (T) delegate.readCollection(new StringReader(str), ParameterizedType.class.cast(runtimeType)); + return (T) delegate.readCollection(new StringReader(str), toCollectionType(runtimeType)); } final Type mappingType = unwrapPrimitiveOptional(runtimeType); final Object object = delegate.readObject(str, mappingType); @@ -613,4 +613,11 @@ public class JohnzonJsonb implements Jsonb, AutoCloseable, JsonbExtension { Class.class.isInstance(pt.getActualTypeArguments()[0]) && JsonValue.class.isAssignableFrom(Class.class.cast(pt.getActualTypeArguments()[0]))); } + + private ParameterizedType toCollectionType(final Type runtimeType) { + if (ParameterizedType.class.isInstance(runtimeType)) { + return ParameterizedType.class.cast(runtimeType); + } + return new JohnzonParameterizedType(runtimeType, Object.class); + } } diff --git a/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/JsonbReadTest.java b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/JsonbReadTest.java index bd63127..3ac7a48 100644 --- a/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/JsonbReadTest.java +++ b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/JsonbReadTest.java @@ -20,6 +20,8 @@ package org.apache.johnzon.jsonb; import org.junit.Test; +import javax.json.bind.Jsonb; +import javax.json.bind.JsonbBuilder; import javax.json.bind.JsonbConfig; import javax.json.bind.JsonbException; import javax.json.bind.annotation.JsonbDateFormat; @@ -29,15 +31,26 @@ import javax.json.bind.spi.JsonbProvider; import java.io.ByteArrayInputStream; import java.io.StringReader; +import java.lang.reflect.Type; import java.nio.charset.StandardCharsets; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.Base64; +import java.util.List; +import static java.util.Arrays.asList; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; public class JsonbReadTest { + @Test + public void simpleArrayMapping() throws Exception { + final List<String> expectedResult = asList("Test String"); + try (final Jsonb jsonb = JsonbBuilder.create()) { + final Object unmarshalledObject = jsonb.fromJson("[ \"Test String\" ]", (Type) List.class); + assertEquals(expectedResult, unmarshalledObject); + } + } @Test public void boolFromString() {