2
2
3
3
import com .fasterxml .jackson .databind .deser .*;
4
4
import com .fasterxml .jackson .databind .deser .std .StdKeyDeserializers ;
5
+ import com .fasterxml .jackson .databind .jsontype .impl .SubTypeValidator ;
5
6
import com .fasterxml .jackson .databind .util .ArrayBuilders ;
6
7
import com .fasterxml .jackson .databind .util .ArrayIterator ;
7
8
@@ -16,6 +17,7 @@ public class DeserializerFactoryConfig
16
17
protected final static Deserializers [] NO_DESERIALIZERS = new Deserializers [0 ];
17
18
protected final static BeanDeserializerModifier [] NO_MODIFIERS = new BeanDeserializerModifier [0 ];
18
19
protected final static ValueInstantiators [] NO_VALUE_INSTANTIATORS = new ValueInstantiators [0 ];
20
+ private static final SubTypeValidator DEFAULT_SUBTYPE_VALIDATOR = SubTypeValidator .instance ();
19
21
20
22
/**
21
23
* By default we plug default key deserializers using as "just another" set of
@@ -52,12 +54,17 @@ public class DeserializerFactoryConfig
52
54
*/
53
55
protected final ValueInstantiators [] _valueInstantiators ;
54
56
57
+ /**
58
+ * TODO make this an array?
59
+ */
60
+ protected final SubTypeValidator _subTypeValidator ;
61
+
55
62
/**
56
63
* Constructor for creating basic configuration with no additional
57
64
* handlers.
58
65
*/
59
66
public DeserializerFactoryConfig () {
60
- this (null , null , null , null );
67
+ this (null , null , null , null , null );
61
68
}
62
69
63
70
/**
@@ -67,14 +74,16 @@ public DeserializerFactoryConfig() {
67
74
protected DeserializerFactoryConfig (Deserializers [] allAdditionalDeserializers ,
68
75
KeyDeserializers [] allAdditionalKeyDeserializers ,
69
76
BeanDeserializerModifier [] modifiers ,
70
- ValueInstantiators [] vi )
77
+ ValueInstantiators [] vi ,
78
+ SubTypeValidator subTypeValidator )
71
79
{
72
80
_additionalDeserializers = (allAdditionalDeserializers == null ) ?
73
81
NO_DESERIALIZERS : allAdditionalDeserializers ;
74
82
_additionalKeyDeserializers = (allAdditionalKeyDeserializers == null ) ?
75
83
DEFAULT_KEY_DESERIALIZERS : allAdditionalKeyDeserializers ;
76
84
_modifiers = (modifiers == null ) ? NO_MODIFIERS : modifiers ;
77
85
_valueInstantiators = (vi == null ) ? NO_VALUE_INSTANTIATORS : vi ;
86
+ _subTypeValidator = (subTypeValidator == null ) ? DEFAULT_SUBTYPE_VALIDATOR : subTypeValidator ;
78
87
}
79
88
80
89
/**
@@ -90,7 +99,7 @@ public DeserializerFactoryConfig withAdditionalDeserializers(Deserializers addit
90
99
}
91
100
Deserializers [] all = ArrayBuilders .insertInListNoDup (_additionalDeserializers , additional );
92
101
return new DeserializerFactoryConfig (all , _additionalKeyDeserializers , _modifiers ,
93
- _valueInstantiators );
102
+ _valueInstantiators , _subTypeValidator );
94
103
}
95
104
96
105
/**
@@ -106,7 +115,7 @@ public DeserializerFactoryConfig withAdditionalKeyDeserializers(KeyDeserializers
106
115
}
107
116
KeyDeserializers [] all = ArrayBuilders .insertInListNoDup (_additionalKeyDeserializers , additional );
108
117
return new DeserializerFactoryConfig (_additionalDeserializers , all , _modifiers ,
109
- _valueInstantiators );
118
+ _valueInstantiators , _subTypeValidator );
110
119
}
111
120
112
121
/**
@@ -122,7 +131,7 @@ public DeserializerFactoryConfig withDeserializerModifier(BeanDeserializerModifi
122
131
}
123
132
BeanDeserializerModifier [] all = ArrayBuilders .insertInListNoDup (_modifiers , modifier );
124
133
return new DeserializerFactoryConfig (_additionalDeserializers , _additionalKeyDeserializers ,
125
- all , _valueInstantiators );
134
+ all , _valueInstantiators , _subTypeValidator );
126
135
}
127
136
128
137
/**
@@ -142,9 +151,18 @@ public DeserializerFactoryConfig withValueInstantiators(ValueInstantiators insta
142
151
}
143
152
ValueInstantiators [] all = ArrayBuilders .insertInListNoDup (_valueInstantiators , instantiators );
144
153
return new DeserializerFactoryConfig (_additionalDeserializers , _additionalKeyDeserializers ,
145
- _modifiers , all );
154
+ _modifiers , all , _subTypeValidator );
146
155
}
147
-
156
+
157
+ public DeserializerFactoryConfig withSubTypeValidator (SubTypeValidator subTypeValidator )
158
+ {
159
+ if (subTypeValidator == null ) {
160
+ throw new IllegalArgumentException ("Cannot pass null validator" );
161
+ }
162
+ return new DeserializerFactoryConfig (_additionalDeserializers , _additionalKeyDeserializers ,
163
+ _modifiers , _valueInstantiators , subTypeValidator );
164
+ }
165
+
148
166
public boolean hasDeserializers () { return _additionalDeserializers .length > 0 ; }
149
167
150
168
public boolean hasKeyDeserializers () { return _additionalKeyDeserializers .length > 0 ; }
@@ -168,4 +186,8 @@ public Iterable<BeanDeserializerModifier> deserializerModifiers() {
168
186
public Iterable <ValueInstantiators > valueInstantiators () {
169
187
return new ArrayIterator <ValueInstantiators >(_valueInstantiators );
170
188
}
189
+
190
+ public SubTypeValidator subTypeValidator () {
191
+ return _subTypeValidator ;
192
+ }
171
193
}
0 commit comments