Skip to content

Commit eb3ebd9

Browse files
committed
Fix #3022 (in 2.11 for possible 2.11.5)
1 parent 80ad398 commit eb3ebd9

File tree

5 files changed

+34
-5
lines changed

5 files changed

+34
-5
lines changed

release-notes/CREDITS-2.x

+6
Original file line numberDiff line numberDiff line change
@@ -1168,3 +1168,9 @@ Lucian H (symposion@github)
11681168
* Reported, suggested fix for #2944: `@JsonCreator` on constructor not compatible
11691169
with `@JsonIdentityInfo`, `PropertyGenerator`
11701170
(2.11.4)
1171+
1172+
Gian Merlino (gianm@github)
1173+
#3022: Property ignorals cause `BeanDeserializer `to forget how to read
1174+
from arrays (not copying `_arrayDelegateDeserializer`)
1175+
(2.11.5 / 2.12.2)
1176+

release-notes/VERSION-2.x

+6
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@ Project: jackson-databind
44
=== Releases ===
55
------------------------------------------------------------------------
66

7+
(not yet released)
8+
9+
#3022: Property ignorals cause `BeanDeserializer `to forget how to read
10+
from arrays (not copying `_arrayDelegateDeserializer`)
11+
(reported by Gian M)
12+
713
2.11.4 (12-Dec-2020)
814

915
#2894: Fix type resolution for static methods (regression in 2.11.3 due to #2821 fix)

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

+15
Original file line numberDiff line numberDiff line change
@@ -65,12 +65,18 @@ public abstract class BeanDeserializerBase
6565
/**
6666
* Deserializer that is used iff delegate-based creator is
6767
* to be used for deserializing from JSON Object.
68+
*<p>
69+
* NOTE: cannot be {@code final} because we need to get it during
70+
* {@code resolve()} method (and not contextualization).
6871
*/
6972
protected JsonDeserializer<Object> _delegateDeserializer;
7073

7174
/**
7275
* Deserializer that is used iff array-delegate-based creator
7376
* is to be used for deserializing from JSON Object.
77+
*<p>
78+
* NOTE: cannot be {@code final} because we need to get it during
79+
* {@code resolve()} method (and not contextualization).
7480
*/
7581
protected JsonDeserializer<Object> _arrayDelegateDeserializer;
7682

@@ -204,7 +210,11 @@ protected BeanDeserializerBase(BeanDeserializerBuilder builder,
204210
{
205211
super(beanDesc.getType());
206212
_beanType = beanDesc.getType();
213+
207214
_valueInstantiator = builder.getValueInstantiator();
215+
_delegateDeserializer = null;
216+
_arrayDelegateDeserializer = null;
217+
_propertyBasedCreator = null;
208218

209219
_beanProperties = properties;
210220
_backRefs = backRefs;
@@ -256,6 +266,7 @@ protected BeanDeserializerBase(BeanDeserializerBase src, boolean ignoreAllUnknow
256266

257267
_valueInstantiator = src._valueInstantiator;
258268
_delegateDeserializer = src._delegateDeserializer;
269+
_arrayDelegateDeserializer = src._arrayDelegateDeserializer;
259270
_propertyBasedCreator = src._propertyBasedCreator;
260271

261272
_beanProperties = src._beanProperties;
@@ -282,6 +293,7 @@ protected BeanDeserializerBase(BeanDeserializerBase src, NameTransformer unwrapp
282293

283294
_valueInstantiator = src._valueInstantiator;
284295
_delegateDeserializer = src._delegateDeserializer;
296+
_arrayDelegateDeserializer = src._arrayDelegateDeserializer;
285297
_propertyBasedCreator = src._propertyBasedCreator;
286298

287299
_backRefs = src._backRefs;
@@ -319,6 +331,7 @@ public BeanDeserializerBase(BeanDeserializerBase src, ObjectIdReader oir)
319331

320332
_valueInstantiator = src._valueInstantiator;
321333
_delegateDeserializer = src._delegateDeserializer;
334+
_arrayDelegateDeserializer = src._arrayDelegateDeserializer;
322335
_propertyBasedCreator = src._propertyBasedCreator;
323336

324337
_backRefs = src._backRefs;
@@ -356,6 +369,7 @@ public BeanDeserializerBase(BeanDeserializerBase src, Set<String> ignorableProps
356369

357370
_valueInstantiator = src._valueInstantiator;
358371
_delegateDeserializer = src._delegateDeserializer;
372+
_arrayDelegateDeserializer = src._arrayDelegateDeserializer;
359373
_propertyBasedCreator = src._propertyBasedCreator;
360374

361375
_backRefs = src._backRefs;
@@ -387,6 +401,7 @@ protected BeanDeserializerBase(BeanDeserializerBase src, BeanPropertyMap beanPro
387401

388402
_valueInstantiator = src._valueInstantiator;
389403
_delegateDeserializer = src._delegateDeserializer;
404+
_arrayDelegateDeserializer = src._arrayDelegateDeserializer;
390405
_propertyBasedCreator = src._propertyBasedCreator;
391406

392407
_beanProperties = beanProps;

src/test/java/com/fasterxml/jackson/databind/deser/builder/BuilderSimpleTest.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -299,8 +299,8 @@ private Value2354 build() {
299299
@JsonDeserialize(builder = ValidatingValue.Builder.class)
300300
static class ValidatingValue
301301
{
302-
private final String first;
303-
private final String second;
302+
final String first;
303+
final String second;
304304

305305
ValidatingValue(String first, String second) {
306306
this.first = first;
@@ -309,6 +309,8 @@ static class ValidatingValue
309309

310310
static class ValidationException extends RuntimeException
311311
{
312+
private static final long serialVersionUID = 1L;
313+
312314
ValidationException(String message) {
313315
super(message);
314316
}

src/test/java/com/fasterxml/jackson/databind/struct/FormatFeatureAcceptSingleTest.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ static class StringListWrapper {
6060
static class StringListWrapperWithBuilder {
6161
public final List<String> values;
6262

63-
private StringListWrapperWithBuilder(List<String> values) {
63+
StringListWrapperWithBuilder(List<String> values) {
6464
this.values = values;
6565
}
6666

@@ -102,7 +102,7 @@ static class RolesInList {
102102
static class RolesInListWithBuilder {
103103
public final List<Role> roles;
104104

105-
private RolesInListWithBuilder(List<Role> roles) {
105+
RolesInListWithBuilder(List<Role> roles) {
106106
this.roles = roles;
107107
}
108108

@@ -137,7 +137,7 @@ static class Role {
137137

138138
@JsonDeserialize
139139
static class WrapperWithStringFactory {
140-
private final Role role;
140+
final Role role;
141141

142142
private WrapperWithStringFactory(Role role) {
143143
this.role = role;

0 commit comments

Comments
 (0)