1
2
3
4
5
6
7
8
9
10
11
12
13
14 package com.addthis.codec.jackson;
15
16 import java.io.IOException;
17
18 import com.fasterxml.jackson.core.JsonParser;
19 import com.fasterxml.jackson.core.JsonToken;
20 import com.fasterxml.jackson.databind.DeserializationContext;
21 import com.fasterxml.jackson.databind.deser.std.EnumDeserializer;
22 import com.fasterxml.jackson.databind.deser.std.StdScalarDeserializer;
23 import com.fasterxml.jackson.databind.node.TextNode;
24
25
26 public class CaseIgnoringEnumDeserializer extends StdScalarDeserializer<Enum<?>> {
27 private final EnumDeserializer base;
28
29 public CaseIgnoringEnumDeserializer(EnumDeserializer base) {
30 super(Enum.class);
31 this.base = base;
32 }
33
34 @Override
35 public Enum<?> deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
36 JsonToken curr = jp.getCurrentToken();
37
38 if ((curr == JsonToken.VALUE_STRING) || (curr == JsonToken.FIELD_NAME)
39 || (curr == JsonToken.VALUE_FALSE) || (curr == JsonToken.VALUE_TRUE)) {
40 String name = jp.getText();
41 TextNode upperName = ctxt.getNodeFactory().textNode(name.toUpperCase());
42
43 JsonParser treeParser = jp.getCodec().treeAsTokens(upperName);
44 treeParser.nextToken();
45 return base.deserialize(treeParser, ctxt);
46 } else {
47 return base.deserialize(jp, ctxt);
48 }
49 }
50 }