diff options
4 files changed, 109 insertions, 113 deletions
@@ -86,18 +86,6 @@ <version>1.0.0</version> <scope>test</scope> </dependency> - <dependency> - <groupId>commons-io</groupId> - <artifactId>commons-io</artifactId> - <version>2.4</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.assertj</groupId> - <artifactId>assertj-core</artifactId> - <version>3.11.1</version> - <scope>test</scope> - </dependency> </dependencies> <!-- Alas, need to include snapshot reference since otherwise can not find diff --git a/src/test/java/com/fasterxml/jackson/databind/deser/GenericContent.java b/src/test/java/com/fasterxml/jackson/databind/deser/GenericContent.java deleted file mode 100644 index 3ff649723..000000000 --- a/src/test/java/com/fasterxml/jackson/databind/deser/GenericContent.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.fasterxml.jackson.databind.deser; - -import java.util.Collection; - -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonTypeInfo; -import com.fasterxml.jackson.annotation.JsonInclude.Include; - -@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "_class") -@JsonInclude(Include.NON_EMPTY) -public class GenericContent { - - private Collection innerObjects; - - public Collection getInnerObjects() { - return innerObjects; - } - - public void setInnerObjects(Collection innerObjects) { - this.innerObjects = innerObjects; - } - -}
\ No newline at end of file diff --git a/src/test/java/com/fasterxml/jackson/databind/deser/HandleUnknowTypeIdTest.java b/src/test/java/com/fasterxml/jackson/databind/deser/HandleUnknowTypeIdTest.java deleted file mode 100644 index 5e97e58dc..000000000 --- a/src/test/java/com/fasterxml/jackson/databind/deser/HandleUnknowTypeIdTest.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.fasterxml.jackson.databind.deser; - -import java.io.IOException; -import java.nio.charset.StandardCharsets; - -import org.apache.commons.io.IOUtils; -import org.assertj.core.api.Assertions; -import org.junit.Before; -import org.junit.Test; - -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.JavaType; -import com.fasterxml.jackson.databind.JsonMappingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.jsontype.TypeIdResolver; - -public class HandleUnknowTypeIdTest { - - public static class DummyContent { - private String aField; - - public DummyContent() { - super(); - } - - public DummyContent(String aField) { - super(); - this.aField = aField; - } - - public String getaField() { - return aField; - } - - public void setaField(String aField) { - this.aField = aField; - } - - @Override - public String toString() { - return "DummyContent [aField=" + aField + "]"; - } - } - - private ObjectMapper objectMapper; - - @Before - public void setUp() { - objectMapper = new ObjectMapper(); - objectMapper.enableDefaultTyping(); - } - - @Test - public void testDeserializationWithDeserializationProblemHandler() throws JsonParseException, JsonMappingException, IOException { - String dummyJson = IOUtils.toString(HandleUnknowTypeIdTest.class.getResourceAsStream("/com/fasterxml/jackson/databind/deser/DummyProcessableContent.json"), - StandardCharsets.UTF_8); - objectMapper.addHandler(new DeserializationProblemHandler() { - @Override - public JavaType handleUnknownTypeId(DeserializationContext ctxt, JavaType baseType, String subTypeId, TypeIdResolver idResolver, String failureMsg) throws IOException { - System.out.println("Print out a warning here"); - return ctxt.constructType(Void.class); - } - }); - GenericContent processableContent = objectMapper.readValue(dummyJson, GenericContent.class); - Assertions.assertThat(processableContent.getInnerObjects()).hasSize(2).usingFieldByFieldElementComparator().contains(new DummyContent("some value")); - } - - @Test - public void testDeserializationWithFAIL_ON_INVALID_SUBTYPE_false() throws JsonParseException, JsonMappingException, IOException { - String dummyJson = IOUtils.toString(HandleUnknowTypeIdTest.class.getResourceAsStream("/com/fasterxml/jackson/databind/deser/DummyProcessableContent.json"), - StandardCharsets.UTF_8); - objectMapper.disable(DeserializationFeature.FAIL_ON_INVALID_SUBTYPE); - GenericContent processableContent = objectMapper.readValue(dummyJson, GenericContent.class); - Assertions.assertThat(processableContent.getInnerObjects()).hasSize(2).usingFieldByFieldElementComparator().contains(new DummyContent("some value")); - } -} diff --git a/src/test/java/com/fasterxml/jackson/databind/deser/filter/ProblemHandlerUnknownTypeId2221Test.java b/src/test/java/com/fasterxml/jackson/databind/deser/filter/ProblemHandlerUnknownTypeId2221Test.java new file mode 100644 index 000000000..7cd1b4af0 --- /dev/null +++ b/src/test/java/com/fasterxml/jackson/databind/deser/filter/ProblemHandlerUnknownTypeId2221Test.java @@ -0,0 +1,109 @@ +package com.fasterxml.jackson.databind.deser.filter; + +import java.io.*; +import java.util.Collection; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonInclude.Include; + +import com.fasterxml.jackson.databind.*; +import com.fasterxml.jackson.databind.deser.DeserializationProblemHandler; +import com.fasterxml.jackson.databind.jsontype.TypeIdResolver; + +// for [databind#2221] +public class ProblemHandlerUnknownTypeId2221Test extends BaseMapTest +{ + @SuppressWarnings("rawtypes") + @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "_class") + @JsonInclude(Include.NON_EMPTY) + static class GenericContent { + + private Collection innerObjects; + + public Collection getInnerObjects() { + return innerObjects; + } + + public void setInnerObjects(Collection innerObjects) { + this.innerObjects = innerObjects; + } + } + + static class DummyContent { + private String aField; + + public DummyContent() { + super(); + } + + public DummyContent(String aField) { + super(); + this.aField = aField; + } + + public String getaField() { + return aField; + } + + public void setaField(String aField) { + this.aField = aField; + } + + @Override + public String toString() { + return "DummyContent [aField=" + aField + "]"; + } + } + + private final static String CLASS_GENERIC_CONTENT = GenericContent.class.getName(); + private final static String CLASS_DUMMY_CONTENT = DummyContent.class.getName(); + private final static String JSON = aposToQuotes( +"{\n" + +" \"_class\":\""+CLASS_GENERIC_CONTENT+"\",\n" + +" \"innerObjects\":\n" + +" [\n" + +" \"java.util.ArrayList\",\n" + +" [\n" + +" [\n" + +" \""+CLASS_DUMMY_CONTENT+"\",\n" + +" {\n" + +" \"aField\":\"some value\"\n" + +" }\n" + +" ],\n" + +" [\n" + +" \"com.fasterxml.jackson.databind.deser.NoSuchClass$AnInventedClassBeingNotOnTheClasspath\",\n" + +" {\n" + +" \"aField\":\"some value\"\n" + +" }\n" + +" ]\n" + +" ]\n" + +" ]\n" + +" }" +); + + public void testWithDeserializationProblemHandler() throws Exception { + final ObjectMapper mapper = new ObjectMapper() + .enableDefaultTyping(); + mapper.addHandler(new DeserializationProblemHandler() { + @Override + public JavaType handleUnknownTypeId(DeserializationContext ctxt, JavaType baseType, String subTypeId, TypeIdResolver idResolver, String failureMsg) throws IOException { +// System.out.println("Print out a warning here"); + return ctxt.constructType(Void.class); + } + }); + GenericContent processableContent = mapper.readValue(JSON, GenericContent.class); + assertNotNull(processableContent.getInnerObjects()); + assertEquals(2, processableContent.getInnerObjects().size()); + } + + public void testWithDisabledFAIL_ON_INVALID_SUBTYPE() throws Exception { + final ObjectMapper mapper = new ObjectMapper() + .disable(DeserializationFeature.FAIL_ON_INVALID_SUBTYPE) + .enableDefaultTyping() + ; + GenericContent processableContent = mapper.readValue(JSON, GenericContent.class); + assertNotNull(processableContent.getInnerObjects()); + assertEquals(2, processableContent.getInnerObjects().size()); + } +} |