Skip to content

Commit 3e998c7

Browse files
committed
Merge branch '2.11'
2 parents 03c7cb6 + 10cd291 commit 3e998c7

File tree

5 files changed

+49
-8
lines changed

5 files changed

+49
-8
lines changed

src/main/java/com/fasterxml/jackson/databind/deser/Deserializers.java

+28-6
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,9 @@ public JsonDeserializer<?> findMapLikeDeserializer(MapLikeType type,
234234
TypeDeserializer elementTypeDeserializer, JsonDeserializer<?> elementDeserializer)
235235
throws JsonMappingException;
236236

237+
// To be added in 3.0
238+
// public boolean hasDeserializerFor(Class<?> valueType);
239+
237240
/*
238241
/**********************************************************
239242
/* Helper classes
@@ -247,7 +250,8 @@ public JsonDeserializer<?> findMapLikeDeserializer(MapLikeType type,
247250
* of methods are not needed (especially enumeration and array deserializers are
248251
* very rarely overridden).
249252
*/
250-
public static class Base implements Deserializers
253+
public abstract static class Base
254+
implements Deserializers
251255
{
252256
@Override
253257
public JsonDeserializer<?> findEnumDeserializer(Class<?> type,
@@ -265,14 +269,13 @@ public JsonDeserializer<?> findTreeNodeDeserializer(Class<? extends JsonNode> no
265269
return null;
266270
}
267271

268-
@Override // since 2.7
272+
@Override
269273
public JsonDeserializer<?> findReferenceDeserializer(ReferenceType refType,
270274
DeserializationConfig config, BeanDescription beanDesc,
271275
TypeDeserializer contentTypeDeserializer, JsonDeserializer<?> contentDeserializer)
272-
throws JsonMappingException {
273-
// 21-Oct-2015, tatu: For backwards compatibility, let's delegate to "bean" variant,
274-
// for 2.7 -- remove work-around from 2.8 or later
275-
return findBeanDeserializer(refType, config, beanDesc);
276+
throws JsonMappingException
277+
{
278+
return null;
276279
}
277280

278281
@Override
@@ -329,5 +332,24 @@ public JsonDeserializer<?> findMapLikeDeserializer(MapLikeType type,
329332
{
330333
return null;
331334
}
335+
336+
/**
337+
* Method that may be called to check whether this deserializer provider would provide
338+
* deserializer for values of given type, without attempting to construct (and possibly
339+
* fail in some cases) actual deserializer. Mostly needed to support validation
340+
* of polymorphic type ids.
341+
*<p>
342+
* Note: implementations should take care NOT to claim supporting types that they do
343+
* not recognize as this could to incorrect assumption of safe support by caller.
344+
*<p>
345+
* Method added in this implementation since adding new methods for interfaces
346+
* before Java 8 is not a good idea: will be added in Jackson 3.0 for `Deserializers`.
347+
*
348+
* @since 2.11
349+
*/
350+
public boolean hasDeserializerFor(Class<?> valueType) {
351+
return false;
352+
}
353+
// public abstract boolean hasDeserializerFor(Class<?> valueType);
332354
}
333355
}

src/main/java/com/fasterxml/jackson/databind/ext/CoreXMLDeserializers.java

+8
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,14 @@ public static JsonDeserializer<?> findBeanDeserializer(DeserializationConfig con
4848
return null;
4949
}
5050

51+
@Override // since 2.11
52+
public boolean hasDeserializerFor(Class<?> valueType) {
53+
return (valueType == QName.class)
54+
|| (valueType == XMLGregorianCalendar.class)
55+
|| (valueType == Duration.class)
56+
;
57+
}
58+
5159
/*
5260
/**********************************************************************
5361
/* Concrete deserializers

src/main/java/com/fasterxml/jackson/databind/module/SimpleDeserializers.java

+9-2
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@
1818
* all mappings must be to exact declared deserialization type.
1919
*/
2020
public class SimpleDeserializers
21-
implements Deserializers, java.io.Serializable
21+
extends Deserializers.Base
22+
implements java.io.Serializable
2223
{
2324
private static final long serialVersionUID = 1L;
2425

@@ -72,7 +73,7 @@ public SimpleDeserializers addDeserializers(Map<Class<?>,JsonDeserializer<?>> de
7273
/* Serializers implementation
7374
/**********************************************************
7475
*/
75-
76+
7677
@Override
7778
public JsonDeserializer<?> findArrayDeserializer(ArrayType type,
7879
DeserializationConfig config, BeanDescription beanDesc,
@@ -174,6 +175,12 @@ public JsonDeserializer<?> findMapLikeDeserializer(MapLikeType type,
174175
return _find(type);
175176
}
176177

178+
@Override // since 2.11
179+
public boolean hasDeserializerFor(Class<?> valueType) {
180+
return (_classMappings != null)
181+
&& _classMappings.containsKey(new ClassKey(valueType));
182+
}
183+
177184
private final JsonDeserializer<?> _find(JavaType type) {
178185
if (_classMappings == null) {
179186
return null;

src/test/java/com/fasterxml/jackson/databind/deser/creators/EnumCreatorTest.java

+2
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,8 @@ public JsonDeserializer<?> findEnumDeserializer(final Class<?> type, final Deser
115115
}
116116
return null;
117117
}
118+
@Override
119+
public boolean hasDeserializerFor(Class<?> valueType) { return false; }
118120
}
119121

120122
// [databind#745]

src/test/java/com/fasterxml/jackson/databind/deser/creators/TestCreatorNullValue.java

+2
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ public JsonDeserializer<?> findBeanDeserializer(JavaType type,
4848
}
4949
return new ContainedDeserializer();
5050
}
51+
@Override
52+
public boolean hasDeserializerFor(Class<?> valueType) { return false; }
5153
}
5254

5355
protected static class TestModule extends com.fasterxml.jackson.databind.Module

0 commit comments

Comments
 (0)