TypeWrappedDeserializer.java
package tools.jackson.databind.deser.impl;
import java.util.Collection;
import tools.jackson.core.JacksonException;
import tools.jackson.core.JsonParser;
import tools.jackson.databind.*;
import tools.jackson.databind.jsontype.TypeDeserializer;
import tools.jackson.databind.type.LogicalType;
/**
* Simple deserializer that will call configured type deserializer, passing
* in configured data deserializer, and exposing it all as a simple
* deserializer.
* This is necessary when there is no "parent" deserializer which could handle
* details of calling a {@link TypeDeserializer}, most commonly used with
* root values.
*/
public final class TypeWrappedDeserializer
extends ValueDeserializer<Object>
{
final protected TypeDeserializer _typeDeserializer;
final protected ValueDeserializer<Object> _deserializer;
@SuppressWarnings("unchecked")
public TypeWrappedDeserializer(TypeDeserializer typeDeser, ValueDeserializer<?> deser)
{
super();
_typeDeserializer = typeDeser;
_deserializer = (ValueDeserializer<Object>) deser;
}
@Override // since 2.12
public LogicalType logicalType() {
return _deserializer.logicalType();
}
@Override
public Class<?> handledType() {
return _deserializer.handledType();
}
@Override // since 2.9
public Boolean supportsUpdate(DeserializationConfig config) {
return _deserializer.supportsUpdate(config);
}
@Override
public ValueDeserializer<?> getDelegatee() {
return _deserializer.getDelegatee();
}
@Override
public Collection<Object> getKnownPropertyNames() {
return _deserializer.getKnownPropertyNames();
}
@Override
public Object getNullValue(DeserializationContext ctxt) {
return _deserializer.getNullValue(ctxt);
}
@Override
public Object getEmptyValue(DeserializationContext ctxt){
return _deserializer.getEmptyValue(ctxt);
}
@Override
public Object deserialize(JsonParser p, DeserializationContext ctxt)
throws JacksonException
{
return _deserializer.deserializeWithType(p, ctxt, _typeDeserializer);
}
@Override
public Object deserializeWithType(JsonParser p, DeserializationContext ctxt,
TypeDeserializer typeDeserializer)
throws JacksonException
{
// should never happen? (if it can, could call on that object)
throw new IllegalStateException("Type-wrapped deserializer's deserializeWithType should never get called");
}
@Override
public Object deserialize(JsonParser p, DeserializationContext ctxt,
Object intoValue)
throws JacksonException
{
// 01-Mar-2013, tatu: Hmmh. Tough call as to what to do... need
// to delegate, but will this work reliably? Let's just hope so:
return _deserializer.deserialize(p, ctxt, intoValue);
}
}