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

org.codehaus.jackson.map.deser.std.EnumSetDeserializer Maven / Gradle / Ivy

Go to download

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

There is a newer version: 1.9.13
Show newest version
package org.codehaus.jackson.map.deser.std;

import java.io.IOException;
import java.util.*;

import org.codehaus.jackson.JsonProcessingException;
import org.codehaus.jackson.JsonParser;
import org.codehaus.jackson.JsonToken;
import org.codehaus.jackson.map.DeserializationContext;
import org.codehaus.jackson.map.JsonDeserializer;
import org.codehaus.jackson.map.TypeDeserializer;
import org.codehaus.jackson.map.util.EnumResolver;

/**
 * 
 * 

* Note: casting within this class is all messed up -- just could not figure out a way * to properly deal with recursive definition of "EnumSet, V> * * @author tsaloranta * * @since 1.9 (moved from higher-level package) */ @SuppressWarnings("rawtypes") public class EnumSetDeserializer extends StdDeserializer> { protected final Class _enumClass; protected final JsonDeserializer> _enumDeserializer; @SuppressWarnings("unchecked" ) public EnumSetDeserializer(EnumResolver enumRes) { // fugly, but what we can we do... this((Class) ((Class) enumRes.getEnumClass()), new EnumDeserializer(enumRes)); } @SuppressWarnings("unchecked" ) public EnumSetDeserializer(Class enumClass, JsonDeserializer deser) { super(EnumSet.class); _enumClass = (Class) enumClass; _enumDeserializer = (JsonDeserializer>) deser; } @SuppressWarnings("unchecked") @Override public EnumSet deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { // Ok: must point to START_ARRAY (or equivalent) if (!jp.isExpectedStartArrayToken()) { throw ctxt.mappingException(EnumSet.class); } EnumSet result = constructSet(); JsonToken t; while ((t = jp.nextToken()) != JsonToken.END_ARRAY) { /* What to do with nulls? Fail or ignore? Fail, for now * (note: would fail if we passed it to EnumDeserializer, too, * but in general nulls should never be passed to non-container * deserializers) */ if (t == JsonToken.VALUE_NULL) { throw ctxt.mappingException(_enumClass); } Enum value = _enumDeserializer.deserialize(jp, ctxt); result.add(value); } return result; } @Override public Object deserializeWithType(JsonParser jp, DeserializationContext ctxt, TypeDeserializer typeDeserializer) throws IOException, JsonProcessingException { return typeDeserializer.deserializeTypedFromArray(jp, ctxt); } @SuppressWarnings("unchecked") private EnumSet constructSet() { // superbly ugly... but apparently necessary return EnumSet.noneOf(_enumClass); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy