diff --git a/release-notes/CREDITS-2.x b/release-notes/CREDITS-2.x index 3d50e73600..eea9aa54a0 100644 --- a/release-notes/CREDITS-2.x +++ b/release-notes/CREDITS-2.x @@ -653,6 +653,10 @@ Guixiong Wu (吴桂雄) * Reported #2032: Blacklist another serialization gadget (ibatis) (2.8.11.2) +svarzee@github + * Reported #2109, suggested fix: Canonical string for reference type is built incorrectly + (2.8.11.3 / 2.9.7) + Connor Kuhn (ckuhn@github) * Contributed #1341: FAIL_ON_MISSING_EXTERNAL_TYPE_ID_PROPERTY (2.9.0) diff --git a/release-notes/VERSION-2.x b/release-notes/VERSION-2.x index 0b483c997f..32c2069a2c 100644 --- a/release-notes/VERSION-2.x +++ b/release-notes/VERSION-2.x @@ -10,6 +10,8 @@ Project: jackson-databind of type `UnwrappingBeanSerializer` (reported by Petar T) #2082: `FactoryBasedEnumDeserializer` should be cachable +#2109: Canonical string for reference type is built incorrectly + (reported by svarzee@github) 2.9.6 (12-Jun-2018) diff --git a/src/main/java/com/fasterxml/jackson/databind/type/ReferenceType.java b/src/main/java/com/fasterxml/jackson/databind/type/ReferenceType.java index 94aebb83e2..f9ac7a381d 100644 --- a/src/main/java/com/fasterxml/jackson/databind/type/ReferenceType.java +++ b/src/main/java/com/fasterxml/jackson/databind/type/ReferenceType.java @@ -166,6 +166,7 @@ protected String buildCanonicalName() sb.append(_class.getName()); sb.append('<'); sb.append(_referencedType.toCanonical()); + sb.append('>'); return sb.toString(); } diff --git a/src/test/java/com/fasterxml/jackson/databind/type/TestTypeFactory.java b/src/test/java/com/fasterxml/jackson/databind/type/TestTypeFactory.java index d1256b88f0..60bcee8dd0 100644 --- a/src/test/java/com/fasterxml/jackson/databind/type/TestTypeFactory.java +++ b/src/test/java/com/fasterxml/jackson/databind/type/TestTypeFactory.java @@ -232,8 +232,14 @@ public void testCanonicalNames() can); assertEquals(t, tf.constructFromCanonical(can)); - // [databind#1941]: allow "raw" types too + // [databind#2109]: also ReferenceTypes + t = tf.constructType(new TypeReference>() { }); + can = t.toCanonical(); + assertEquals("java.util.concurrent.atomic.AtomicReference", + can); + assertEquals(t, tf.constructFromCanonical(can)); + // [databind#1941]: allow "raw" types too t = tf.constructFromCanonical("java.util.List"); assertEquals(List.class, t.getRawClass()); assertEquals(CollectionType.class, t.getClass());