org.codehaus.jackson.map
Class DeserializationConfig

java.lang.Object
  extended by org.codehaus.jackson.map.DeserializationConfig
All Implemented Interfaces:
ClassIntrospector.MixInResolver, MapperConfig<DeserializationConfig>

public class DeserializationConfig
extends Object
implements MapperConfig<DeserializationConfig>

Object that contains baseline configuration for deserialization process. An instance is owned by ObjectMapper, which makes a copy that is passed during serialization process to DeserializerProvider and DeserializerFactory.

Note: although configuration settings can be changed at any time (for factories and instances), they are not guaranteed to have effect if called after constructing relevant mapper or deserializer instance. This because some objects may be configured, constructed and cached first time they are needed.


Nested Class Summary
static class DeserializationConfig.Feature
          Enumeration that defines togglable features that guide the serialization feature.
 
Field Summary
protected  AbstractTypeResolver _abstractTypeResolver
          To support on-the-fly class generation for interface and abstract classes it is possible to register "abstract type resolver".
protected  AnnotationIntrospector _annotationIntrospector
          Introspector used for accessing annotation value based configuration.
protected  ClassIntrospector<? extends BeanDescription> _classIntrospector
          Introspector used to figure out Bean properties needed for bean serialization and deserialization.
protected  DateFormat _dateFormat
          Custom date format to use for de-serialization.
protected  int _featureFlags
          Bit set that contains all enabled features
protected  HashMap<ClassKey,Class<?>> _mixInAnnotations
          Mapping that defines how to apply mix-in annotations: key is the type to received additional annotations, and value is the type that has annotations to "mix in".
protected  boolean _mixInAnnotationsShared
          Flag used to detect when a copy if mix-in annotations is needed: set when current copy is shared, cleared when a fresh copy is made
protected  JsonNodeFactory _nodeFactory
          Factory used for constructing JsonNode instances.
protected  LinkedNode<DeserializationProblemHandler> _problemHandlers
          Linked list that contains all registered problem handlers.
protected  SubtypeResolver _subtypeResolver
          Registered concrete subtypes that can be used instead of (or in addition to) ones declared using annotations.
protected  TypeResolverBuilder<?> _typer
          Type information handler used for "untyped" values (ones declared to have type Object.class)
protected  VisibilityChecker<?> _visibilityChecker
          Object used for determining whether specific property elements (method, constructors, fields) can be auto-detected based on their visibility (access modifiers).
protected static DateFormat DEFAULT_DATE_FORMAT
           
protected static int DEFAULT_FEATURE_FLAGS
          Bitfield (set of flags) of all Features that are enabled by default.
 
Constructor Summary
  DeserializationConfig(ClassIntrospector<? extends BeanDescription> intr, AnnotationIntrospector annIntr, VisibilityChecker<?> vc, SubtypeResolver subtypeResolver)
           
protected DeserializationConfig(DeserializationConfig src, HashMap<ClassKey,Class<?>> mixins, TypeResolverBuilder<?> typer, VisibilityChecker<?> vc, SubtypeResolver subtypeResolver)
           
 
Method Summary
 void addHandler(DeserializationProblemHandler h)
          Method that can be used to add a handler that can (try to) resolve non-fatal deserialization problems.
 void addMixInAnnotations(Class<?> target, Class<?> mixinSource)
          Method to use for adding mix-in annotations to use for augmenting specified class or interface.
 void appendAnnotationIntrospector(AnnotationIntrospector introspector)
          Method for registering specified AnnotationIntrospector as the lowest priority introspector, chained with existing introspector(s) and called as fallback for cases not otherwise handled.
 void clearHandlers()
          Method for removing all configuring problem handlers; usually done to replace existing handler(s) with different one(s)
 DeserializationConfig createUnshared(JsonNodeFactory nf)
          Alternative "copy factory" that creates an unshared copy that uses different node factory than this instance.
 DeserializationConfig createUnshared(TypeResolverBuilder<?> typer, VisibilityChecker<?> vc, SubtypeResolver subtypeResolver)
          Method that is called to create a non-shared copy of the configuration to be used for a deserialization operation.
 void disable(DeserializationConfig.Feature f)
          Method for disabling specified feature.
 void enable(DeserializationConfig.Feature f)
          Method for enabling specified feature.
 Class<?> findMixInClassFor(Class<?> cls)
          Method that will check if there are "mix-in" classes (with mix-in annotations) for given class
 void fromAnnotations(Class<?> cls)
          Method that checks class annotations that the argument Object has, and modifies settings of this configuration object accordingly, similar to how those annotations would affect actual value classes annotated with them, but with global scope.
 AbstractTypeResolver getAbstractTypeResolver()
          Method for accessing AbstractTypeResolver configured, if any (no default) used for resolving abstract types into concrete types (either by mapping or materializing new classes).
 AnnotationIntrospector getAnnotationIntrospector()
          Method for getting AnnotationIntrospector configured to introspect annotation values used for configuration.
 Base64Variant getBase64Variant()
          Method called during deserialization if Base64 encoded content needs to be decoded.
 DateFormat getDateFormat()
          Method for accessing currently configured (textual) date format that will be used for reading or writing date values (in case of writing, only if textual output is configured; not if dates are to be serialized as time stamps).
 TypeResolverBuilder<?> getDefaultTyper(JavaType baseType)
          Method called to locate a type info handler for types that do not have one explicitly declared via annotations (or other configuration).
 VisibilityChecker<?> getDefaultVisibilityChecker()
          Accessor for object used for determining whether specific property elements (method, constructors, fields) can be auto-detected based on their visibility (access modifiers).
 JsonNodeFactory getNodeFactory()
           
 LinkedNode<DeserializationProblemHandler> getProblemHandlers()
          Method for getting head of the problem handler chain.
 SubtypeResolver getSubtypeResolver()
          Accessor for object used for finding out all reachable subtypes for supertypes; needed when a logical type name is used instead of class name (or custom scheme).
 void insertAnnotationIntrospector(AnnotationIntrospector introspector)
          Method for registering specified AnnotationIntrospector as the highest priority introspector (will be chained with existing introspector(s) which will be used as fallbacks for cases this introspector does not handle)
<T extends BeanDescription>
T
introspect(JavaType type)
          Method that will introspect full bean properties for the purpose of building a bean deserializer
<T extends BeanDescription>
T
introspectClassAnnotations(Class<?> cls)
          Accessor for getting bean description that only contains class annotations: useful if no getter/setter/creator information is needed.
<T extends BeanDescription>
T
introspectDirectClassAnnotations(Class<?> cls)
          Accessor for getting bean description that only contains immediate class annotations: ones from the class, and its direct mix-in, if any, but not from super types.
<T extends BeanDescription>
T
introspectForCreation(JavaType type)
          Method that will introspect subset of bean properties needed to construct bean instance.
 boolean isEnabled(DeserializationConfig.Feature f)
          Method for checking whether given feature is enabled or not
 void set(DeserializationConfig.Feature f, boolean state)
          Method for enabling or disabling specified feature.
 void setAbstractTypeResolver(AbstractTypeResolver atr)
           
 void setAnnotationIntrospector(AnnotationIntrospector introspector)
          Method for replacing existing annotation introspector(s) with specified introspector.
 void setDateFormat(DateFormat df)
          Method that will set the textual deserialization to use for deserializing Dates (and Calendars).
 void setIntrospector(ClassIntrospector<? extends BeanDescription> i)
          Method for replacing existing ClassIntrospector with specified replacement.
 void setMixInAnnotations(Map<Class<?>,Class<?>> sourceMixins)
          Method to use for defining mix-in annotations to use for augmenting annotations that deserializable classes have.
 void setNodeFactory(JsonNodeFactory nf)
           
 void setSubtypeResolver(SubtypeResolver r)
          Method for overriding subtype resolver used.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DEFAULT_FEATURE_FLAGS

protected static final int DEFAULT_FEATURE_FLAGS
Bitfield (set of flags) of all Features that are enabled by default.


DEFAULT_DATE_FORMAT

protected static final DateFormat DEFAULT_DATE_FORMAT

_classIntrospector

protected ClassIntrospector<? extends BeanDescription> _classIntrospector
Introspector used to figure out Bean properties needed for bean serialization and deserialization. Overridable so that it is possible to change low-level details of introspection, like adding new annotation types.


_annotationIntrospector

protected AnnotationIntrospector _annotationIntrospector
Introspector used for accessing annotation value based configuration.


_featureFlags

protected int _featureFlags
Bit set that contains all enabled features


_problemHandlers

protected LinkedNode<DeserializationProblemHandler> _problemHandlers
Linked list that contains all registered problem handlers. Implementation as front-added linked list allows for sharing of the list (tail) without copying the list.


_dateFormat

protected DateFormat _dateFormat
Custom date format to use for de-serialization. If specified, will be used instead of StdDateFormat.

Note that the configured format object will be cloned once per deserialization process (first time it is needed)


_mixInAnnotations

protected HashMap<ClassKey,Class<?>> _mixInAnnotations
Mapping that defines how to apply mix-in annotations: key is the type to received additional annotations, and value is the type that has annotations to "mix in".

Annotations associated with the value classes will be used to override annotations of the key class, associated with the same field or method. They can be further masked by sub-classes: you can think of it as injecting annotations between the target class and its sub-classes (or interfaces)

Since:
1.2

_mixInAnnotationsShared

protected boolean _mixInAnnotationsShared
Flag used to detect when a copy if mix-in annotations is needed: set when current copy is shared, cleared when a fresh copy is made

Since:
1.2

_typer

protected final TypeResolverBuilder<?> _typer
Type information handler used for "untyped" values (ones declared to have type Object.class)

Since:
1.5

_visibilityChecker

protected VisibilityChecker<?> _visibilityChecker
Object used for determining whether specific property elements (method, constructors, fields) can be auto-detected based on their visibility (access modifiers). Can be changed to allow different minimum visibility levels for auto-detection. Note that this is the global handler; individual types (classes) can further override active checker used (using JsonAutoDetect annotation)

Since:
1.5

_subtypeResolver

protected SubtypeResolver _subtypeResolver
Registered concrete subtypes that can be used instead of (or in addition to) ones declared using annotations.

Since:
1.6

_abstractTypeResolver

protected AbstractTypeResolver _abstractTypeResolver
To support on-the-fly class generation for interface and abstract classes it is possible to register "abstract type resolver".

Since:
1.6

_nodeFactory

protected JsonNodeFactory _nodeFactory
Factory used for constructing JsonNode instances.

Since:
1.6
Constructor Detail

DeserializationConfig

public DeserializationConfig(ClassIntrospector<? extends BeanDescription> intr,
                             AnnotationIntrospector annIntr,
                             VisibilityChecker<?> vc,
                             SubtypeResolver subtypeResolver)

DeserializationConfig

protected DeserializationConfig(DeserializationConfig src,
                                HashMap<ClassKey,Class<?>> mixins,
                                TypeResolverBuilder<?> typer,
                                VisibilityChecker<?> vc,
                                SubtypeResolver subtypeResolver)
Method Detail

enable

public void enable(DeserializationConfig.Feature f)
Method for enabling specified feature.


disable

public void disable(DeserializationConfig.Feature f)
Method for disabling specified feature.


set

public void set(DeserializationConfig.Feature f,
                boolean state)
Method for enabling or disabling specified feature.


isEnabled

public final boolean isEnabled(DeserializationConfig.Feature f)
Method for checking whether given feature is enabled or not


fromAnnotations

public void fromAnnotations(Class<?> cls)
Method that checks class annotations that the argument Object has, and modifies settings of this configuration object accordingly, similar to how those annotations would affect actual value classes annotated with them, but with global scope. Note that not all annotations have global significance, and thus only subset of Jackson annotations will have any effect.

Ones that are known to have effect are:

Specified by:
fromAnnotations in interface MapperConfig<DeserializationConfig>
Parameters:
cls - Class of which class annotations to use for changing configuration settings

createUnshared

public DeserializationConfig createUnshared(TypeResolverBuilder<?> typer,
                                            VisibilityChecker<?> vc,
                                            SubtypeResolver subtypeResolver)
Method that is called to create a non-shared copy of the configuration to be used for a deserialization operation. Note that if sub-classing and sub-class has additional instance methods, this method must be overridden to produce proper sub-class instance.

Specified by:
createUnshared in interface MapperConfig<DeserializationConfig>

createUnshared

public DeserializationConfig createUnshared(JsonNodeFactory nf)
Alternative "copy factory" that creates an unshared copy that uses different node factory than this instance.

Since:
1.6

setIntrospector

public void setIntrospector(ClassIntrospector<? extends BeanDescription> i)
Description copied from interface: MapperConfig
Method for replacing existing ClassIntrospector with specified replacement.

Specified by:
setIntrospector in interface MapperConfig<DeserializationConfig>

getAnnotationIntrospector

public AnnotationIntrospector getAnnotationIntrospector()
Method for getting AnnotationIntrospector configured to introspect annotation values used for configuration.

Specified by:
getAnnotationIntrospector in interface MapperConfig<DeserializationConfig>

setAnnotationIntrospector

public void setAnnotationIntrospector(AnnotationIntrospector introspector)
Description copied from interface: MapperConfig
Method for replacing existing annotation introspector(s) with specified introspector.

Specified by:
setAnnotationIntrospector in interface MapperConfig<DeserializationConfig>

insertAnnotationIntrospector

public void insertAnnotationIntrospector(AnnotationIntrospector introspector)
Description copied from interface: MapperConfig
Method for registering specified AnnotationIntrospector as the highest priority introspector (will be chained with existing introspector(s) which will be used as fallbacks for cases this introspector does not handle)

Specified by:
insertAnnotationIntrospector in interface MapperConfig<DeserializationConfig>
Parameters:
introspector - Annotation introspector to register.

appendAnnotationIntrospector

public void appendAnnotationIntrospector(AnnotationIntrospector introspector)
Description copied from interface: MapperConfig
Method for registering specified AnnotationIntrospector as the lowest priority introspector, chained with existing introspector(s) and called as fallback for cases not otherwise handled.

Specified by:
appendAnnotationIntrospector in interface MapperConfig<DeserializationConfig>
Parameters:
introspector - Annotation introspector to register.

setMixInAnnotations

public void setMixInAnnotations(Map<Class<?>,Class<?>> sourceMixins)
Method to use for defining mix-in annotations to use for augmenting annotations that deserializable classes have. Mixing in is done when introspecting class annotations and properties. Map passed contains keys that are target classes (ones to augment with new annotation overrides), and values that are source classes (have annotations to use for augmentation). Annotations from source classes (and their supertypes) will override annotations that target classes (and their super-types) have.

Note: a copy of argument Map is created; the original Map is not modified or retained by this config object.

Specified by:
setMixInAnnotations in interface MapperConfig<DeserializationConfig>
Since:
1.2

addMixInAnnotations

public void addMixInAnnotations(Class<?> target,
                                Class<?> mixinSource)
Description copied from interface: MapperConfig
Method to use for adding mix-in annotations to use for augmenting specified class or interface. All annotations from mixinSource are taken to override annotations that target (or its supertypes) has.

Specified by:
addMixInAnnotations in interface MapperConfig<DeserializationConfig>
Parameters:
target - Class (or interface) whose annotations to effectively override
mixinSource - Class (or interface) whose annotations are to be "added" to target's annotations, overriding as necessary

findMixInClassFor

public Class<?> findMixInClassFor(Class<?> cls)
Description copied from interface: MapperConfig
Method that will check if there are "mix-in" classes (with mix-in annotations) for given class

Specified by:
findMixInClassFor in interface ClassIntrospector.MixInResolver
Specified by:
findMixInClassFor in interface MapperConfig<DeserializationConfig>
Since:
1.2

getDateFormat

public DateFormat getDateFormat()
Description copied from interface: MapperConfig
Method for accessing currently configured (textual) date format that will be used for reading or writing date values (in case of writing, only if textual output is configured; not if dates are to be serialized as time stamps).

Note that typically DateFormat instances are not thread-safe (at least ones provided by JDK): this means that calling code should clone format instance before using it.

This method is usually only called by framework itself, since there are convenience methods available via DeserializationContext and SerializerProvider that take care of cloning and thread-safe reuse.

Specified by:
getDateFormat in interface MapperConfig<DeserializationConfig>

setDateFormat

public void setDateFormat(DateFormat df)
Method that will set the textual deserialization to use for deserializing Dates (and Calendars). If null is passed, will use StdDateFormat.

Specified by:
setDateFormat in interface MapperConfig<DeserializationConfig>

getDefaultVisibilityChecker

public VisibilityChecker<?> getDefaultVisibilityChecker()
Description copied from interface: MapperConfig
Accessor for object used for determining whether specific property elements (method, constructors, fields) can be auto-detected based on their visibility (access modifiers). Can be changed to allow different minimum visibility levels for auto-detection. Note that this is the global handler; individual types (classes) can further override active checker used (using JsonAutoDetect annotation)

Specified by:
getDefaultVisibilityChecker in interface MapperConfig<DeserializationConfig>

getDefaultTyper

public TypeResolverBuilder<?> getDefaultTyper(JavaType baseType)
Description copied from interface: MapperConfig
Method called to locate a type info handler for types that do not have one explicitly declared via annotations (or other configuration). If such default handler is configured, it is returned; otherwise null is returned.

Specified by:
getDefaultTyper in interface MapperConfig<DeserializationConfig>

getSubtypeResolver

public SubtypeResolver getSubtypeResolver()
Description copied from interface: MapperConfig
Accessor for object used for finding out all reachable subtypes for supertypes; needed when a logical type name is used instead of class name (or custom scheme).

Specified by:
getSubtypeResolver in interface MapperConfig<DeserializationConfig>
Since:
1.6

setSubtypeResolver

public void setSubtypeResolver(SubtypeResolver r)
Description copied from interface: MapperConfig
Method for overriding subtype resolver used.

Specified by:
setSubtypeResolver in interface MapperConfig<DeserializationConfig>
Since:
1.6

introspectClassAnnotations

public <T extends BeanDescription> T introspectClassAnnotations(Class<?> cls)
Accessor for getting bean description that only contains class annotations: useful if no getter/setter/creator information is needed.

Note: part of MapperConfig since 1.7

Specified by:
introspectClassAnnotations in interface MapperConfig<DeserializationConfig>

introspectDirectClassAnnotations

public <T extends BeanDescription> T introspectDirectClassAnnotations(Class<?> cls)
Accessor for getting bean description that only contains immediate class annotations: ones from the class, and its direct mix-in, if any, but not from super types.

Note: part of MapperConfig since 1.7

Specified by:
introspectDirectClassAnnotations in interface MapperConfig<DeserializationConfig>

getProblemHandlers

public LinkedNode<DeserializationProblemHandler> getProblemHandlers()
Method for getting head of the problem handler chain. May be null, if no handlers have been added.


addHandler

public void addHandler(DeserializationProblemHandler h)
Method that can be used to add a handler that can (try to) resolve non-fatal deserialization problems.


clearHandlers

public void clearHandlers()
Method for removing all configuring problem handlers; usually done to replace existing handler(s) with different one(s)

Since:
1.1

introspect

public <T extends BeanDescription> T introspect(JavaType type)
Method that will introspect full bean properties for the purpose of building a bean deserializer

Parameters:
type - Type of class to be introspected

introspectForCreation

public <T extends BeanDescription> T introspectForCreation(JavaType type)
Method that will introspect subset of bean properties needed to construct bean instance.


getAbstractTypeResolver

public AbstractTypeResolver getAbstractTypeResolver()
Method for accessing AbstractTypeResolver configured, if any (no default) used for resolving abstract types into concrete types (either by mapping or materializing new classes).

Since:
1.6

setAbstractTypeResolver

public void setAbstractTypeResolver(AbstractTypeResolver atr)
Since:
1.6

getBase64Variant

public Base64Variant getBase64Variant()
Method called during deserialization if Base64 encoded content needs to be decoded. Default version just returns default Jackson uses, which is modified-mime which does not add linefeeds (because those would have to be escaped in Json strings).


setNodeFactory

public void setNodeFactory(JsonNodeFactory nf)
Since:
1.6

getNodeFactory

public final JsonNodeFactory getNodeFactory()
Since:
1.6