Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -180,15 +180,15 @@ private ModelDeserializer<JsonParser> deserializerChainInternal(LinkedList<Type>
return typeDeserializer;
}
if (Collection.class.isAssignableFrom(rawType)) {
return createCollectionDeserializer(cachedItem, rawType, chain, propertyCustomization);
return createCollectionDeserializer(cachedItem, rawType, chain);
} else if (Map.class.isAssignableFrom(rawType)) {
return createMapDeserializer(cachedItem, rawType, chain, propertyCustomization);
return createMapDeserializer(cachedItem, rawType, chain);
} else if (rawType.isArray()) {
return createArrayDeserializer(cachedItem, rawType, chain, propertyCustomization);
return createArrayDeserializer(cachedItem, rawType, chain);
} else if (type instanceof GenericArrayType) {
return createGenericArray(cachedItem, rawType, chain, propertyCustomization);
return createGenericArray(cachedItem, rawType, chain);
} else if (Optional.class.isAssignableFrom(rawType)) {
return createOptionalDeserializer(chain, type, propertyCustomization, cachedItem);
return createOptionalDeserializer(chain, type, cachedItem);
} else {
return createObjectDeserializer(chain, type, propertyCustomization, classModel, rawType, cachedItem);
}
Expand Down Expand Up @@ -262,8 +262,7 @@ private ModelDeserializer<JsonParser> createObjectDeserializer(LinkedList<Type>

private ModelDeserializer<JsonParser> createCollectionDeserializer(CachedItem cachedItem,
Class<?> rawType,
LinkedList<Type> chain,
Customization propertyCustomization) {
LinkedList<Type> chain) {
Type type = cachedItem.type;
Type colType = type instanceof ParameterizedType
? ((ParameterizedType) type).getActualTypeArguments()[0]
Expand All @@ -284,8 +283,7 @@ private ModelDeserializer<JsonParser> createCollectionDeserializer(CachedItem ca

private ModelDeserializer<JsonParser> createMapDeserializer(CachedItem cachedItem,
Class<?> rawType,
LinkedList<Type> chain,
Customization propertyCustomization) {
LinkedList<Type> chain) {
Type type = cachedItem.type;
Type keyType = type instanceof ParameterizedType
? ((ParameterizedType) type).getActualTypeArguments()[0]
Expand All @@ -298,9 +296,10 @@ private ModelDeserializer<JsonParser> createMapDeserializer(CachedItem cachedIte
ClassCustomization.empty(),
JustReturn.instance(),
MAP_KEY_EVENTS);
ClassModel valueClassModel = jsonbContext.getMappingContext().getOrCreateClassModel(ReflectionUtils.resolveRawType(chain, valueType));
ModelDeserializer<JsonParser> valueProcessor = typeProcessor(chain,
valueType,
propertyCustomization,
valueClassModel.getClassCustomization(),
JustReturn.instance());

MapDeserializer mapDeserializer = new MapDeserializer(keyProcessor, valueProcessor);
Expand All @@ -315,14 +314,15 @@ private ModelDeserializer<JsonParser> createMapDeserializer(CachedItem cachedIte

private ModelDeserializer<JsonParser> createArrayDeserializer(CachedItem cachedItem,
Class<?> rawType,
LinkedList<Type> chain,
Customization propertyCustomization) {
LinkedList<Type> chain) {
JsonbConfigProperties configProperties = jsonbContext.getConfigProperties();
if (rawType.equals(byte[].class) && !configProperties.getBinaryDataStrategy().equals(BinaryDataStrategy.BYTE)) {
String strategy = configProperties.getBinaryDataStrategy();
// Special case for byte[] with base64 encoding - use String's class customization
ClassModel stringModel = jsonbContext.getMappingContext().getOrCreateClassModel(String.class);
ModelDeserializer<JsonParser> typeProcessor = typeProcessor(chain,
String.class,
propertyCustomization,
stringModel.getClassCustomization(),
JustReturn.instance());
ModelDeserializer<JsonParser> base64Deserializer = ArrayInstanceCreator.createBase64Deserializer(strategy,
typeProcessor);
Expand All @@ -331,22 +331,23 @@ private ModelDeserializer<JsonParser> createArrayDeserializer(CachedItem cachedI
return nullChecker;
}
Class<?> arrayType = rawType.getComponentType();
ClassModel classModel = jsonbContext.getMappingContext().getOrCreateClassModel(arrayType);
ModelDeserializer<JsonParser> typeProcessor = typeProcessor(chain,
arrayType,
propertyCustomization,
classModel.getClassCustomization(),
JustReturn.instance());
return createArrayCommonDeserializer(cachedItem, rawType, arrayType, typeProcessor);
}

private ModelDeserializer<JsonParser> createGenericArray(CachedItem cachedItem,
Class<?> rawType,
LinkedList<Type> chain,
Customization propertyCustomization) {
LinkedList<Type> chain) {
GenericArrayType type = (GenericArrayType) cachedItem.type;
Class<?> component = ReflectionUtils.getRawType(type.getGenericComponentType());
ClassModel classModel = jsonbContext.getMappingContext().getOrCreateClassModel(component);
ModelDeserializer<JsonParser> typeProcessor = typeProcessor(chain,
type.getGenericComponentType(),
propertyCustomization,
classModel.getClassCustomization(),
JustReturn.instance());
return createArrayCommonDeserializer(cachedItem, rawType, component, typeProcessor);
}
Expand All @@ -365,12 +366,13 @@ private ModelDeserializer<JsonParser> createArrayCommonDeserializer(CachedItem c

private OptionalDeserializer createOptionalDeserializer(LinkedList<Type> chain,
Type type,
Customization propertyCustomization,
CachedItem cachedItem) {
Type colType = type instanceof ParameterizedType
? ((ParameterizedType) type).getActualTypeArguments()[0]
: Object.class;
ModelDeserializer<JsonParser> typeProcessor = typeProcessor(chain, colType, propertyCustomization, JustReturn.instance());
colType = ReflectionUtils.resolveType(chain, colType);
ClassModel classModel = jsonbContext.getMappingContext().getOrCreateClassModel(ReflectionUtils.getRawType(colType));
ModelDeserializer<JsonParser> typeProcessor = typeProcessor(chain, colType, classModel.getClassCustomization(), JustReturn.instance());
OptionalDeserializer optionalDeserializer = new OptionalDeserializer(typeProcessor, JustReturn.instance());
models.put(cachedItem, optionalDeserializer);
return optionalDeserializer;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -302,7 +302,9 @@ private ModelSerializer createMapSerializer(LinkedList<Type> chain, Type type, C
Type resolvedKey = ReflectionUtils.resolveType(chain, keyType);
Class<?> rawClass = ReflectionUtils.getRawType(resolvedKey);
ModelSerializer keySerializer = memberSerializer(chain, keyType, ClassCustomization.empty(), true);
ModelSerializer valueSerializer = memberSerializer(chain, valueType, propertyCustomization, false);
Type resolvedValue = ReflectionUtils.resolveType(chain, valueType);
ClassModel valueClassModel = jsonbContext.getMappingContext().getOrCreateClassModel(ReflectionUtils.getRawType(resolvedValue));
ModelSerializer valueSerializer = memberSerializer(chain, valueType, valueClassModel.getClassCustomization(), false);
MapSerializer mapSerializer = MapSerializer.create(rawClass, keySerializer, valueSerializer, jsonbContext);
KeyWriter keyWriter = new KeyWriter(mapSerializer);
NullVisibilitySwitcher nullVisibilitySwitcher = new NullVisibilitySwitcher(true, keyWriter);
Expand All @@ -313,7 +315,8 @@ private ModelSerializer createArraySerializer(LinkedList<Type> chain,
Class<?> raw,
Customization propertyCustomization) {
Class<?> arrayComponent = raw.getComponentType();
ModelSerializer modelSerializer = memberSerializer(chain, arrayComponent, propertyCustomization, false);
ClassModel classModel = jsonbContext.getMappingContext().getOrCreateClassModel(arrayComponent);
ModelSerializer modelSerializer = memberSerializer(chain, arrayComponent, classModel.getClassCustomization(), false);
ModelSerializer arraySerializer = ArraySerializer.create(raw, jsonbContext, modelSerializer);
KeyWriter keyWriter = new KeyWriter(arraySerializer);
NullVisibilitySwitcher nullVisibilitySwitcher = new NullVisibilitySwitcher(true, keyWriter);
Expand All @@ -325,7 +328,8 @@ private ModelSerializer createGenericArraySerializer(LinkedList<Type> chain,
Customization propertyCustomization) {
Class<?> raw = ReflectionUtils.getRawType(type);
Class<?> component = ReflectionUtils.getRawType(((GenericArrayType) type).getGenericComponentType());
ModelSerializer modelSerializer = memberSerializer(chain, component, propertyCustomization, false);
ClassModel classModel = jsonbContext.getMappingContext().getOrCreateClassModel(component);
ModelSerializer modelSerializer = memberSerializer(chain, component, classModel.getClassCustomization(), false);
ModelSerializer arraySerializer = ArraySerializer.create(raw, jsonbContext, modelSerializer);
KeyWriter keyWriter = new KeyWriter(arraySerializer);
NullVisibilitySwitcher nullVisibilitySwitcher = new NullVisibilitySwitcher(true, keyWriter);
Expand All @@ -339,7 +343,9 @@ private ModelSerializer createOptionalSerializer(LinkedList<Type> chain,
Type optType = type instanceof ParameterizedType
? ((ParameterizedType) type).getActualTypeArguments()[0]
: Object.class;
ModelSerializer modelSerializer = memberSerializer(chain, optType, propertyCustomization, isKey);
Type resolvedOptType = ReflectionUtils.resolveType(chain, optType);
ClassModel classModel = jsonbContext.getMappingContext().getOrCreateClassModel(ReflectionUtils.getRawType(resolvedOptType));
ModelSerializer modelSerializer = memberSerializer(chain, optType, classModel.getClassCustomization(), isKey);
return new OptionalSerializer(modelSerializer);
}

Expand Down
Loading