Skip to content

Commit d57dedc

Browse files
author
Michael Riedel
committed
FasterXML#2208: Make SubTypeValidator configurable on BeanDeserializerFactory.
1 parent 984d36a commit d57dedc

File tree

2 files changed

+30
-8
lines changed

2 files changed

+30
-8
lines changed

src/main/java/com/fasterxml/jackson/databind/cfg/DeserializerFactoryConfig.java

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.fasterxml.jackson.databind.deser.*;
44
import com.fasterxml.jackson.databind.deser.std.StdKeyDeserializers;
5+
import com.fasterxml.jackson.databind.jsontype.impl.SubTypeValidator;
56
import com.fasterxml.jackson.databind.util.ArrayBuilders;
67
import com.fasterxml.jackson.databind.util.ArrayIterator;
78

@@ -16,6 +17,7 @@ public class DeserializerFactoryConfig
1617
protected final static Deserializers[] NO_DESERIALIZERS = new Deserializers[0];
1718
protected final static BeanDeserializerModifier[] NO_MODIFIERS = new BeanDeserializerModifier[0];
1819
protected final static ValueInstantiators[] NO_VALUE_INSTANTIATORS = new ValueInstantiators[0];
20+
private static final SubTypeValidator DEFAULT_SUBTYPE_VALIDATOR = SubTypeValidator.instance();
1921

2022
/**
2123
* By default we plug default key deserializers using as "just another" set of
@@ -52,12 +54,17 @@ public class DeserializerFactoryConfig
5254
*/
5355
protected final ValueInstantiators[] _valueInstantiators;
5456

57+
/**
58+
* TODO make this an array?
59+
*/
60+
protected final SubTypeValidator _subTypeValidator;
61+
5562
/**
5663
* Constructor for creating basic configuration with no additional
5764
* handlers.
5865
*/
5966
public DeserializerFactoryConfig() {
60-
this(null, null, null, null);
67+
this(null, null, null, null, null);
6168
}
6269

6370
/**
@@ -67,14 +74,16 @@ public DeserializerFactoryConfig() {
6774
protected DeserializerFactoryConfig(Deserializers[] allAdditionalDeserializers,
6875
KeyDeserializers[] allAdditionalKeyDeserializers,
6976
BeanDeserializerModifier[] modifiers,
70-
ValueInstantiators[] vi)
77+
ValueInstantiators[] vi,
78+
SubTypeValidator subTypeValidator)
7179
{
7280
_additionalDeserializers = (allAdditionalDeserializers == null) ?
7381
NO_DESERIALIZERS : allAdditionalDeserializers;
7482
_additionalKeyDeserializers = (allAdditionalKeyDeserializers == null) ?
7583
DEFAULT_KEY_DESERIALIZERS : allAdditionalKeyDeserializers;
7684
_modifiers = (modifiers == null) ? NO_MODIFIERS : modifiers;
7785
_valueInstantiators = (vi == null) ? NO_VALUE_INSTANTIATORS : vi;
86+
_subTypeValidator = (subTypeValidator == null) ? DEFAULT_SUBTYPE_VALIDATOR : subTypeValidator;
7887
}
7988

8089
/**
@@ -90,7 +99,7 @@ public DeserializerFactoryConfig withAdditionalDeserializers(Deserializers addit
9099
}
91100
Deserializers[] all = ArrayBuilders.insertInListNoDup(_additionalDeserializers, additional);
92101
return new DeserializerFactoryConfig(all, _additionalKeyDeserializers, _modifiers,
93-
_valueInstantiators);
102+
_valueInstantiators, _subTypeValidator);
94103
}
95104

96105
/**
@@ -106,7 +115,7 @@ public DeserializerFactoryConfig withAdditionalKeyDeserializers(KeyDeserializers
106115
}
107116
KeyDeserializers[] all = ArrayBuilders.insertInListNoDup(_additionalKeyDeserializers, additional);
108117
return new DeserializerFactoryConfig(_additionalDeserializers, all, _modifiers,
109-
_valueInstantiators);
118+
_valueInstantiators, _subTypeValidator);
110119
}
111120

112121
/**
@@ -122,7 +131,7 @@ public DeserializerFactoryConfig withDeserializerModifier(BeanDeserializerModifi
122131
}
123132
BeanDeserializerModifier[] all = ArrayBuilders.insertInListNoDup(_modifiers, modifier);
124133
return new DeserializerFactoryConfig(_additionalDeserializers, _additionalKeyDeserializers,
125-
all, _valueInstantiators);
134+
all, _valueInstantiators, _subTypeValidator);
126135
}
127136

128137
/**
@@ -142,9 +151,18 @@ public DeserializerFactoryConfig withValueInstantiators(ValueInstantiators insta
142151
}
143152
ValueInstantiators[] all = ArrayBuilders.insertInListNoDup(_valueInstantiators, instantiators);
144153
return new DeserializerFactoryConfig(_additionalDeserializers, _additionalKeyDeserializers,
145-
_modifiers, all);
154+
_modifiers, all, _subTypeValidator);
146155
}
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+
148166
public boolean hasDeserializers() { return _additionalDeserializers.length > 0; }
149167

150168
public boolean hasKeyDeserializers() { return _additionalKeyDeserializers.length > 0; }
@@ -168,4 +186,8 @@ public Iterable<BeanDeserializerModifier> deserializerModifiers() {
168186
public Iterable<ValueInstantiators> valueInstantiators() {
169187
return new ArrayIterator<ValueInstantiators>(_valueInstantiators);
170188
}
189+
190+
public SubTypeValidator subTypeValidator() {
191+
return _subTypeValidator;
192+
}
171193
}

src/main/java/com/fasterxml/jackson/databind/deser/BeanDeserializerFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -915,6 +915,6 @@ protected void _validateSubType(DeserializationContext ctxt, JavaType type,
915915
BeanDescription beanDesc)
916916
throws JsonMappingException
917917
{
918-
SubTypeValidator.instance().validateSubType(ctxt, type, beanDesc);
918+
this._factoryConfig.subTypeValidator().validateSubType(ctxt, type, beanDesc);
919919
}
920920
}

0 commit comments

Comments
 (0)