Skip to content

Commit 80dcecc

Browse files
committed
Fix #3741
1 parent dc6c66b commit 80dcecc

File tree

2 files changed

+54
-6
lines changed

2 files changed

+54
-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

+53-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,45 @@ 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+
/*
258+
/**********************************************************
259+
/* Other accessors
260+
/**********************************************************
261+
*/
262+
228263
@Override // since 2.9
229264
public Boolean supportsUpdate(DeserializationConfig config) {
230265
return _delegateDeserializer.supportsUpdate(config);
@@ -251,4 +286,16 @@ public Boolean supportsUpdate(DeserializationConfig config) {
251286
protected T convertValue(Object delegateValue) {
252287
return _converter.convert(delegateValue);
253288
}
289+
290+
/*
291+
/**********************************************************
292+
/* Helper methods
293+
/**********************************************************
294+
*/
295+
296+
// @since 2.14.2
297+
protected T _convertIfNonNull(Object delegateValue) {
298+
return (delegateValue == null) ? null
299+
: _converter.convert(delegateValue);
300+
}
254301
}

0 commit comments

Comments
 (0)