package com.fasterxml.jackson.databind.deser; import java.util.*; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonValue; import com.fasterxml.jackson.databind.*; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; @SuppressWarnings("serial") public class TestGenericCollectionDeser extends BaseMapTest { static class ListSubClass extends ArrayList { } /** * Map class that should behave like {@link ListSubClass}, but by * using annotations. */ @JsonDeserialize(contentAs=StringWrapper.class) static class AnnotatedStringList extends ArrayList { } @JsonDeserialize(contentAs=BooleanElement.class) static class AnnotatedBooleanList extends ArrayList { } protected static class BooleanElement { public Boolean b; @JsonCreator public BooleanElement(Boolean value) { b = value; } @JsonValue public Boolean value() { return b; } } /* /********************************************************** /* Tests for sub-classing /********************************************************** */ /** * Verifying that sub-classing works ok wrt generics information */ public void testListSubClass() throws Exception { ObjectMapper mapper = new ObjectMapper(); ListSubClass result = mapper.readValue("[ \"123\" ]", ListSubClass.class); assertEquals(1, result.size()); Object value = result.get(0); assertEquals(StringWrapper.class, value.getClass()); StringWrapper bw = (StringWrapper) value; assertEquals("123", bw.str); } /* /********************************************************** /* Tests for annotations /********************************************************** */ // Verifying that sub-classing works ok wrt generics information public void testAnnotatedLStringist() throws Exception { ObjectMapper mapper = new ObjectMapper(); AnnotatedStringList result = mapper.readValue("[ \"...\" ]", AnnotatedStringList.class); assertEquals(1, result.size()); Object ob = result.get(0); assertEquals(StringWrapper.class, ob.getClass()); assertEquals("...", ((StringWrapper) ob).str); } public void testAnnotatedBooleanList() throws Exception { ObjectMapper mapper = new ObjectMapper(); AnnotatedBooleanList result = mapper.readValue("[ false ]", AnnotatedBooleanList.class); assertEquals(1, result.size()); Object ob = result.get(0); assertEquals(BooleanElement.class, ob.getClass()); assertFalse(((BooleanElement) ob).b); } }