@@ -180,15 +180,15 @@ private ModelDeserializer<JsonParser> deserializerChainInternal(LinkedList<Type>
180180 return typeDeserializer ;
181181 }
182182 if (Collection .class .isAssignableFrom (rawType )) {
183- return createCollectionDeserializer (cachedItem , rawType , chain , propertyCustomization );
183+ return createCollectionDeserializer (cachedItem , rawType , chain );
184184 } else if (Map .class .isAssignableFrom (rawType )) {
185- return createMapDeserializer (cachedItem , rawType , chain , propertyCustomization );
185+ return createMapDeserializer (cachedItem , rawType , chain );
186186 } else if (rawType .isArray ()) {
187- return createArrayDeserializer (cachedItem , rawType , chain , propertyCustomization );
187+ return createArrayDeserializer (cachedItem , rawType , chain );
188188 } else if (type instanceof GenericArrayType ) {
189- return createGenericArray (cachedItem , rawType , chain , propertyCustomization );
189+ return createGenericArray (cachedItem , rawType , chain );
190190 } else if (Optional .class .isAssignableFrom (rawType )) {
191- return createOptionalDeserializer (chain , type , propertyCustomization , cachedItem );
191+ return createOptionalDeserializer (chain , type , cachedItem );
192192 } else {
193193 return createObjectDeserializer (chain , type , propertyCustomization , classModel , rawType , cachedItem );
194194 }
@@ -262,8 +262,7 @@ private ModelDeserializer<JsonParser> createObjectDeserializer(LinkedList<Type>
262262
263263 private ModelDeserializer <JsonParser > createCollectionDeserializer (CachedItem cachedItem ,
264264 Class <?> rawType ,
265- LinkedList <Type > chain ,
266- Customization propertyCustomization ) {
265+ LinkedList <Type > chain ) {
267266 Type type = cachedItem .type ;
268267 Type colType = type instanceof ParameterizedType
269268 ? ((ParameterizedType ) type ).getActualTypeArguments ()[0 ]
@@ -284,8 +283,7 @@ private ModelDeserializer<JsonParser> createCollectionDeserializer(CachedItem ca
284283
285284 private ModelDeserializer <JsonParser > createMapDeserializer (CachedItem cachedItem ,
286285 Class <?> rawType ,
287- LinkedList <Type > chain ,
288- Customization propertyCustomization ) {
286+ LinkedList <Type > chain ) {
289287 Type type = cachedItem .type ;
290288 Type keyType = type instanceof ParameterizedType
291289 ? ((ParameterizedType ) type ).getActualTypeArguments ()[0 ]
@@ -298,9 +296,10 @@ private ModelDeserializer<JsonParser> createMapDeserializer(CachedItem cachedIte
298296 ClassCustomization .empty (),
299297 JustReturn .instance (),
300298 MAP_KEY_EVENTS );
299+ ClassModel valueClassModel = jsonbContext .getMappingContext ().getOrCreateClassModel (ReflectionUtils .resolveRawType (chain , valueType ));
301300 ModelDeserializer <JsonParser > valueProcessor = typeProcessor (chain ,
302301 valueType ,
303- propertyCustomization ,
302+ valueClassModel . getClassCustomization () ,
304303 JustReturn .instance ());
305304
306305 MapDeserializer mapDeserializer = new MapDeserializer (keyProcessor , valueProcessor );
@@ -315,14 +314,15 @@ private ModelDeserializer<JsonParser> createMapDeserializer(CachedItem cachedIte
315314
316315 private ModelDeserializer <JsonParser > createArrayDeserializer (CachedItem cachedItem ,
317316 Class <?> rawType ,
318- LinkedList <Type > chain ,
319- Customization propertyCustomization ) {
317+ LinkedList <Type > chain ) {
320318 JsonbConfigProperties configProperties = jsonbContext .getConfigProperties ();
321319 if (rawType .equals (byte [].class ) && !configProperties .getBinaryDataStrategy ().equals (BinaryDataStrategy .BYTE )) {
322320 String strategy = configProperties .getBinaryDataStrategy ();
321+ // Special case for byte[] with base64 encoding - use String's class customization
322+ ClassModel stringModel = jsonbContext .getMappingContext ().getOrCreateClassModel (String .class );
323323 ModelDeserializer <JsonParser > typeProcessor = typeProcessor (chain ,
324324 String .class ,
325- propertyCustomization ,
325+ stringModel . getClassCustomization () ,
326326 JustReturn .instance ());
327327 ModelDeserializer <JsonParser > base64Deserializer = ArrayInstanceCreator .createBase64Deserializer (strategy ,
328328 typeProcessor );
@@ -331,22 +331,23 @@ private ModelDeserializer<JsonParser> createArrayDeserializer(CachedItem cachedI
331331 return nullChecker ;
332332 }
333333 Class <?> arrayType = rawType .getComponentType ();
334+ ClassModel classModel = jsonbContext .getMappingContext ().getOrCreateClassModel (arrayType );
334335 ModelDeserializer <JsonParser > typeProcessor = typeProcessor (chain ,
335336 arrayType ,
336- propertyCustomization ,
337+ classModel . getClassCustomization () ,
337338 JustReturn .instance ());
338339 return createArrayCommonDeserializer (cachedItem , rawType , arrayType , typeProcessor );
339340 }
340341
341342 private ModelDeserializer <JsonParser > createGenericArray (CachedItem cachedItem ,
342343 Class <?> rawType ,
343- LinkedList <Type > chain ,
344- Customization propertyCustomization ) {
344+ LinkedList <Type > chain ) {
345345 GenericArrayType type = (GenericArrayType ) cachedItem .type ;
346346 Class <?> component = ReflectionUtils .getRawType (type .getGenericComponentType ());
347+ ClassModel classModel = jsonbContext .getMappingContext ().getOrCreateClassModel (component );
347348 ModelDeserializer <JsonParser > typeProcessor = typeProcessor (chain ,
348349 type .getGenericComponentType (),
349- propertyCustomization ,
350+ classModel . getClassCustomization () ,
350351 JustReturn .instance ());
351352 return createArrayCommonDeserializer (cachedItem , rawType , component , typeProcessor );
352353 }
@@ -365,12 +366,13 @@ private ModelDeserializer<JsonParser> createArrayCommonDeserializer(CachedItem c
365366
366367 private OptionalDeserializer createOptionalDeserializer (LinkedList <Type > chain ,
367368 Type type ,
368- Customization propertyCustomization ,
369369 CachedItem cachedItem ) {
370370 Type colType = type instanceof ParameterizedType
371371 ? ((ParameterizedType ) type ).getActualTypeArguments ()[0 ]
372372 : Object .class ;
373- ModelDeserializer <JsonParser > typeProcessor = typeProcessor (chain , colType , propertyCustomization , JustReturn .instance ());
373+ colType = ReflectionUtils .resolveType (chain , colType );
374+ ClassModel classModel = jsonbContext .getMappingContext ().getOrCreateClassModel (ReflectionUtils .getRawType (colType ));
375+ ModelDeserializer <JsonParser > typeProcessor = typeProcessor (chain , colType , classModel .getClassCustomization (), JustReturn .instance ());
374376 OptionalDeserializer optionalDeserializer = new OptionalDeserializer (typeProcessor , JustReturn .instance ());
375377 models .put (cachedItem , optionalDeserializer );
376378 return optionalDeserializer ;
0 commit comments