Skip to content

Commit

Permalink
FasterXML#2208: Make SubTypeValidator configurable on BeanDeserialize…
Browse files Browse the repository at this point in the history
…rFactory.
  • Loading branch information
Michael Riedel committed Feb 28, 2019
1 parent 984d36a commit d57dedc
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.fasterxml.jackson.databind.deser.*;
import com.fasterxml.jackson.databind.deser.std.StdKeyDeserializers;
import com.fasterxml.jackson.databind.jsontype.impl.SubTypeValidator;
import com.fasterxml.jackson.databind.util.ArrayBuilders;
import com.fasterxml.jackson.databind.util.ArrayIterator;

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

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

/**
* TODO make this an array?
*/
protected final SubTypeValidator _subTypeValidator;

/**
* Constructor for creating basic configuration with no additional
* handlers.
*/
public DeserializerFactoryConfig() {
this(null, null, null, null);
this(null, null, null, null, null);
}

/**
Expand All @@ -67,14 +74,16 @@ public DeserializerFactoryConfig() {
protected DeserializerFactoryConfig(Deserializers[] allAdditionalDeserializers,
KeyDeserializers[] allAdditionalKeyDeserializers,
BeanDeserializerModifier[] modifiers,
ValueInstantiators[] vi)
ValueInstantiators[] vi,
SubTypeValidator subTypeValidator)
{
_additionalDeserializers = (allAdditionalDeserializers == null) ?
NO_DESERIALIZERS : allAdditionalDeserializers;
_additionalKeyDeserializers = (allAdditionalKeyDeserializers == null) ?
DEFAULT_KEY_DESERIALIZERS : allAdditionalKeyDeserializers;
_modifiers = (modifiers == null) ? NO_MODIFIERS : modifiers;
_valueInstantiators = (vi == null) ? NO_VALUE_INSTANTIATORS : vi;
_subTypeValidator = (subTypeValidator == null) ? DEFAULT_SUBTYPE_VALIDATOR : subTypeValidator;
}

/**
Expand All @@ -90,7 +99,7 @@ public DeserializerFactoryConfig withAdditionalDeserializers(Deserializers addit
}
Deserializers[] all = ArrayBuilders.insertInListNoDup(_additionalDeserializers, additional);
return new DeserializerFactoryConfig(all, _additionalKeyDeserializers, _modifiers,
_valueInstantiators);
_valueInstantiators, _subTypeValidator);
}

/**
Expand All @@ -106,7 +115,7 @@ public DeserializerFactoryConfig withAdditionalKeyDeserializers(KeyDeserializers
}
KeyDeserializers[] all = ArrayBuilders.insertInListNoDup(_additionalKeyDeserializers, additional);
return new DeserializerFactoryConfig(_additionalDeserializers, all, _modifiers,
_valueInstantiators);
_valueInstantiators, _subTypeValidator);
}

/**
Expand All @@ -122,7 +131,7 @@ public DeserializerFactoryConfig withDeserializerModifier(BeanDeserializerModifi
}
BeanDeserializerModifier[] all = ArrayBuilders.insertInListNoDup(_modifiers, modifier);
return new DeserializerFactoryConfig(_additionalDeserializers, _additionalKeyDeserializers,
all, _valueInstantiators);
all, _valueInstantiators, _subTypeValidator);
}

/**
Expand All @@ -142,9 +151,18 @@ public DeserializerFactoryConfig withValueInstantiators(ValueInstantiators insta
}
ValueInstantiators[] all = ArrayBuilders.insertInListNoDup(_valueInstantiators, instantiators);
return new DeserializerFactoryConfig(_additionalDeserializers, _additionalKeyDeserializers,
_modifiers, all);
_modifiers, all, _subTypeValidator);
}


public DeserializerFactoryConfig withSubTypeValidator(SubTypeValidator subTypeValidator)
{
if (subTypeValidator == null) {
throw new IllegalArgumentException("Cannot pass null validator");
}
return new DeserializerFactoryConfig(_additionalDeserializers, _additionalKeyDeserializers,
_modifiers, _valueInstantiators, subTypeValidator);
}

public boolean hasDeserializers() { return _additionalDeserializers.length > 0; }

public boolean hasKeyDeserializers() { return _additionalKeyDeserializers.length > 0; }
Expand All @@ -168,4 +186,8 @@ public Iterable<BeanDeserializerModifier> deserializerModifiers() {
public Iterable<ValueInstantiators> valueInstantiators() {
return new ArrayIterator<ValueInstantiators>(_valueInstantiators);
}

public SubTypeValidator subTypeValidator() {
return _subTypeValidator;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -915,6 +915,6 @@ protected void _validateSubType(DeserializationContext ctxt, JavaType type,
BeanDescription beanDesc)
throws JsonMappingException
{
SubTypeValidator.instance().validateSubType(ctxt, type, beanDesc);
this._factoryConfig.subTypeValidator().validateSubType(ctxt, type, beanDesc);
}
}

0 comments on commit d57dedc

Please sign in to comment.