Class BasicSerializerFactory
java.lang.Object
edu.internet2.middleware.grouperClientExt.com.fasterxml.jackson.databind.ser.SerializerFactory
edu.internet2.middleware.grouperClientExt.com.fasterxml.jackson.databind.ser.BasicSerializerFactory
- All Implemented Interfaces:
Serializable
- Direct Known Subclasses:
BeanSerializerFactory
Factory class that can provide serializers for standard JDK classes,
as well as custom classes that extend standard classes or implement
one of "well-known" interfaces (such as
Collection
).
Since all the serializers are eagerly instantiated, and there is no additional introspection or customizability of these types, this factory is essentially stateless.
- See Also:
-
Field Summary
Modifier and TypeFieldDescriptionprotected static final HashMap<String,
JsonSerializer<?>> Since these are all JDK classes, we shouldn't have to worry about ClassLoader used to load them.protected static final HashMap<String,
Class<? extends JsonSerializer<?>>> Actually it may not make much sense to eagerly instantiate all kinds of serializers: so this Map actually contains class references, not instancesprotected final SerializerFactoryConfig
Configuration settings for this factory; immutable instance (just like this factory), new version created via copy-constructor (fluent-style) -
Constructor Summary
ModifierConstructorDescriptionprotected
We will provide default constructor to allow sub-classing, but make it protected so that no non-singleton instances of the class will be instantiated. -
Method Summary
Modifier and TypeMethodDescriptionprotected MapSerializer
_checkMapContentInclusion
(SerializerProvider prov, BeanDescription beanDesc, MapSerializer mapSer) Helper method that does figures out content inclusion value to use, if any, and construct re-configuredMapSerializer
appropriately.protected JsonSerializer<Object>
Helper method called to try to find whether there is an annotation in the class that indicates content ("value") serializer to use.protected JsonInclude.Value
_findInclusionWithContent
(SerializerProvider prov, BeanDescription beanDesc, JavaType contentType, Class<?> configType) Helper method used for finding inclusion definitions for structured container types likeMap
s and referential types (likeAtomicReference
).protected JsonSerializer<Object>
Helper method called to try to find whether there is an annotation in the class that indicates key serializer to use.protected JsonSerializer<?>
buildArraySerializer
(SerializerProvider prov, ArrayType type, BeanDescription beanDesc, boolean staticTyping, TypeSerializer elementTypeSerializer, JsonSerializer<Object> elementValueSerializer) Helper method that handles configuration details when constructing serializers forObject[]
(and subtypes, except for String).protected JsonSerializer<?>
buildAtomicReferenceSerializer
(SerializerProvider prov, ReferenceType refType, BeanDescription beanDesc, boolean staticTyping, TypeSerializer contentTypeSerializer, JsonSerializer<Object> contentSerializer) buildCollectionSerializer
(JavaType elemType, boolean staticTyping, TypeSerializer vts, JsonSerializer<Object> valueSerializer) protected JsonSerializer<?>
buildCollectionSerializer
(SerializerProvider prov, CollectionType type, BeanDescription beanDesc, boolean staticTyping, TypeSerializer elementTypeSerializer, JsonSerializer<Object> elementValueSerializer) Helper method that handles configuration details when constructing serializers forList
types that support efficient by-index accessprotected JsonSerializer<?>
buildContainerSerializer
(SerializerProvider prov, JavaType type, BeanDescription beanDesc, boolean staticTyping) protected JsonSerializer<?>
buildEnumSerializer
(SerializationConfig config, JavaType type, BeanDescription beanDesc) buildEnumSetSerializer
(JavaType enumType) buildIndexedListSerializer
(JavaType elemType, boolean staticTyping, TypeSerializer vts, JsonSerializer<Object> valueSerializer) protected JsonSerializer<?>
buildIterableSerializer
(SerializationConfig config, JavaType type, BeanDescription beanDesc, boolean staticTyping, JavaType valueType) protected JsonSerializer<?>
buildIteratorSerializer
(SerializationConfig config, JavaType type, BeanDescription beanDesc, boolean staticTyping, JavaType valueType) protected JsonSerializer<?>
buildMapEntrySerializer
(SerializerProvider prov, JavaType type, BeanDescription beanDesc, boolean staticTyping, JavaType keyType, JavaType valueType) protected JsonSerializer<?>
buildMapSerializer
(SerializerProvider prov, MapType type, BeanDescription beanDesc, boolean staticTyping, JsonSerializer<Object> keySerializer, TypeSerializer elementTypeSerializer, JsonSerializer<Object> elementValueSerializer) Helper method that handles configuration details when constructing serializers forMap
types.createKeySerializer
(SerializationConfig config, JavaType keyType, JsonSerializer<Object> defaultImpl) Deprecated.createKeySerializer
(SerializerProvider ctxt, JavaType keyType, JsonSerializer<Object> defaultImpl) Method called to create serializer to use for serializing JSON property names (which must be output asJsonToken.FIELD_NAME
) for Map that has specified declared key type, and is for specified property (or, if property is null, as root value)abstract JsonSerializer<Object>
createSerializer
(SerializerProvider prov, JavaType type) Method called to create (or, for immutable serializers, reuse) a serializer for given type.createTypeSerializer
(SerializationConfig config, JavaType baseType) Method called to construct a type serializer for values with given declared base type.protected abstract Iterable<Serializers>
findConverter
(SerializerProvider prov, Annotated a) protected JsonSerializer<?>
findConvertingSerializer
(SerializerProvider prov, Annotated a, JsonSerializer<?> ser) Helper method that will check whether given annotated entity (usually class, but may also be a property accessor) indicates that aConverter
is to be used; and if so, to construct and return suitable serializer for it.protected Object
findFilterId
(SerializationConfig config, BeanDescription beanDesc) Method called to find filter that is configured to be used with bean serializer being built, if any.protected JsonSerializer<?>
findOptionalStdSerializer
(SerializerProvider prov, JavaType type, BeanDescription beanDesc, boolean staticTyping) Overridable method called after checking all other types.findReferenceSerializer
(SerializerProvider prov, ReferenceType refType, BeanDescription beanDesc, boolean staticTyping) protected final JsonSerializer<?>
findSerializerByAddonType
(SerializationConfig config, JavaType javaType, BeanDescription beanDesc, boolean staticTyping) Reflection-based serialized find method, which checks if given class implements one of recognized "add-on" interfaces.protected final JsonSerializer<?>
findSerializerByAnnotations
(SerializerProvider prov, JavaType type, BeanDescription beanDesc) Method called to see if one of primary per-class annotations (or related, like implementing ofJsonSerializable
) determines the serializer to use.protected final JsonSerializer<?>
findSerializerByLookup
(JavaType type, SerializationConfig config, BeanDescription beanDesc, boolean staticTyping) Method that will use fast lookup (and identity comparison) methods to see if we know serializer to use for given type.protected final JsonSerializer<?>
findSerializerByPrimaryType
(SerializerProvider prov, JavaType type, BeanDescription beanDesc, boolean staticTyping) Method for checking if we can determine serializer to use based on set of known primary types, checking for set of known base types (exact matches having been compared against withfindSerializerByLookup
).protected JsonSerializer<Object>
Helper method called to check if a class or method has an annotation (@link edu.internet2.middleware.grouperClientExt.com.fasterxml.jackson.databind.annotation.JsonSerialize#using) that tells the class to use for serialization.Method for getting currentSerializerFactoryConfig
.protected boolean
isIndexedList
(Class<?> cls) protected boolean
usesStaticTyping
(SerializationConfig config, BeanDescription beanDesc, TypeSerializer typeSer) Helper method to check whether global settings and/or class annotations for the bean class indicate that static typing (declared types) should be used for properties.final SerializerFactory
withAdditionalKeySerializers
(Serializers additional) Convenience method for creating a new factory instance with an additional key serializer provider.final SerializerFactory
withAdditionalSerializers
(Serializers additional) Convenience method for creating a new factory instance with an additional serializer provider.abstract SerializerFactory
withConfig
(SerializerFactoryConfig config) Method used for creating a new instance of this factory, but with different configuration.final SerializerFactory
withSerializerModifier
(BeanSerializerModifier modifier) Convenience method for creating a new factory instance with additional bean serializer modifier.
-
Field Details
-
_concrete
Since these are all JDK classes, we shouldn't have to worry about ClassLoader used to load them. Rather, we can just use the class name, and keep things simple and efficient. -
_concreteLazy
Actually it may not make much sense to eagerly instantiate all kinds of serializers: so this Map actually contains class references, not instances -
_factoryConfig
Configuration settings for this factory; immutable instance (just like this factory), new version created via copy-constructor (fluent-style)
-
-
Constructor Details
-
BasicSerializerFactory
We will provide default constructor to allow sub-classing, but make it protected so that no non-singleton instances of the class will be instantiated.
-
-
Method Details
-
getFactoryConfig
Method for getting currentSerializerFactoryConfig
.Note that since instances are immutable, you can NOT change settings by accessing an instance and calling methods: this will simply create new instance of config object.
-
withConfig
Method used for creating a new instance of this factory, but with different configuration. Reason for specifying factory method (instead of plain constructor) is to allow proper sub-classing of factories.Note that custom sub-classes generally must override implementation of this method, as it usually requires instantiating a new instance of factory type. Check out javadocs for
BeanSerializerFactory
for more details. -
withAdditionalSerializers
Convenience method for creating a new factory instance with an additional serializer provider.- Specified by:
withAdditionalSerializers
in classSerializerFactory
-
withAdditionalKeySerializers
Convenience method for creating a new factory instance with an additional key serializer provider.- Specified by:
withAdditionalKeySerializers
in classSerializerFactory
-
withSerializerModifier
Convenience method for creating a new factory instance with additional bean serializer modifier.- Specified by:
withSerializerModifier
in classSerializerFactory
-
createSerializer
public abstract JsonSerializer<Object> createSerializer(SerializerProvider prov, JavaType type) throws JsonMappingException Description copied from class:SerializerFactory
Method called to create (or, for immutable serializers, reuse) a serializer for given type.- Specified by:
createSerializer
in classSerializerFactory
- Parameters:
prov
- Provider that needs to be used to resolve annotation-provided serializers (but NOT for others)- Throws:
JsonMappingException
-
createKeySerializer
public JsonSerializer<Object> createKeySerializer(SerializerProvider ctxt, JavaType keyType, JsonSerializer<Object> defaultImpl) throws JsonMappingException Description copied from class:SerializerFactory
Method called to create serializer to use for serializing JSON property names (which must be output asJsonToken.FIELD_NAME
) for Map that has specified declared key type, and is for specified property (or, if property is null, as root value)- Overrides:
createKeySerializer
in classSerializerFactory
keyType
- Declared type for Map keysdefaultImpl
- Default key serializer implementation to use, if no custom ones are found (may be null)- Returns:
- Serializer to use, if factory knows it; null if not (in which case default serializer is to be used)
- Throws:
JsonMappingException
-
createKeySerializer
@Deprecated public JsonSerializer<Object> createKeySerializer(SerializationConfig config, JavaType keyType, JsonSerializer<Object> defaultImpl) Deprecated.- Specified by:
createKeySerializer
in classSerializerFactory
-
createTypeSerializer
Method called to construct a type serializer for values with given declared base type. This is called for values other than those of bean property types.- Specified by:
createTypeSerializer
in classSerializerFactory
baseType
- Declared type to use as the base type for type information serializer- Returns:
- Type serializer to use for the base type, if one is needed; null if not.
-
customSerializers
-
findSerializerByLookup
protected final JsonSerializer<?> findSerializerByLookup(JavaType type, SerializationConfig config, BeanDescription beanDesc, boolean staticTyping) Method that will use fast lookup (and identity comparison) methods to see if we know serializer to use for given type. -
findSerializerByAnnotations
protected final JsonSerializer<?> findSerializerByAnnotations(SerializerProvider prov, JavaType type, BeanDescription beanDesc) throws JsonMappingException Method called to see if one of primary per-class annotations (or related, like implementing ofJsonSerializable
) determines the serializer to use.Currently handles things like:
- If type implements
JsonSerializable
, use that - If type has
JsonValue
annotation (or equivalent), build serializer based on that property
- Throws:
JsonMappingException
- Since:
- 2.0
- If type implements
-
findSerializerByPrimaryType
protected final JsonSerializer<?> findSerializerByPrimaryType(SerializerProvider prov, JavaType type, BeanDescription beanDesc, boolean staticTyping) throws JsonMappingException Method for checking if we can determine serializer to use based on set of known primary types, checking for set of known base types (exact matches having been compared against withfindSerializerByLookup
). This does not include "secondary" interfaces, but mostly concrete or abstract base classes.- Throws:
JsonMappingException
-
findOptionalStdSerializer
protected JsonSerializer<?> findOptionalStdSerializer(SerializerProvider prov, JavaType type, BeanDescription beanDesc, boolean staticTyping) throws JsonMappingException Overridable method called after checking all other types.- Throws:
JsonMappingException
- Since:
- 2.2
-
findSerializerByAddonType
protected final JsonSerializer<?> findSerializerByAddonType(SerializationConfig config, JavaType javaType, BeanDescription beanDesc, boolean staticTyping) throws JsonMappingException Reflection-based serialized find method, which checks if given class implements one of recognized "add-on" interfaces. Add-on here means a role that is usually or can be a secondary trait: for example, bean classes may implementIterable
, but their main function is usually something else. The reason for- Throws:
JsonMappingException
-
findSerializerFromAnnotation
protected JsonSerializer<Object> findSerializerFromAnnotation(SerializerProvider prov, Annotated a) throws JsonMappingException Helper method called to check if a class or method has an annotation (@link edu.internet2.middleware.grouperClientExt.com.fasterxml.jackson.databind.annotation.JsonSerialize#using) that tells the class to use for serialization. Returns null if no such annotation found.- Throws:
JsonMappingException
-
findConvertingSerializer
protected JsonSerializer<?> findConvertingSerializer(SerializerProvider prov, Annotated a, JsonSerializer<?> ser) throws JsonMappingException Helper method that will check whether given annotated entity (usually class, but may also be a property accessor) indicates that aConverter
is to be used; and if so, to construct and return suitable serializer for it. If not, will simply return given serializer as is.- Throws:
JsonMappingException
-
findConverter
protected Converter<Object,Object> findConverter(SerializerProvider prov, Annotated a) throws JsonMappingException - Throws:
JsonMappingException
-
buildContainerSerializer
protected JsonSerializer<?> buildContainerSerializer(SerializerProvider prov, JavaType type, BeanDescription beanDesc, boolean staticTyping) throws JsonMappingException - Throws:
JsonMappingException
- Since:
- 2.1
-
buildCollectionSerializer
protected JsonSerializer<?> buildCollectionSerializer(SerializerProvider prov, CollectionType type, BeanDescription beanDesc, boolean staticTyping, TypeSerializer elementTypeSerializer, JsonSerializer<Object> elementValueSerializer) throws JsonMappingException Helper method that handles configuration details when constructing serializers forList
types that support efficient by-index access- Throws:
JsonMappingException
- Since:
- 2.1
-
isIndexedList
-
buildIndexedListSerializer
public ContainerSerializer<?> buildIndexedListSerializer(JavaType elemType, boolean staticTyping, TypeSerializer vts, JsonSerializer<Object> valueSerializer) -
buildCollectionSerializer
public ContainerSerializer<?> buildCollectionSerializer(JavaType elemType, boolean staticTyping, TypeSerializer vts, JsonSerializer<Object> valueSerializer) -
buildEnumSetSerializer
-
buildMapSerializer
protected JsonSerializer<?> buildMapSerializer(SerializerProvider prov, MapType type, BeanDescription beanDesc, boolean staticTyping, JsonSerializer<Object> keySerializer, TypeSerializer elementTypeSerializer, JsonSerializer<Object> elementValueSerializer) throws JsonMappingException Helper method that handles configuration details when constructing serializers forMap
types.- Throws:
JsonMappingException
-
_checkMapContentInclusion
protected MapSerializer _checkMapContentInclusion(SerializerProvider prov, BeanDescription beanDesc, MapSerializer mapSer) throws JsonMappingException Helper method that does figures out content inclusion value to use, if any, and construct re-configuredMapSerializer
appropriately.- Throws:
JsonMappingException
- Since:
- 2.9
-
buildMapEntrySerializer
protected JsonSerializer<?> buildMapEntrySerializer(SerializerProvider prov, JavaType type, BeanDescription beanDesc, boolean staticTyping, JavaType keyType, JavaType valueType) throws JsonMappingException - Throws:
JsonMappingException
- Since:
- 2.9
-
_findInclusionWithContent
protected JsonInclude.Value _findInclusionWithContent(SerializerProvider prov, BeanDescription beanDesc, JavaType contentType, Class<?> configType) throws JsonMappingException Helper method used for finding inclusion definitions for structured container types likeMap
s and referential types (likeAtomicReference
).- Parameters:
contentType
- Declared full content type of containerconfigType
- Raw base type under which `configOverride`, if any, needs to be defined- Throws:
JsonMappingException
-
buildArraySerializer
protected JsonSerializer<?> buildArraySerializer(SerializerProvider prov, ArrayType type, BeanDescription beanDesc, boolean staticTyping, TypeSerializer elementTypeSerializer, JsonSerializer<Object> elementValueSerializer) throws JsonMappingException Helper method that handles configuration details when constructing serializers forObject[]
(and subtypes, except for String).- Throws:
JsonMappingException
-
findReferenceSerializer
public JsonSerializer<?> findReferenceSerializer(SerializerProvider prov, ReferenceType refType, BeanDescription beanDesc, boolean staticTyping) throws JsonMappingException - Throws:
JsonMappingException
- Since:
- 2.7
-
buildAtomicReferenceSerializer
protected JsonSerializer<?> buildAtomicReferenceSerializer(SerializerProvider prov, ReferenceType refType, BeanDescription beanDesc, boolean staticTyping, TypeSerializer contentTypeSerializer, JsonSerializer<Object> contentSerializer) throws JsonMappingException - Throws:
JsonMappingException
-
buildIteratorSerializer
protected JsonSerializer<?> buildIteratorSerializer(SerializationConfig config, JavaType type, BeanDescription beanDesc, boolean staticTyping, JavaType valueType) throws JsonMappingException - Throws:
JsonMappingException
- Since:
- 2.5
-
buildIterableSerializer
protected JsonSerializer<?> buildIterableSerializer(SerializationConfig config, JavaType type, BeanDescription beanDesc, boolean staticTyping, JavaType valueType) throws JsonMappingException - Throws:
JsonMappingException
- Since:
- 2.5
-
buildEnumSerializer
protected JsonSerializer<?> buildEnumSerializer(SerializationConfig config, JavaType type, BeanDescription beanDesc) throws JsonMappingException - Throws:
JsonMappingException
-
_findKeySerializer
protected JsonSerializer<Object> _findKeySerializer(SerializerProvider prov, Annotated a) throws JsonMappingException Helper method called to try to find whether there is an annotation in the class that indicates key serializer to use. If so, will try to instantiate key serializer and return it; otherwise returns null.- Throws:
JsonMappingException
-
_findContentSerializer
protected JsonSerializer<Object> _findContentSerializer(SerializerProvider prov, Annotated a) throws JsonMappingException Helper method called to try to find whether there is an annotation in the class that indicates content ("value") serializer to use. If so, will try to instantiate value serializer and return it; otherwise returns null.- Throws:
JsonMappingException
-
findFilterId
Method called to find filter that is configured to be used with bean serializer being built, if any. -
usesStaticTyping
protected boolean usesStaticTyping(SerializationConfig config, BeanDescription beanDesc, TypeSerializer typeSer) Helper method to check whether global settings and/or class annotations for the bean class indicate that static typing (declared types) should be used for properties. (instead of dynamic runtime types).- Since:
- 2.1 (earlier had variant with additional 'property' parameter)
-