package com.fasterxml.jackson.databind.ser.impl;
import java.io.IOException;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
import com.fasterxml.jackson.databind.ser.ContextualSerializer;
public final class TypeWrappedSerializer
extends JsonSerializer<Object>
implements ContextualSerializer
{
final protected TypeSerializer _typeSerializer;
final protected JsonSerializer<Object> _serializer;
@SuppressWarnings("unchecked")
public TypeWrappedSerializer(TypeSerializer typeSer, JsonSerializer<?> ser)
{
super();
_typeSerializer = typeSer;
_serializer = (JsonSerializer<Object>) ser;
}
@Override
public void serialize(Object value, JsonGenerator g, SerializerProvider provider) throws IOException {
_serializer.serializeWithType(value, g, provider, _typeSerializer);
}
@Override
public void serializeWithType(Object value, JsonGenerator g, SerializerProvider provider,
TypeSerializer typeSer) throws IOException
{
_serializer.serializeWithType(value, g, provider, typeSer);
}
@Override
public Class<Object> handledType() { return Object.class; }
@Override
public JsonSerializer<?> createContextual(SerializerProvider provider, BeanProperty property)
throws JsonMappingException
{
JsonSerializer<?> ser = _serializer;
if (ser instanceof ContextualSerializer) {
ser = provider.handleSecondaryContextualization(ser, property);
}
if (ser == _serializer) {
return this;
}
return new TypeWrappedSerializer(_typeSerializer, ser);
}
public JsonSerializer<Object> valueSerializer() {
return _serializer;
}
public TypeSerializer typeSerializer() {
return _typeSerializer;
}
}