@@ -193,7 +193,6 @@ public Object deserialize(JsonParser p, DeserializationContext ctxt)
193
193
Object [] chunk = buffer .resetAndStart ();
194
194
int ix = 0 ;
195
195
JsonToken t ;
196
- final TypeDeserializer typeDeser = _elementTypeDeserializer ;
197
196
198
197
try {
199
198
while ((t = p .nextToken ()) != JsonToken .END_ARRAY ) {
@@ -205,10 +204,8 @@ public Object deserialize(JsonParser p, DeserializationContext ctxt)
205
204
continue ;
206
205
}
207
206
value = _nullProvider .getNullValue (ctxt );
208
- } else if (typeDeser == null ) {
209
- value = _elementDeserializer .deserialize (p , ctxt );
210
207
} else {
211
- value = _elementDeserializer . deserializeWithType (p , ctxt , typeDeser );
208
+ value = _deserializeNoNullChecks (p , ctxt );
212
209
}
213
210
if (ix >= chunk .length ) {
214
211
chunk = buffer .appendCompletedChunk (chunk );
@@ -263,7 +260,6 @@ public Object deserialize(JsonParser p, DeserializationContext ctxt,
263
260
int ix = intoValue .length ;
264
261
Object [] chunk = buffer .resetAndStart (intoValue , ix );
265
262
JsonToken t ;
266
- final TypeDeserializer typeDeser = _elementTypeDeserializer ;
267
263
268
264
try {
269
265
while ((t = p .nextToken ()) != JsonToken .END_ARRAY ) {
@@ -274,10 +270,8 @@ public Object deserialize(JsonParser p, DeserializationContext ctxt,
274
270
continue ;
275
271
}
276
272
value = _nullProvider .getNullValue (ctxt );
277
- } else if (typeDeser == null ) {
278
- value = _elementDeserializer .deserialize (p , ctxt );
279
273
} else {
280
- value = _elementDeserializer . deserializeWithType (p , ctxt , typeDeser );
274
+ value = _deserializeNoNullChecks (p , ctxt );
281
275
}
282
276
if (ix >= chunk .length ) {
283
277
chunk = buffer .appendCompletedChunk (chunk );
@@ -315,7 +309,7 @@ protected Byte[] deserializeFromBase64(JsonParser p, DeserializationContext ctxt
315
309
// But then need to convert to wrappers
316
310
Byte [] result = new Byte [b .length ];
317
311
for (int i = 0 , len = b .length ; i < len ; ++i ) {
318
- result [i ] = Byte . valueOf ( b [i ]) ;
312
+ result [i ] = b [i ];
319
313
}
320
314
return result ;
321
315
}
@@ -371,11 +365,7 @@ protected Object handleNonArray(JsonParser p, DeserializationContext ctxt)
371
365
// if coercion failed, we can still add it to a list
372
366
}
373
367
374
- if (_elementTypeDeserializer == null ) {
375
- value = _elementDeserializer .deserialize (p , ctxt );
376
- } else {
377
- value = _elementDeserializer .deserializeWithType (p , ctxt , _elementTypeDeserializer );
378
- }
368
+ value = _deserializeNoNullChecks (p , ctxt );
379
369
}
380
370
// Ok: bit tricky, since we may want T[], not just Object[]
381
371
Object [] result ;
@@ -388,5 +378,20 @@ protected Object handleNonArray(JsonParser p, DeserializationContext ctxt)
388
378
result [0 ] = value ;
389
379
return result ;
390
380
}
381
+
382
+ /**
383
+ * Deserialize the content of the map.
384
+ * If _elementTypeDeserializer is null, use _elementDeserializer.deserialize; if non-null,
385
+ * use _elementDeserializer.deserializeWithType to deserialize value.
386
+ * This method only performs deserialization and does not consider _skipNullValues, _nullProvider, etc.
387
+ */
388
+ protected Object _deserializeNoNullChecks (JsonParser p , DeserializationContext ctxt )
389
+ throws JacksonException
390
+ {
391
+ if (_elementTypeDeserializer == null ) {
392
+ return _elementDeserializer .deserialize (p , ctxt );
393
+ }
394
+ return _elementDeserializer .deserializeWithType (p , ctxt , _elementTypeDeserializer );
395
+ }
391
396
}
392
397
0 commit comments