Skip to content

Commit e26bd7c

Browse files
authored
Fix #3741: Delegate getNullValue() and related to delegatee deserializer (#3750)
1 parent dc6c66b commit e26bd7c

File tree

2 files changed

+69
-6
lines changed

2 files changed

+69
-6
lines changed

release-notes/VERSION-2.x

+1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ Project: jackson-databind
1414
(contributed by Philippe M)
1515
#3711: Enum polymorphism not working correctly with DEDUCTION
1616
(reported by @smilep)
17+
#3741: `StdDelegatingDeserializer` ignores `nullValue` of `_delegateDeserializer`.
1718

1819
2.14.1 (21-Nov-2022)
1920

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

+68-6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.fasterxml.jackson.databind.deser.std;
22

33
import java.io.IOException;
4+
import java.util.Collection;
45

56
import com.fasterxml.jackson.core.JsonParser;
67

@@ -9,6 +10,7 @@
910
import com.fasterxml.jackson.databind.deser.ResolvableDeserializer;
1011
import com.fasterxml.jackson.databind.jsontype.TypeDeserializer;
1112
import com.fasterxml.jackson.databind.type.LogicalType;
13+
import com.fasterxml.jackson.databind.util.AccessPattern;
1214
import com.fasterxml.jackson.databind.util.ClassUtil;
1315
import com.fasterxml.jackson.databind.util.Converter;
1416

@@ -210,11 +212,6 @@ protected Object _handleIncompatibleUpdateValue(JsonParser p, DeserializationCon
210212
/**********************************************************
211213
*/
212214

213-
@Override
214-
public JsonDeserializer<?> getDelegatee() {
215-
return _delegateDeserializer;
216-
}
217-
218215
@Override
219216
public Class<?> handledType() {
220217
return _delegateDeserializer.handledType();
@@ -224,7 +221,60 @@ public Class<?> handledType() {
224221
public LogicalType logicalType() {
225222
return _delegateDeserializer.logicalType();
226223
}
227-
224+
225+
// Let's assume we should be cachable if delegate is
226+
@Override
227+
public boolean isCachable() {
228+
return (_delegateDeserializer != null) && _delegateDeserializer.isCachable();
229+
}
230+
231+
@Override
232+
public JsonDeserializer<?> getDelegatee() {
233+
return _delegateDeserializer;
234+
}
235+
236+
@Override
237+
public Collection<Object> getKnownPropertyNames() {
238+
return _delegateDeserializer.getKnownPropertyNames();
239+
}
240+
241+
/*
242+
/**********************************************************
243+
/* Null/empty/absent accessors
244+
/**********************************************************
245+
*/
246+
247+
@Override
248+
public T getNullValue(DeserializationContext ctxt) throws JsonMappingException {
249+
return _convertIfNonNull(_delegateDeserializer.getNullValue(ctxt));
250+
}
251+
252+
@Override
253+
public AccessPattern getNullAccessPattern() {
254+
return _delegateDeserializer.getNullAccessPattern();
255+
}
256+
257+
@Override
258+
public Object getAbsentValue(DeserializationContext ctxt) throws JsonMappingException {
259+
return _convertIfNonNull(_delegateDeserializer.getAbsentValue(ctxt));
260+
}
261+
262+
@Override
263+
public Object getEmptyValue(DeserializationContext ctxt) throws JsonMappingException {
264+
return _convertIfNonNull(_delegateDeserializer.getEmptyValue(ctxt));
265+
}
266+
267+
@Override
268+
public AccessPattern getEmptyAccessPattern() {
269+
return _delegateDeserializer.getEmptyAccessPattern();
270+
}
271+
272+
/*
273+
/**********************************************************
274+
/* Other accessors
275+
/**********************************************************
276+
*/
277+
228278
@Override // since 2.9
229279
public Boolean supportsUpdate(DeserializationConfig config) {
230280
return _delegateDeserializer.supportsUpdate(config);
@@ -251,4 +301,16 @@ public Boolean supportsUpdate(DeserializationConfig config) {
251301
protected T convertValue(Object delegateValue) {
252302
return _converter.convert(delegateValue);
253303
}
304+
305+
/*
306+
/**********************************************************
307+
/* Helper methods
308+
/**********************************************************
309+
*/
310+
311+
// @since 2.14.2
312+
protected T _convertIfNonNull(Object delegateValue) {
313+
return (delegateValue == null) ? null
314+
: _converter.convert(delegateValue);
315+
}
254316
}

0 commit comments

Comments
 (0)