1
1
package com .fasterxml .jackson .databind .util ;
2
2
3
3
import com .fasterxml .jackson .annotation .JsonEnumDefaultValue ;
4
- import com .fasterxml .jackson .annotation .JsonProperty ;
5
4
import com .fasterxml .jackson .databind .AnnotationIntrospector ;
5
+ import com .fasterxml .jackson .databind .introspect .JacksonAnnotationIntrospector ;
6
6
7
- import java .lang .reflect .Field ;
8
- import java .lang .reflect .InvocationTargetException ;
9
7
import java .lang .reflect .Method ;
10
8
import java .util .*;
11
9
@@ -53,30 +51,11 @@ public static EnumResolver constructFor(Class<Enum<?>> enumCls, AnnotationIntros
53
51
map .put (name , enumValues [i ]);
54
52
}
55
53
56
- Enum <?> defaultEnum = determineDefaultEnumValue (enumCls );
54
+ Enum <?> defaultEnum = ClassUtil . findFirstAnnotatedEnumValue (enumCls , JsonEnumDefaultValue . class );
57
55
58
56
return new EnumResolver (enumCls , enumValues , map , defaultEnum );
59
57
}
60
58
61
- private static Enum <?> determineDefaultEnumValue (Class <Enum <?>> enumCls ) {
62
- Field [] fields = ClassUtil .getDeclaredFields (enumCls );
63
- for (Field field : fields ) {
64
- JsonEnumDefaultValue defaultValueAnnotation = field .getAnnotation (JsonEnumDefaultValue .class );
65
- if (defaultValueAnnotation != null && field .isEnumConstant ()) {
66
- try {
67
- Method valueOf = enumCls .getDeclaredMethod ("valueOf" , String .class ); // using `getMethod` causes IllegalAccessException
68
- valueOf .setAccessible (true );
69
- return enumCls .cast (valueOf .invoke (null , field .getName ()));
70
- } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e ) {
71
- java .util .logging .Logger .getLogger (EnumResolver .class .getName ())
72
- .warning ("Could not extract Enum annotated with " + JsonEnumDefaultValue .class .getSimpleName ()
73
- + " due to: " + e .getLocalizedMessage ());
74
- }
75
- }
76
- }
77
- return null ;
78
- }
79
-
80
59
/**
81
60
* Factory method for constructing resolver that maps from Enum.toString() into
82
61
* Enum value
@@ -90,8 +69,9 @@ public static EnumResolver constructUsingToString(Class<Enum<?>> enumCls)
90
69
Enum <?> e = enumValues [i ];
91
70
map .put (e .toString (), e );
92
71
}
93
- Enum <?> defaultValue = determineDefaultEnumValue (enumCls );
94
- return new EnumResolver (enumCls , enumValues , map , defaultValue );
72
+
73
+ Enum <?> defaultEnum = ClassUtil .findFirstAnnotatedEnumValue (enumCls , JsonEnumDefaultValue .class );
74
+ return new EnumResolver (enumCls , enumValues , map , defaultEnum );
95
75
}
96
76
97
77
public static EnumResolver constructUsingMethod (Class <Enum <?>> enumCls ,
@@ -112,9 +92,8 @@ public static EnumResolver constructUsingMethod(Class<Enum<?>> enumCls,
112
92
}
113
93
}
114
94
115
- Enum <?> defaultValue = determineDefaultEnumValue (enumCls );
116
-
117
- return new EnumResolver (enumCls , enumValues , map , defaultValue );
95
+ Enum <?> defaultEnum = ClassUtil .findFirstAnnotatedEnumValue (enumCls , JsonEnumDefaultValue .class );
96
+ return new EnumResolver (enumCls , enumValues , map , defaultEnum );
118
97
}
119
98
120
99
/**
0 commit comments