[JOHNZON-331] handle toJson(object,type) properly for list case
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 9850262..1d6f1b1 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
@@ -44,11 +44,14 @@
import java.lang.reflect.Type;
import java.math.BigInteger;
import java.util.Collection;
+import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.OptionalDouble;
import java.util.OptionalInt;
import java.util.OptionalLong;
+import java.util.Set;
+import java.util.SortedSet;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Consumer;
import java.util.function.Supplier;
@@ -449,7 +452,8 @@
private boolean isCollection(final Type runtimeType) {
if (!ParameterizedType.class.isInstance(runtimeType)) {
- return false;
+ return runtimeType == List.class || runtimeType == Set.class ||
+ runtimeType == SortedSet.class || runtimeType == Collection.class;
}
final Type rawType = ParameterizedType.class.cast(runtimeType).getRawType();
return Class.class.isInstance(rawType) && Collection.class.isAssignableFrom(Class.class.cast(rawType));
diff --git a/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/JsonbWriteTest.java b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/JsonbWriteTest.java
index cec22a1..95541ee 100644
--- a/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/JsonbWriteTest.java
+++ b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/JsonbWriteTest.java
@@ -21,22 +21,45 @@
import org.junit.Test;
import javax.json.bind.Jsonb;
+import javax.json.bind.JsonbBuilder;
import javax.json.bind.annotation.JsonbDateFormat;
import javax.json.bind.annotation.JsonbProperty;
import javax.json.bind.spi.JsonbProvider;
-
import java.io.ByteArrayOutputStream;
import java.io.StringWriter;
import java.time.LocalDateTime;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
+import java.util.TreeMap;
import static java.util.Arrays.asList;
import static org.junit.Assert.assertEquals;
public class JsonbWriteTest {
@Test
+ public void mapOfSimple() throws Exception {
+ final Map<String, Simple> list = new TreeMap<>();
+ list.put("1", new Simple());
+ list.put("2", new Simple());
+ try (final Jsonb jsonb = JsonbBuilder.create()){
+ assertEquals("{\"1\":{},\"2\":{}}", jsonb.toJson(list, Map.class));
+ }
+ }
+
+ @Test
+ public void listOfSimple() throws Exception {
+ final List<Simple> list = new ArrayList<>();
+ list.add(new Simple());
+ list.add(new Simple());
+ try (final Jsonb jsonb = JsonbBuilder.create()){
+ assertEquals("[{},{}]", jsonb.toJson(list, List.class));
+ }
+ }
+
+ @Test
public void boolAsString() {
assertEquals("true", JsonbProvider.provider().create().build().toJson(Boolean.TRUE));
}