From 08d8debf52be3019c98fa5cc914fae4063a03bdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9F=D0=B5=D0=BD=D0=B4=D0=B0=D0=BB=D1=8C=D1=84=20=D0=A1?= =?UTF-8?q?=D0=B8=D0=BD=D0=B8=D0=B9?= Date: Sun, 8 Dec 2019 12:55:58 +0300 Subject: [PATCH] Fix IllegalArgumentException on empty input collection for ArrayBlockingQueue concrete class --- .../std/ArrayBlockingQueueDeserializer.java | 1 + .../TestEmptyArrayBlockingQueueDeser.java | 39 +++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 src/test/java/com/fasterxml/jackson/databind/deser/TestEmptyArrayBlockingQueueDeser.java diff --git a/src/main/java/com/fasterxml/jackson/databind/deser/std/ArrayBlockingQueueDeserializer.java b/src/main/java/com/fasterxml/jackson/databind/deser/std/ArrayBlockingQueueDeserializer.java index b526b6138f..c8672ebeb1 100644 --- a/src/main/java/com/fasterxml/jackson/databind/deser/std/ArrayBlockingQueueDeserializer.java +++ b/src/main/java/com/fasterxml/jackson/databind/deser/std/ArrayBlockingQueueDeserializer.java @@ -95,6 +95,7 @@ public Collection deserialize(JsonParser p, DeserializationContext ctxt, return handleNonArray(p, ctxt, new ArrayBlockingQueue(1)); } result0 = super.deserialize(p, ctxt, new ArrayList()); + if (result0.isEmpty()) return new ArrayBlockingQueue(1, false); return new ArrayBlockingQueue(result0.size(), false, result0); } diff --git a/src/test/java/com/fasterxml/jackson/databind/deser/TestEmptyArrayBlockingQueueDeser.java b/src/test/java/com/fasterxml/jackson/databind/deser/TestEmptyArrayBlockingQueueDeser.java new file mode 100644 index 0000000000..e1fe82567f --- /dev/null +++ b/src/test/java/com/fasterxml/jackson/databind/deser/TestEmptyArrayBlockingQueueDeser.java @@ -0,0 +1,39 @@ +package com.fasterxml.jackson.databind.deser; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.Assert; +import org.junit.Test; + +import java.io.IOException; +import java.util.Collection; +import java.util.concurrent.ArrayBlockingQueue; + +public class TestEmptyArrayBlockingQueueDeser { + + @Test + public void emptyCollectionDeser() throws JsonProcessingException, IOException { + ObjectMapper om = new ObjectMapper(); + String json = om.writeValueAsString(new RemoteEntity()); + Entity entity = om.readValue(json, Entity.class); + Assert.assertEquals(0, entity.values.size()); + } + + + + private static class RemoteEntity{ + private Collection values = new ArrayBlockingQueue<>(20); + + public Collection getValues() { + return values; + } + } + + private static class Entity{ + private ArrayBlockingQueue values; + + public Collection getValues() { + return values; + } + } +}