org.codehaus.jackson.map.ser
Class StdSerializerProvider

java.lang.Object
  extended by org.codehaus.jackson.map.SerializerProvider
      extended by org.codehaus.jackson.map.ser.StdSerializerProvider

public class StdSerializerProvider
extends SerializerProvider

Default SerializerProvider implementation. Handles caching aspects of serializer handling; all construction details are delegated to SerializerFactory instance.

One note about implementation: the main instance constructed will be so-called "blueprint" object, and will NOT be used during actual serialization. Rather, an "instance" instance is created so that state can be carried along, as well as to avoid synchronization during serializer access. Because of this, if sub-classing, one must override method createInstance(org.codehaus.jackson.map.SerializationConfig, org.codehaus.jackson.map.SerializerFactory): if this is not done, an exception will get thrown as base class verifies that the instance has same class as the blueprint (instance.getClass() == blueprint.getClass()). Check is done to prevent weird bugs that would otherwise occur.


Field Summary
protected  DateFormat _dateFormat
          Lazily acquired and instantiated formatter object: initialized first time it is needed, reused afterwards.
protected  JsonSerializer<Object> _keySerializer
          Serializer used to output non-null keys of Maps (which will get output as Json Objects).
protected  ReadOnlyClassToSerializerMap _knownSerializers
          For fast lookups, we will have a local non-shared read-only map that contains serializers previously fetched.
protected  JsonSerializer<Object> _nullKeySerializer
          Serializer used to (try to) output a null key, due to an entry of Map having null key.
protected  JsonSerializer<Object> _nullValueSerializer
          Serializer used to output a null value.
protected  SerializerCache _serializerCache
           
protected  SerializerFactory _serializerFactory
           
protected  JsonSerializer<Object> _unknownTypeSerializer
          Serializer that gets called for values of types for which no serializers can be constructed.
static JsonSerializer<Object> DEFAULT_KEY_SERIALIZER
           
static JsonSerializer<Object> DEFAULT_NULL_KEY_SERIALIZER
           
static JsonSerializer<Object> DEFAULT_UNKNOWN_SERIALIZER
           
 
Fields inherited from class org.codehaus.jackson.map.SerializerProvider
_config
 
Constructor Summary
  StdSerializerProvider()
          Constructor for creating master (or "blue-print") provider object, which is only used as the template for constructing per-binding instances.
protected StdSerializerProvider(SerializationConfig config, StdSerializerProvider src, SerializerFactory f)
          "Copy-constructor", used from createInstance(org.codehaus.jackson.map.SerializationConfig, org.codehaus.jackson.map.SerializerFactory) (or by sub-classes)
 
Method Summary
protected  JsonSerializer<Object> _createAndCacheSerializer(Class<?> type)
          Method that will try to construct a value aerializer; and if one is succesfully created, cache it for reuse.
protected  JsonSerializer<Object> _createSerializer(Class<?> type)
           
protected  JsonSerializer<Object> _findExplicitSerializer(Class<?> type)
          Method that will try to find a serializer, either from cache or by constructing one; but will not return an "unknown" serializer if this can not be done but rather returns null.
protected  void _resolveSerializer(ResolvableSerializer ser)
           
protected  void _serializeValue(JsonGenerator jgen, Object value)
          Method called on the actual non-blueprint provider instance object, to kick off the serialization.
protected  StdSerializerProvider createInstance(SerializationConfig config, SerializerFactory jsf)
          Overridable method, used to create a non-blueprint instances from the blueprint.
 void defaultSerializeDateValue(Date date, JsonGenerator jgen)
          Method that will handle serialization of Date(-like) values, using SerializationConfig settings to determine expected serialization behavior.
 void defaultSerializeDateValue(long timestamp, JsonGenerator jgen)
          Method that will handle serialization of Date(-like) values, using SerializationConfig settings to determine expected serialization behavior.
 JsonSerializer<Object> findValueSerializer(Class<?> type)
          Method called to get hold of a serializer for a value of given type; or if no such serializer can be found, a default handler (which may do a best-effort generic serialization or just simply throw an exception when invoked).
 JsonSchema generateJsonSchema(Class<?> type, SerializationConfig config, SerializerFactory jsf)
          Generate Json-schema for given type.
 JsonSerializer<Object> getKeySerializer()
          Method called to get the serializer to use for serializing non-null Map keys.
 JsonSerializer<Object> getNullKeySerializer()
          Method called to get the serializer to use for serializing Map keys that are nulls: this is needed since Json does not allow any non-String value as key, including null.
 JsonSerializer<Object> getNullValueSerializer()
          Method called to get the serializer to use for serializing values (root level, Array members or List field values) that are nulls.
 JsonSerializer<Object> getUnknownTypeSerializer(Class<?> unknownType)
          Method called to get the serializer to use if provider can not determine an actual type-specific serializer to use; typically when none of SerializerFactory instances are able to construct a serializer.
 boolean hasSerializerFor(SerializationConfig config, Class<?> cls, SerializerFactory jsf)
          Method that can be called to see if this serializer provider can find a serializer for an instance of given class.
 void serializeValue(SerializationConfig config, JsonGenerator jgen, Object value, SerializerFactory jsf)
          The method to be called by ObjectMapper to execute recursive serialization, using serializers that this provider has access to.
 void setKeySerializer(JsonSerializer<Object> ks)
           
 void setNullKeySerializer(JsonSerializer<Object> nks)
           
 void setNullValueSerializer(JsonSerializer<Object> nvs)
           
 
Methods inherited from class org.codehaus.jackson.map.SerializerProvider
defaultSerializeField, defaultSerializeValue, getConfig, isEnabled
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DEFAULT_NULL_KEY_SERIALIZER

public static final JsonSerializer<Object> DEFAULT_NULL_KEY_SERIALIZER

DEFAULT_KEY_SERIALIZER

public static final JsonSerializer<Object> DEFAULT_KEY_SERIALIZER

DEFAULT_UNKNOWN_SERIALIZER

public static final JsonSerializer<Object> DEFAULT_UNKNOWN_SERIALIZER

_serializerFactory

protected final SerializerFactory _serializerFactory

_serializerCache

protected final SerializerCache _serializerCache

_unknownTypeSerializer

protected JsonSerializer<Object> _unknownTypeSerializer
Serializer that gets called for values of types for which no serializers can be constructed.

The default serializer will simply thrown an exception; a possible alternative that can be used would be ToStringSerializer.


_keySerializer

protected JsonSerializer<Object> _keySerializer
Serializer used to output non-null keys of Maps (which will get output as Json Objects).


_nullValueSerializer

protected JsonSerializer<Object> _nullValueSerializer
Serializer used to output a null value. Default implementation writes nulls using JsonGenerator.writeNull().


_nullKeySerializer

protected JsonSerializer<Object> _nullKeySerializer
Serializer used to (try to) output a null key, due to an entry of Map having null key. The default implementation will throw an exception if this happens; alternative implementation (like one that would write an Empty String) can be defined.


_knownSerializers

protected final ReadOnlyClassToSerializerMap _knownSerializers
For fast lookups, we will have a local non-shared read-only map that contains serializers previously fetched.


_dateFormat

protected DateFormat _dateFormat
Lazily acquired and instantiated formatter object: initialized first time it is needed, reused afterwards. Used via instances (not blueprints), so that access need not be thread-safe.

Constructor Detail

StdSerializerProvider

public StdSerializerProvider()
Constructor for creating master (or "blue-print") provider object, which is only used as the template for constructing per-binding instances.


StdSerializerProvider

protected StdSerializerProvider(SerializationConfig config,
                                StdSerializerProvider src,
                                SerializerFactory f)
"Copy-constructor", used from createInstance(org.codehaus.jackson.map.SerializationConfig, org.codehaus.jackson.map.SerializerFactory) (or by sub-classes)

Parameters:
src - Blueprint object used as the baseline for this instance
Method Detail

createInstance

protected StdSerializerProvider createInstance(SerializationConfig config,
                                               SerializerFactory jsf)
Overridable method, used to create a non-blueprint instances from the blueprint. This is needed to retain state during serialization.


serializeValue

public final void serializeValue(SerializationConfig config,
                                 JsonGenerator jgen,
                                 Object value,
                                 SerializerFactory jsf)
                          throws IOException,
                                 JsonGenerationException
Description copied from class: SerializerProvider
The method to be called by ObjectMapper to execute recursive serialization, using serializers that this provider has access to.

Specified by:
serializeValue in class SerializerProvider
jsf - Underlying factory object used for creating serializers as needed
Throws:
IOException
JsonGenerationException

generateJsonSchema

public JsonSchema generateJsonSchema(Class<?> type,
                                     SerializationConfig config,
                                     SerializerFactory jsf)
                              throws JsonMappingException
Description copied from class: SerializerProvider
Generate Json-schema for given type.

Specified by:
generateJsonSchema in class SerializerProvider
Parameters:
type - The type for which to generate schema
Throws:
JsonMappingException

hasSerializerFor

public boolean hasSerializerFor(SerializationConfig config,
                                Class<?> cls,
                                SerializerFactory jsf)
Description copied from class: SerializerProvider
Method that can be called to see if this serializer provider can find a serializer for an instance of given class.

Note that no Exceptions are thrown, including unchecked ones: implementations are to swallow exceptions if necessary.

Specified by:
hasSerializerFor in class SerializerProvider

_serializeValue

protected void _serializeValue(JsonGenerator jgen,
                               Object value)
                        throws IOException,
                               JsonProcessingException
Method called on the actual non-blueprint provider instance object, to kick off the serialization.

Throws:
IOException
JsonProcessingException

setKeySerializer

public void setKeySerializer(JsonSerializer<Object> ks)

setNullValueSerializer

public void setNullValueSerializer(JsonSerializer<Object> nvs)

setNullKeySerializer

public void setNullKeySerializer(JsonSerializer<Object> nks)

findValueSerializer

public JsonSerializer<Object> findValueSerializer(Class<?> type)
                                           throws JsonMappingException
Description copied from class: SerializerProvider
Method called to get hold of a serializer for a value of given type; or if no such serializer can be found, a default handler (which may do a best-effort generic serialization or just simply throw an exception when invoked).

Note: this method is only called for non-null values; not for keys or null values. For these, check out other accessor methods.

Specified by:
findValueSerializer in class SerializerProvider
Throws:
JsonMappingException - if there are fatal problems with accessing suitable serializer; including that of not finding any serializer

getKeySerializer

public JsonSerializer<Object> getKeySerializer()
Description copied from class: SerializerProvider
Method called to get the serializer to use for serializing non-null Map keys. Separation from regular SerializerProvider.findValueSerializer(java.lang.Class) method is because actual write method must be different (@link JsonGenerator#writeFieldName}; but also since behavior for some key types may differ.

Note that the serializer itself can be called with instances of any Java object, but not nulls.

Specified by:
getKeySerializer in class SerializerProvider

getNullKeySerializer

public JsonSerializer<Object> getNullKeySerializer()
Description copied from class: SerializerProvider
Method called to get the serializer to use for serializing Map keys that are nulls: this is needed since Json does not allow any non-String value as key, including null.

Typically, returned serializer will either throw an exception, or use an empty String; but other behaviors are possible.

Specified by:
getNullKeySerializer in class SerializerProvider

getNullValueSerializer

public JsonSerializer<Object> getNullValueSerializer()
Description copied from class: SerializerProvider
Method called to get the serializer to use for serializing values (root level, Array members or List field values) that are nulls. Specific accessor is needed because nulls in Java do not contain type information.

Typically returned serializer just writes out Json literal null value.

Specified by:
getNullValueSerializer in class SerializerProvider

getUnknownTypeSerializer

public JsonSerializer<Object> getUnknownTypeSerializer(Class<?> unknownType)
Description copied from class: SerializerProvider
Method called to get the serializer to use if provider can not determine an actual type-specific serializer to use; typically when none of SerializerFactory instances are able to construct a serializer.

Typically, returned serializer will throw an exception, although alternatively ToStringSerializer could be returned as well.

Specified by:
getUnknownTypeSerializer in class SerializerProvider
Parameters:
unknownType - Type for which no serializer is found

defaultSerializeDateValue

public final void defaultSerializeDateValue(long timestamp,
                                            JsonGenerator jgen)
                                     throws IOException,
                                            JsonProcessingException
Description copied from class: SerializerProvider
Method that will handle serialization of Date(-like) values, using SerializationConfig settings to determine expected serialization behavior.

Specified by:
defaultSerializeDateValue in class SerializerProvider
Parameters:
timestamp - Millisecond timestamp that defines date, if available;
Throws:
IOException
JsonProcessingException

defaultSerializeDateValue

public final void defaultSerializeDateValue(Date date,
                                            JsonGenerator jgen)
                                     throws IOException,
                                            JsonProcessingException
Description copied from class: SerializerProvider
Method that will handle serialization of Date(-like) values, using SerializationConfig settings to determine expected serialization behavior.

Specified by:
defaultSerializeDateValue in class SerializerProvider
Throws:
IOException
JsonProcessingException

_findExplicitSerializer

protected JsonSerializer<Object> _findExplicitSerializer(Class<?> type)
Method that will try to find a serializer, either from cache or by constructing one; but will not return an "unknown" serializer if this can not be done but rather returns null.

Returns:
Serializer if one can be found, null if not.

_createAndCacheSerializer

protected JsonSerializer<Object> _createAndCacheSerializer(Class<?> type)
                                                    throws JsonMappingException
Method that will try to construct a value aerializer; and if one is succesfully created, cache it for reuse.

Throws:
JsonMappingException

_createSerializer

protected JsonSerializer<Object> _createSerializer(Class<?> type)
                                            throws JsonMappingException
Throws:
JsonMappingException

_resolveSerializer

protected void _resolveSerializer(ResolvableSerializer ser)
                           throws JsonMappingException
Throws:
JsonMappingException