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; + } + } +}