1 package com.fasterxml.jackson.databind.deser.std;
2
3 import java.lang.reflect.Constructor;
4 import java.lang.reflect.Method;
5
6 import com.fasterxml.jackson.databind.*;
7 import com.fasterxml.jackson.databind.deser.KeyDeserializers;
8 import com.fasterxml.jackson.databind.introspect.AnnotatedMethod;
9 import com.fasterxml.jackson.databind.util.ClassUtil;
10 import com.fasterxml.jackson.databind.util.EnumResolver;
11
12
28 public class StdKeyDeserializers
29 implements KeyDeserializers, java.io.Serializable
30 {
31 private static final long serialVersionUID = 1L;
32
33 public static KeyDeserializer constructEnumKeyDeserializer(EnumResolver enumResolver) {
34 return new StdKeyDeserializer.EnumKD(enumResolver, null);
35 }
36
37 public static KeyDeserializer constructEnumKeyDeserializer(EnumResolver enumResolver,
38 AnnotatedMethod factory) {
39 return new StdKeyDeserializer.EnumKD(enumResolver, factory);
40 }
41
42 public static KeyDeserializer constructDelegatingKeyDeserializer(DeserializationConfig config,
43 JavaType type, JsonDeserializer<?> deser)
44 {
45 return new StdKeyDeserializer.DelegatingKD(type.getRawClass(), deser);
46 }
47
48 public static KeyDeserializer findStringBasedKeyDeserializer(DeserializationConfig config,
49 JavaType type)
50 {
51
52 BeanDescription beanDesc = config.introspect(type);
53
54 Constructor<?> ctor = beanDesc.findSingleArgConstructor(String.class);
55 if (ctor != null) {
56 if (config.canOverrideAccessModifiers()) {
57 ClassUtil.checkAndFixAccess(ctor, config.isEnabled(MapperFeature.OVERRIDE_PUBLIC_ACCESS_MODIFIERS));
58 }
59 return new StdKeyDeserializer.StringCtorKeyDeserializer(ctor);
60 }
61
62
63 Method m = beanDesc.findFactoryMethod(String.class);
64 if (m != null){
65 if (config.canOverrideAccessModifiers()) {
66 ClassUtil.checkAndFixAccess(m, config.isEnabled(MapperFeature.OVERRIDE_PUBLIC_ACCESS_MODIFIERS));
67 }
68 return new StdKeyDeserializer.StringFactoryKeyDeserializer(m);
69 }
70
71 return null;
72 }
73
74
79
80 @Override
81 public KeyDeserializer findKeyDeserializer(JavaType type,
82 DeserializationConfig config, BeanDescription beanDesc) throws JsonMappingException
83 {
84 Class<?> raw = type.getRawClass();
85
86 if (raw.isPrimitive()) {
87 raw = ClassUtil.wrapperType(raw);
88 }
89 return StdKeyDeserializer.forType(raw);
90 }
91 }
92