Fix #1872
diff --git a/pom.xml b/pom.xml
index 4643347..f3b975f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -10,7 +10,7 @@
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
- <version>2.8.12-SNAPSHOT</version>
+ <version>2.8.11.1-SNAPSHOT</version>
<name>jackson-databind</name>
<packaging>bundle</packaging>
<description>General data-binding functionality for Jackson: works on core streaming API</description>
diff --git a/release-notes/VERSION b/release-notes/VERSION
index caf4073..b0becca 100644
--- a/release-notes/VERSION
+++ b/release-notes/VERSION
@@ -3,6 +3,12 @@
=== Releases ===
------------------------------------------------------------------------
+2.8.11.1 (not yet released)
+
+#1872 `NullPointerException` in `SubTypeValidator.validateSubType` when
+ validating Spring interface
+ (reported by Rob W)
+
2.8.11 (24-Dec-2017)
#1604: Nested type arguments doesn't work with polymorphic types
diff --git a/src/main/java/com/fasterxml/jackson/databind/deser/BeanDeserializerFactory.java b/src/main/java/com/fasterxml/jackson/databind/deser/BeanDeserializerFactory.java
index 4f07948..d93745c 100644
--- a/src/main/java/com/fasterxml/jackson/databind/deser/BeanDeserializerFactory.java
+++ b/src/main/java/com/fasterxml/jackson/databind/deser/BeanDeserializerFactory.java
@@ -13,7 +13,6 @@
import com.fasterxml.jackson.databind.introspect.*;
import com.fasterxml.jackson.databind.jsontype.TypeDeserializer;
import com.fasterxml.jackson.databind.jsontype.impl.SubTypeValidator;
-import com.fasterxml.jackson.databind.util.ArrayBuilders;
import com.fasterxml.jackson.databind.util.ClassUtil;
import com.fasterxml.jackson.databind.util.SimpleBeanPropertyDefinition;
diff --git a/src/main/java/com/fasterxml/jackson/databind/jsontype/impl/SubTypeValidator.java b/src/main/java/com/fasterxml/jackson/databind/jsontype/impl/SubTypeValidator.java
index 45a7616..42273e0 100644
--- a/src/main/java/com/fasterxml/jackson/databind/jsontype/impl/SubTypeValidator.java
+++ b/src/main/java/com/fasterxml/jackson/databind/jsontype/impl/SubTypeValidator.java
@@ -79,8 +79,9 @@
// 18-Dec-2017, tatu: As per [databind#1855], need bit more sophisticated handling
// for some Spring framework types
- if (full.startsWith(PREFIX_STRING)) {
- for (Class<?> cls = raw; cls != Object.class; cls = cls.getSuperclass()) {
+ // 05-Jan-2017, tatu: ... also, only applies to classes, not interfaces
+ if (!raw.isInterface() && full.startsWith(PREFIX_STRING)) {
+ for (Class<?> cls = raw; (cls != null) && (cls != Object.class); cls = cls.getSuperclass()) {
String name = cls.getSimpleName();
// looking for "AbstractBeanFactoryPointcutAdvisor" but no point to allow any is there?
if ("AbstractPointcutAdvisor".equals(name)
diff --git a/src/test/java/com/fasterxml/jackson/databind/interop/IllegalTypesCheckTest.java b/src/test/java/com/fasterxml/jackson/databind/interop/IllegalTypesCheckTest.java
index 8670e6a..6ed6540 100644
--- a/src/test/java/com/fasterxml/jackson/databind/interop/IllegalTypesCheckTest.java
+++ b/src/test/java/com/fasterxml/jackson/databind/interop/IllegalTypesCheckTest.java
@@ -1,7 +1,10 @@
package com.fasterxml.jackson.databind.interop;
+import java.util.*;
+
import org.springframework.jacksontest.BogusApplicationContext;
import org.springframework.jacksontest.BogusPointcutAdvisor;
+import org.springframework.jacksontest.GrantedAuthority;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.databind.*;
@@ -22,7 +25,11 @@
include = JsonTypeInfo.As.WRAPPER_ARRAY)
public Object v;
}
-
+
+ static class Authentication1872 {
+ public List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
+ }
+
/*
/**********************************************************
/* Unit tests
@@ -94,6 +101,18 @@
}
*/
+ // // // Tests for [databind#1872]
+ public void testJDKTypes1872() throws Exception
+ {
+ ObjectMapper mapper = new ObjectMapper();
+ mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
+
+ String json = aposToQuotes(String.format("{'@class':'%s','authorities':['java.util.ArrayList',[]]}",
+ Authentication1872.class.getName()));
+ Authentication1872 result = mapper.readValue(json, Authentication1872.class);
+ assertNotNull(result);
+ }
+
private void _testIllegalType(Class<?> nasty) throws Exception {
_testIllegalType(nasty.getName());
}
diff --git a/src/test/java/org/springframework/jacksontest/GrantedAuthority.java b/src/test/java/org/springframework/jacksontest/GrantedAuthority.java
new file mode 100644
index 0000000..ea9fc9a
--- /dev/null
+++ b/src/test/java/org/springframework/jacksontest/GrantedAuthority.java
@@ -0,0 +1,5 @@
+package org.springframework.jacksontest;
+
+public interface GrantedAuthority {
+
+}