All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.codehaus.jackson.map.deser.StdDeserializers Maven / Gradle / Ivy

Go to download

Data Mapper package is a high-performance data binding package built on Jackson JSON processor

The newest version!
package org.codehaus.jackson.map.deser;

import java.util.*;

import org.codehaus.jackson.map.JsonDeserializer;
import org.codehaus.jackson.map.deser.std.AtomicBooleanDeserializer;
import org.codehaus.jackson.map.deser.std.CalendarDeserializer;
import org.codehaus.jackson.map.deser.std.ClassDeserializer;
import org.codehaus.jackson.map.deser.std.DateDeserializer;
import org.codehaus.jackson.map.deser.std.FromStringDeserializer;
import org.codehaus.jackson.map.deser.std.JavaTypeDeserializer;
import org.codehaus.jackson.map.deser.std.StdDeserializer;
import org.codehaus.jackson.map.deser.std.StringDeserializer;
import org.codehaus.jackson.map.deser.std.TimestampDeserializer;
import org.codehaus.jackson.map.deser.std.TokenBufferDeserializer;
import org.codehaus.jackson.map.deser.std.UntypedObjectDeserializer;
import org.codehaus.jackson.map.type.*;

/**
 * Helper class used to contain simple/well-known deserializers for core JDK types.
 *

* Note: as of Jackson 1.9, we use type-erased class for registering, since * some types may come either as type-erased or typed (for example, * java.lang.Class). */ class StdDeserializers { final HashMap> _deserializers = new HashMap>(); private StdDeserializers() { // First, add the fall-back "untyped" deserializer: add(new UntypedObjectDeserializer()); // Then String and String-like converters: StdDeserializer strDeser = new StringDeserializer(); add(strDeser, String.class); add(strDeser, CharSequence.class); add(new ClassDeserializer()); // Then primitive-wrappers (simple): add(new StdDeserializer.BooleanDeserializer(Boolean.class, null)); add(new StdDeserializer.ByteDeserializer(Byte.class, null)); add(new StdDeserializer.ShortDeserializer(Short.class, null)); add(new StdDeserializer.CharacterDeserializer(Character.class, null)); add(new StdDeserializer.IntegerDeserializer(Integer.class, null)); add(new StdDeserializer.LongDeserializer(Long.class, null)); add(new StdDeserializer.FloatDeserializer(Float.class, null)); add(new StdDeserializer.DoubleDeserializer(Double.class, null)); /* And actual primitives: difference is the way nulls are to be * handled... */ add(new StdDeserializer.BooleanDeserializer(Boolean.TYPE, Boolean.FALSE)); add(new StdDeserializer.ByteDeserializer(Byte.TYPE, Byte.valueOf((byte)(0)))); add(new StdDeserializer.ShortDeserializer(Short.TYPE, Short.valueOf((short)0))); add(new StdDeserializer.CharacterDeserializer(Character.TYPE, Character.valueOf('\0'))); add(new StdDeserializer.IntegerDeserializer(Integer.TYPE, Integer.valueOf(0))); add(new StdDeserializer.LongDeserializer(Long.TYPE, Long.valueOf(0L))); add(new StdDeserializer.FloatDeserializer(Float.TYPE, Float.valueOf(0.0f))); add(new StdDeserializer.DoubleDeserializer(Double.TYPE, Double.valueOf(0.0))); // and related add(new StdDeserializer.NumberDeserializer()); add(new StdDeserializer.BigDecimalDeserializer()); add(new StdDeserializer.BigIntegerDeserializer()); add(new CalendarDeserializer()); add(new DateDeserializer()); /* 24-Jan-2010, tatu: When including type information, we may * know that we specifically need GregorianCalendar... */ add(new CalendarDeserializer(GregorianCalendar.class), GregorianCalendar.class); add(new StdDeserializer.SqlDateDeserializer()); add(new TimestampDeserializer()); // From-string deserializers: for (StdDeserializer deser : FromStringDeserializer.all()) { add(deser); } // And finally some odds and ends // to deserialize Throwable, need stack trace elements: add(new StdDeserializer.StackTraceElementDeserializer()); // [JACKSON-283] need to support atomic types, too // (note: AtomicInteger/Long work due to single-arg constructor) add(new AtomicBooleanDeserializer()); // including some core Jackson types: add(new TokenBufferDeserializer()); add(new JavaTypeDeserializer()); } /** * Public accessor to deserializers for core types. */ public static HashMap> constructAll() { return new StdDeserializers()._deserializers; } private void add(StdDeserializer stdDeser) { add(stdDeser, stdDeser.getValueClass()); } private void add(StdDeserializer stdDeser, Class valueClass) { // must do some unfortunate casting here... @SuppressWarnings("unchecked") JsonDeserializer deser = (JsonDeserializer) stdDeser; // Not super clean, but default TypeFactory does work here: _deserializers.put(new ClassKey(valueClass), deser); } }