| package com.fasterxml.jackson.databind.util; |
| |
| import java.io.IOException; |
| |
| import com.fasterxml.jackson.core.*; |
| |
| import com.fasterxml.jackson.databind.*; |
| import com.fasterxml.jackson.databind.jsontype.TypeSerializer; |
| |
| /** |
| * Container class that can be used to wrap any Object instances (including |
| * nulls), and will serialize embedded in |
| * <a href="http://en.wikipedia.org/wiki/JSONP">JSONP</a> wrapping. |
| * |
| * @see com.fasterxml.jackson.databind.util.JSONWrappedObject |
| * |
| * @author tatu |
| */ |
| public class JSONPObject |
| implements JsonSerializable |
| { |
| /** |
| * JSONP function name to use for serialization |
| */ |
| protected final String _function; |
| |
| /** |
| * Value to be serialized as JSONP padded; can be null. |
| */ |
| protected final Object _value; |
| |
| /** |
| * Optional static type to use for serialization; if null, runtime |
| * type is used. Can be used to specify declared type which defines |
| * serializer to use, as well as aspects of extra type information |
| * to include (if any). |
| */ |
| protected final JavaType _serializationType; |
| |
| public JSONPObject(String function, Object value) { |
| this(function, value, (JavaType) null); |
| } |
| |
| public JSONPObject(String function, Object value, JavaType asType) |
| { |
| _function = function; |
| _value = value; |
| _serializationType = asType; |
| } |
| |
| /* |
| /********************************************************** |
| /* JsonSerializable(WithType) implementation |
| /********************************************************** |
| */ |
| |
| // @Override |
| public void serializeWithType(JsonGenerator jgen, SerializerProvider provider, TypeSerializer typeSer) |
| throws IOException, JsonProcessingException |
| { |
| // No type for JSONP wrapping: value serializer will handle typing for value: |
| serialize(jgen, provider); |
| } |
| |
| // @Override |
| public void serialize(JsonGenerator jgen, SerializerProvider provider) |
| throws IOException, JsonProcessingException |
| { |
| // First, wrapping: |
| jgen.writeRaw(_function); |
| jgen.writeRaw('('); |
| if (_value == null) { |
| provider.defaultSerializeNull(jgen); |
| } else if (_serializationType != null) { |
| provider.findTypedValueSerializer(_serializationType, true, null).serialize(_value, jgen, provider); |
| } else { |
| Class<?> cls = _value.getClass(); |
| provider.findTypedValueSerializer(cls, true, null).serialize(_value, jgen, provider); |
| } |
| jgen.writeRaw(')'); |
| } |
| |
| /* |
| /************************************************************** |
| /* Accessors |
| /************************************************************** |
| */ |
| |
| public String getFunction() { return _function; } |
| public Object getValue() { return _value; } |
| public JavaType getSerializationType() { return _serializationType; } |
| } |