org.codehaus.jackson.map.deser
Class CustomDeserializerFactory

java.lang.Object
  extended by org.codehaus.jackson.map.DeserializerFactory
      extended by org.codehaus.jackson.map.deser.BasicDeserializerFactory
          extended by org.codehaus.jackson.map.deser.BeanDeserializerFactory
              extended by org.codehaus.jackson.map.deser.CustomDeserializerFactory

public class CustomDeserializerFactory
extends BeanDeserializerFactory

Deserializer factory implementation that allows for configuring mapping between types and deserializers to use, by using multiple types of overrides. Existing mappings established by BeanDeserializerFactory (and its super class, BasicDeserializerFactory) are used if no overrides are defined.

Unlike base deserializer factories, this factory is stateful because of configuration settings. It is thread-safe, however, as long as all configuration as done before using the factory -- a single instance can be shared between providers and mappers.

Configurations currently available are:

The way custom deserializer factory instances are hooked to ObjectMapper is usually by constructing an instance of DeserializerProvider (most commonly StdDeserializerProvider) with custom deserializer factory, and setting ObjectMapper to use it.


Field Summary
protected  HashMap<ClassKey,JsonDeserializer<Object>> _directClassMappings
          Direct mappings that are used for exact class and interface type matches.
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".
 
Fields inherited from class org.codehaus.jackson.map.deser.BeanDeserializerFactory
instance
 
Fields inherited from class org.codehaus.jackson.map.deser.BasicDeserializerFactory
_arrayDeserializers, optionalHandlers
 
Constructor Summary
CustomDeserializerFactory()
           
 
Method Summary
 void addMixInAnnotationMapping(Class<?> destinationClass, Class<?> classWithMixIns)
          Method to use for adding mix-in annotations that Class classWithMixIns contains into class destinationClass.
<T> void
addSpecificMapping(Class<T> forClass, JsonDeserializer<? extends T> deser)
          Method used to add a mapping for specific type -- and only that type -- to use specified deserializer.
 JsonDeserializer<?> createArrayDeserializer(DeserializationConfig config, ArrayType type, DeserializerProvider p)
          Method called to create (or, for completely immutable deserializers, reuse) a deserializer that can convert JSON content into values of specified Java type.
 JsonDeserializer<Object> createBeanDeserializer(DeserializationConfig config, JavaType type, DeserializerProvider p)
          Method that DeserializerProviders call to create a new deserializer for types other than Collections, Maps, arrays and enums.
 JsonDeserializer<?> createEnumDeserializer(DeserializationConfig config, Class<?> enumClass, DeserializerProvider p)
          Factory method for constructing serializers of Enum types.
 
Methods inherited from class org.codehaus.jackson.map.deser.BeanDeserializerFactory
_addDeserializerConstructors, _addDeserializerFactoryMethods, addBeanProps, addDeserializerCreators, addReferenceProperties, buildBeanDeserializer, buildThrowableDeserializer, constructAnySetter, constructBeanDeserializerInstance, constructSettableProperty, constructSettableProperty, constructSetterlessProperty, constructThrowableDeserializerInstance, isPotentialBeanType
 
Methods inherited from class org.codehaus.jackson.map.deser.BasicDeserializerFactory
constructCreatorProperty, constructEnumResolver, createCollectionDeserializer, createMapDeserializer, createTreeDeserializer, findDeserializerFromAnnotation, findPropertyContentTypeDeserializer, findPropertyTypeDeserializer, findTypeDeserializer, modifyTypeByAnnotation, resolveType
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_directClassMappings

protected HashMap<ClassKey,JsonDeserializer<Object>> _directClassMappings
Direct mappings that are used for exact class and interface type matches.


_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
Constructor Detail

CustomDeserializerFactory

public CustomDeserializerFactory()
Method Detail

addSpecificMapping

public <T> void addSpecificMapping(Class<T> forClass,
                                   JsonDeserializer<? extends T> deser)
Method used to add a mapping for specific type -- and only that type -- to use specified deserializer. This means that binding is not used for sub-types.

Note that both class and interfaces can be mapped, since the type is derived from method declarations; and hence may be abstract types and interfaces. This is different from custom serialization where only class types can be directly mapped.

Parameters:
forClass - Class to deserialize using specific deserializer.
deser - Deserializer to use for the class. Declared type for deserializer may be more specific (sub-class) than declared class to map, since that will still be compatible (deserializer produces sub-class which is assignable to field/method)

addMixInAnnotationMapping

public void addMixInAnnotationMapping(Class<?> destinationClass,
                                      Class<?> classWithMixIns)
Method to use for adding mix-in annotations that Class classWithMixIns contains into class destinationClass. Mixing in is done when introspecting class annotations and properties. Annotations from classWithMixIns (and its supertypes) will override anything destinationClass (and its super-types) has already.

Parameters:
destinationClass - Class to modify by adding annotations
classWithMixIns - Class that contains annotations to add
Since:
1.2

createBeanDeserializer

public JsonDeserializer<Object> createBeanDeserializer(DeserializationConfig config,
                                                       JavaType type,
                                                       DeserializerProvider p)
                                                throws JsonMappingException
Description copied from class: BeanDeserializerFactory
Method that DeserializerProviders call to create a new deserializer for types other than Collections, Maps, arrays and enums.

Overrides:
createBeanDeserializer in class BeanDeserializerFactory
type - Type to be deserialized
p - Provider that can be called to create deserializers for contained member types
Throws:
JsonMappingException

createArrayDeserializer

public JsonDeserializer<?> createArrayDeserializer(DeserializationConfig config,
                                                   ArrayType type,
                                                   DeserializerProvider p)
                                            throws JsonMappingException
Description copied from class: DeserializerFactory
Method called to create (or, for completely immutable deserializers, reuse) a deserializer that can convert JSON content into values of specified Java type.

Overrides:
createArrayDeserializer in class BasicDeserializerFactory
type - Type to be deserialized
p - Provider that can be called to create deserializers for contained member types
Throws:
JsonMappingException

createEnumDeserializer

public JsonDeserializer<?> createEnumDeserializer(DeserializationConfig config,
                                                  Class<?> enumClass,
                                                  DeserializerProvider p)
                                           throws JsonMappingException
Description copied from class: BasicDeserializerFactory
Factory method for constructing serializers of Enum types.

Overrides:
createEnumDeserializer in class BasicDeserializerFactory
Throws:
JsonMappingException