org.codehaus.jackson.map.ser.std.StdJdkSerializers Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of ehcache Show documentation
Show all versions of ehcache Show documentation
Ehcache is an open source, standards-based cache used to boost performance,
offload the database and simplify scalability. Ehcache is robust, proven and full-featured and
this has made it the most widely-used Java-based cache.
package org.codehaus.jackson.map.ser.std;
import java.io.*;
import java.lang.reflect.Type;
import java.util.*;
import java.util.concurrent.atomic.*;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.map.*;
import org.codehaus.jackson.map.ser.BasicSerializerFactory;
import org.codehaus.jackson.map.util.Provider;
/**
* Class that providers access to serializers user for non-structured JDK types that
* are serializer as scalars; some using basic {@link ToStringSerializer},
* others explicit serializers.
*/
public class StdJdkSerializers
implements Provider,Object>>
{
/**
* Method called by {@link BasicSerializerFactory} to access
* all serializers this class provides.
*/
@Override
public Collection, Object>> provide()
{
HashMap,Object> sers = new HashMap,Object>();
// First things that 'toString()' can handle
final ToStringSerializer sls = ToStringSerializer.instance;
sers.put(java.net.URL.class, sls);
sers.put(java.net.URI.class, sls);
sers.put(Currency.class, sls);
sers.put(UUID.class, sls);
sers.put(java.util.regex.Pattern.class, sls);
sers.put(Locale.class, sls);
// starting with 1.7, use compact String for Locale
sers.put(Locale.class, sls);
// then atomic types
sers.put(AtomicReference.class, AtomicReferenceSerializer.class);
sers.put(AtomicBoolean.class, AtomicBooleanSerializer.class);
sers.put(AtomicInteger.class, AtomicIntegerSerializer.class);
sers.put(AtomicLong.class, AtomicLongSerializer.class);
// then types that need specialized serializers
sers.put(File.class, FileSerializer.class);
sers.put(Class.class, ClassSerializer.class);
// And then some stranger types... not 100% they are needed but:
sers.put(Void.TYPE, NullSerializer.class);
return sers.entrySet();
}
/*
********************************************************
* Serializers for atomic types
********************************************************
*/
public final static class AtomicBooleanSerializer
extends ScalarSerializerBase
{
public AtomicBooleanSerializer() { super(AtomicBoolean.class, false); }
@Override
public void serialize(AtomicBoolean value, JsonGenerator jgen, SerializerProvider provider)
throws IOException, JsonGenerationException
{
jgen.writeBoolean(value.get());
}
@Override
public JsonNode getSchema(SerializerProvider provider, Type typeHint)
{
return createSchemaNode("boolean", true);
}
}
public final static class AtomicIntegerSerializer
extends ScalarSerializerBase
{
public AtomicIntegerSerializer() { super(AtomicInteger.class, false); }
@Override
public void serialize(AtomicInteger value, JsonGenerator jgen, SerializerProvider provider)
throws IOException, JsonGenerationException
{
jgen.writeNumber(value.get());
}
@Override
public JsonNode getSchema(SerializerProvider provider, Type typeHint)
{
return createSchemaNode("integer", true);
}
}
public final static class AtomicLongSerializer
extends ScalarSerializerBase
{
public AtomicLongSerializer() { super(AtomicLong.class, false); }
@Override
public void serialize(AtomicLong value, JsonGenerator jgen, SerializerProvider provider)
throws IOException, JsonGenerationException
{
jgen.writeNumber(value.get());
}
@Override
public JsonNode getSchema(SerializerProvider provider, Type typeHint)
{
return createSchemaNode("integer", true);
}
}
public final static class AtomicReferenceSerializer
extends SerializerBase>
{
public AtomicReferenceSerializer() { super(AtomicReference.class, false); }
@Override
public void serialize(AtomicReference> value, JsonGenerator jgen, SerializerProvider provider)
throws IOException, JsonGenerationException
{
provider.defaultSerializeValue(value.get(), jgen);
}
@Override
public JsonNode getSchema(SerializerProvider provider, Type typeHint)
{
return createSchemaNode("any", true);
}
}
/*
/**********************************************************
/* Specialized serializers, referential types
/**********************************************************
*/
/**
* For now, File objects get serialized by just outputting
* absolute (but not canonical) name as String value
*/
public final static class FileSerializer
extends ScalarSerializerBase
{
public FileSerializer() { super(File.class); }
@Override
public void serialize(File value, JsonGenerator jgen, SerializerProvider provider)
throws IOException, JsonGenerationException
{
jgen.writeString(value.getAbsolutePath());
}
@Override
public JsonNode getSchema(SerializerProvider provider, Type typeHint)
{
return createSchemaNode("string", true);
}
}
/**
* Also: default bean access will not do much good with Class.class. But
* we can just serialize the class name and that should be enough.
*/
public final static class ClassSerializer
extends ScalarSerializerBase>
{
public ClassSerializer() { super(Class.class, false); }
@Override
public void serialize(Class> value, JsonGenerator jgen, SerializerProvider provider)
throws IOException, JsonGenerationException
{
jgen.writeString(value.getName());
}
@Override
public JsonNode getSchema(SerializerProvider provider, Type typeHint)
{
return createSchemaNode("string", true);
}
}
}