blob: 69c0dab1e3a8e7db669094504cc9081acdcfdf1c [file] [log] [blame]
package org.codehaus.jackson.map.deser;
import org.codehaus.jackson.map.DeserializationConfig;
import org.codehaus.jackson.map.JsonDeserializer;
import org.codehaus.jackson.map.deser.BeanDeserializer;
import org.codehaus.jackson.map.deser.BeanDeserializerFactory;
import org.codehaus.jackson.map.introspect.BasicBeanDescription;
/**
* Abstract class that defines API for objects that can be registered (for {@link BeanDeserializerFactory}
* to participate in constructing {@link BeanDeserializer} instances.
* This is typically done by modules that want alter some aspects of deserialization
* process; and is preferable to sub-classing of {@link BeanDeserializerFactory}.
*<p>
* Sequence in which callback methods are called is as follows:
* <li>updateBuilder is called once all initial pieces for building deserializer
* have been collected
* </li>
* <li><code>modifyDeserializer</code> is called after deserializer has been built
* by {@link BeanDeserializerBuilder}
* but before it is returned to be used
* </li>
* </ol>
*<p>
* Default method implementations are "no-op"s, meaning that methods are implemented
* but have no effect; this is mostly so that new methods can be added in later
* versions.
*
* @since 1.7
*/
public abstract class BeanDeserializerModifier
{
/**
* Method called by {@link BeanDeserializerFactory} when it has collected
* basic information such as tentative list of properties to deserialize.
*
* Implementations may choose to modify state of builder (to affect deserializer being
* built), or even completely replace it (if they want to build different kind of
* deserializer). Typically changes mostly concern set of properties to deserialize.
*/
public BeanDeserializerBuilder updateBuilder(DeserializationConfig config,
BasicBeanDescription beanDesc, BeanDeserializerBuilder builder) {
return builder;
}
/**
* Method called by {@link BeanDeserializerFactory} after constructing default
* bean deserializer instance with properties collected and ordered earlier.
* Implementations can modify or replace given deserializer and return deserializer
* to use. Note that although initial deserializer being passed is of type
* {@link BeanDeserializer}, modifiers may return deserializers of other types;
* and this is why implementations must check for type before casting.
*/
public JsonDeserializer<?> modifyDeserializer(DeserializationConfig config,
BasicBeanDescription beanDesc, JsonDeserializer<?> deserializer) {
return deserializer;
}
}