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() {

Reply via email to