Skip to content

Commit 3010de7

Browse files
committed
fix #2014
1 parent 0b8f29e commit 3010de7

10 files changed

+97
-124
lines changed

src/main/java/com/fasterxml/jackson/databind/DeserializationConfig.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
package com.fasterxml.jackson.databind;
22

33
import com.fasterxml.jackson.core.*;
4+
45
import com.fasterxml.jackson.databind.cfg.*;
56
import com.fasterxml.jackson.databind.deser.DeserializationProblemHandler;
67
import com.fasterxml.jackson.databind.introspect.*;
78
import com.fasterxml.jackson.databind.jsontype.*;
89
import com.fasterxml.jackson.databind.type.TypeFactory;
910
import com.fasterxml.jackson.databind.util.ArrayIterator;
10-
import com.fasterxml.jackson.databind.util.ClassUtil;
1111
import com.fasterxml.jackson.databind.util.LinkedNode;
1212
import com.fasterxml.jackson.databind.util.RootNameLookup;
1313

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
import com.fasterxml.jackson.databind.*;
1414
import com.fasterxml.jackson.databind.deser.impl.*;
15-
import com.fasterxml.jackson.databind.deser.std.StdDelegatingDeserializer;
15+
import com.fasterxml.jackson.databind.deser.std.StdConvertingDeserializer;
1616
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
1717
import com.fasterxml.jackson.databind.exc.IgnoredPropertyException;
1818
import com.fasterxml.jackson.databind.introspect.*;
@@ -647,7 +647,7 @@ protected JsonDeserializer<Object> _findConvertingDeserializer(DeserializationCo
647647
// 25-Mar-2017, tatu: should not yet contextualize
648648
// JsonDeserializer<?> deser = ctxt.findContextualValueDeserializer(delegateType, prop);
649649
JsonDeserializer<?> deser = ctxt.findNonContextualValueDeserializer(delegateType);
650-
return new StdDelegatingDeserializer<Object>(conv, delegateType, deser);
650+
return new StdConvertingDeserializer<Object>(conv, delegateType, deser);
651651
}
652652
}
653653
return null;

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
import com.fasterxml.jackson.databind.*;
88
import com.fasterxml.jackson.databind.cfg.MapperConfig;
9-
import com.fasterxml.jackson.databind.deser.std.StdDelegatingDeserializer;
9+
import com.fasterxml.jackson.databind.deser.std.StdConvertingDeserializer;
1010
import com.fasterxml.jackson.databind.introspect.Annotated;
1111
import com.fasterxml.jackson.databind.type.*;
1212
import com.fasterxml.jackson.databind.util.ClassUtil;
@@ -362,7 +362,7 @@ protected JsonDeserializer<Object> _createDeserializer(DeserializationContext ct
362362
if (!delegateType.hasRawClass(type.getRawClass())) {
363363
beanDesc = ctxt.introspect(delegateType);
364364
}
365-
return new StdDelegatingDeserializer<Object>(conv, delegateType,
365+
return new StdConvertingDeserializer<Object>(conv, delegateType,
366366
_createDeserializer2(ctxt, factory, delegateType, beanDesc));
367367
}
368368

@@ -452,7 +452,7 @@ protected JsonDeserializer<Object> findConvertingDeserializer(DeserializationCon
452452
return deser;
453453
}
454454
JavaType delegateType = conv.getInputType(ctxt.getTypeFactory());
455-
return (JsonDeserializer<Object>) new StdDelegatingDeserializer<Object>(conv, delegateType, deser);
455+
return (JsonDeserializer<Object>) new StdConvertingDeserializer<Object>(conv, delegateType, deser);
456456
}
457457

458458
protected Converter<Object,Object> findConverter(DeserializationContext ctxt,

src/main/java/com/fasterxml/jackson/databind/deser/impl/JavaUtilCollectionsDeserializers.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import com.fasterxml.jackson.databind.JavaType;
77
import com.fasterxml.jackson.databind.JsonDeserializer;
88
import com.fasterxml.jackson.databind.JsonMappingException;
9-
import com.fasterxml.jackson.databind.deser.std.StdDelegatingDeserializer;
9+
import com.fasterxml.jackson.databind.deser.std.StdConvertingDeserializer;
1010
import com.fasterxml.jackson.databind.type.TypeFactory;
1111
import com.fasterxml.jackson.databind.util.Converter;
1212

@@ -76,7 +76,7 @@ public static JsonDeserializer<?> findForCollection(DeserializationContext ctxt,
7676
} else {
7777
return null;
7878
}
79-
return new StdDelegatingDeserializer<Object>(conv);
79+
return new StdConvertingDeserializer<Object>(conv);
8080
}
8181

8282
public static JsonDeserializer<?> findForMap(DeserializationContext ctxt,
@@ -93,7 +93,7 @@ public static JsonDeserializer<?> findForMap(DeserializationContext ctxt,
9393
} else {
9494
return null;
9595
}
96-
return new StdDelegatingDeserializer<Object>(conv);
96+
return new StdConvertingDeserializer<Object>(conv);
9797
}
9898

9999
static JavaUtilCollectionsConverter converter(int kind,

src/main/java/com/fasterxml/jackson/databind/deser/std/DelegatingDeserializer.java

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,12 @@ public JsonDeserializer<?> createContextual(DeserializationContext ctxt,
7070
return newDelegatingInstance(del);
7171
}
7272

73+
@Override
74+
public SettableBeanProperty findBackReference(String logicalName) {
75+
// [databind#253]: Hope this works....
76+
return _delegatee.findBackReference(logicalName);
77+
}
78+
7379
@Override
7480
public JsonDeserializer<?> replaceDelegatee(JsonDeserializer<?> delegatee)
7581
{
@@ -115,25 +121,11 @@ public Object deserializeWithType(JsonParser p, DeserializationContext ctxt,
115121
/**********************************************************************
116122
*/
117123

118-
@Override
119-
public boolean isCachable() { return _delegatee.isCachable(); }
120-
121-
@Override // since 2.9
122-
public Boolean supportsUpdate(DeserializationConfig config) {
123-
return _delegatee.supportsUpdate(config);
124-
}
125-
126124
@Override
127125
public JsonDeserializer<?> getDelegatee() {
128126
return _delegatee;
129127
}
130128

131-
@Override
132-
public SettableBeanProperty findBackReference(String logicalName) {
133-
// [databind#253]: Hope this works....
134-
return _delegatee.findBackReference(logicalName);
135-
}
136-
137129
@Override
138130
public AccessPattern getNullAccessPattern() {
139131
return _delegatee.getNullAccessPattern();
@@ -156,4 +148,14 @@ public Object getEmptyValue(DeserializationContext ctxt) throws JsonMappingExcep
156148
public ObjectIdReader getObjectIdReader(DeserializationContext ctxt) {
157149
return _delegatee.getObjectIdReader(ctxt);
158150
}
151+
152+
@Override
153+
public boolean isCachable() {
154+
return (_delegatee != null) && _delegatee.isCachable();
155+
}
156+
157+
@Override
158+
public Boolean supportsUpdate(DeserializationConfig config) {
159+
return _delegatee.supportsUpdate(config);
160+
}
159161
}

src/main/java/com/fasterxml/jackson/databind/deser/std/StdDelegatingDeserializer.java renamed to src/main/java/com/fasterxml/jackson/databind/deser/std/StdConvertingDeserializer.java

Lines changed: 29 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,14 @@
2020
* Note that although types (delegate, target) may be related, they must not be same; trying
2121
* to do this will result in an exception.
2222
*<p>
23-
* Since 2.5 There is {@link StdNodeBasedDeserializer} that is a simplified version
24-
* for cases where intermediate type is {@link JsonNode}
23+
* Also note that in Jackson 2.x, this class was named {@code StdDelegatingDeserializer}
2524
*
2625
* @param <T> Target type to convert to, from delegate type
2726
*
2827
* @see StdNodeBasedDeserializer
2928
* @see Converter
3029
*/
31-
public class StdDelegatingDeserializer<T>
30+
public class StdConvertingDeserializer<T>
3231
extends StdDeserializer<T>
3332
{
3433
private static final long serialVersionUID = 1L;
@@ -49,13 +48,13 @@ public class StdDelegatingDeserializer<T>
4948
protected final JsonDeserializer<Object> _delegateDeserializer;
5049

5150
/*
52-
/**********************************************************
51+
/**********************************************************************
5352
/* Life-cycle
54-
/**********************************************************
53+
/**********************************************************************
5554
*/
5655

5756
@SuppressWarnings("unchecked")
58-
public StdDelegatingDeserializer(Converter<?,T> converter)
57+
public StdConvertingDeserializer(Converter<?,T> converter)
5958
{
6059
super(Object.class);
6160
_converter = (Converter<Object,T>)converter;
@@ -64,7 +63,7 @@ public StdDelegatingDeserializer(Converter<?,T> converter)
6463
}
6564

6665
@SuppressWarnings("unchecked")
67-
public StdDelegatingDeserializer(Converter<Object,T> converter,
66+
public StdConvertingDeserializer(Converter<Object,T> converter,
6867
JavaType delegateType, JsonDeserializer<?> delegateDeserializer)
6968
{
7069
super(delegateType);
@@ -73,10 +72,7 @@ public StdDelegatingDeserializer(Converter<Object,T> converter,
7372
_delegateDeserializer = (JsonDeserializer<Object>) delegateDeserializer;
7473
}
7574

76-
/**
77-
* @since 2.5
78-
*/
79-
protected StdDelegatingDeserializer(StdDelegatingDeserializer<T> src)
75+
protected StdConvertingDeserializer(StdConvertingDeserializer<T> src)
8076
{
8177
super(src);
8278
_converter = src._converter;
@@ -88,17 +84,17 @@ protected StdDelegatingDeserializer(StdDelegatingDeserializer<T> src)
8884
* Method used for creating resolved contextual instances. Must be
8985
* overridden when sub-classing.
9086
*/
91-
protected StdDelegatingDeserializer<T> withDelegate(Converter<Object,T> converter,
87+
protected StdConvertingDeserializer<T> withDelegate(Converter<Object,T> converter,
9288
JavaType delegateType, JsonDeserializer<?> delegateDeserializer)
9389
{
94-
ClassUtil.verifyMustOverride(StdDelegatingDeserializer.class, this, "withDelegate");
95-
return new StdDelegatingDeserializer<T>(converter, delegateType, delegateDeserializer);
90+
ClassUtil.verifyMustOverride(StdConvertingDeserializer.class, this, "withDelegate");
91+
return new StdConvertingDeserializer<T>(converter, delegateType, delegateDeserializer);
9692
}
9793

9894
/*
99-
/**********************************************************
95+
/**********************************************************************
10096
/* Contextualization
101-
/**********************************************************
97+
/**********************************************************************
10298
*/
10399

104100
// Note: unlikely to get called since most likely instances explicitly constructed;
@@ -109,7 +105,6 @@ public void resolve(DeserializationContext ctxt)
109105
{
110106
if (_delegateDeserializer != null) {
111107
_delegateDeserializer.resolve(ctxt);
112-
113108
}
114109
}
115110

@@ -133,9 +128,9 @@ public JsonDeserializer<?> createContextual(DeserializationContext ctxt, BeanPro
133128
}
134129

135130
/*
136-
/**********************************************************
131+
/**********************************************************************
137132
/* Accessors
138-
/**********************************************************
133+
/**********************************************************************
139134
*/
140135

141136
@Override
@@ -148,17 +143,25 @@ public Class<?> handledType() {
148143
return _delegateDeserializer.handledType();
149144
}
150145

151-
@Override // since 2.9
146+
/**
147+
* Let's assume that as long as delegate is cachable, we are too.
148+
*/
149+
@Override
150+
public boolean isCachable() {
151+
return (_delegateDeserializer != null) && _delegateDeserializer.isCachable();
152+
}
153+
154+
@Override
152155
public Boolean supportsUpdate(DeserializationConfig config) {
153156
return _delegateDeserializer.supportsUpdate(config);
154157
}
155158

156159
/*
157-
/**********************************************************
160+
/**********************************************************************
158161
/* Serialization
159-
/**********************************************************
162+
/**********************************************************************
160163
*/
161-
164+
162165
@Override
163166
public T deserialize(JsonParser p, DeserializationContext ctxt) throws IOException
164167
{
@@ -209,8 +212,6 @@ public T deserialize(JsonParser p, DeserializationContext ctxt, Object intoValue
209212
* an operation that can be permitted, and the default behavior is to throw exception.
210213
* Sub-classes may choose to try alternative approach if they have more information on
211214
* exact usage and constraints.
212-
*
213-
* @since 2.6
214215
*/
215216
protected Object _handleIncompatibleUpdateValue(JsonParser p, DeserializationContext ctxt, Object intoValue)
216217
throws IOException
@@ -219,11 +220,11 @@ protected Object _handleIncompatibleUpdateValue(JsonParser p, DeserializationCon
219220
("Cannot update object of type %s (using deserializer for type %s)"
220221
+intoValue.getClass().getName(), _delegateType));
221222
}
222-
223+
223224
/*
224-
/**********************************************************
225+
/**********************************************************************
225226
/* Overridable methods
226-
/**********************************************************
227+
/**********************************************************************
227228
*/
228229

229230
/**

0 commit comments

Comments
 (0)