|
24 | 24 | import com.fasterxml.jackson.databind.Module;
|
25 | 25 | import com.fasterxml.jackson.databind.ObjectMapper;
|
26 | 26 | import com.fasterxml.jackson.databind.cfg.MapperConfig;
|
| 27 | +import com.fasterxml.jackson.databind.jsontype.BasicPolymorphicTypeValidator; |
27 | 28 | import com.fasterxml.jackson.databind.jsontype.NamedType;
|
| 29 | +import com.fasterxml.jackson.databind.jsontype.PolymorphicTypeValidator; |
28 | 30 | import com.fasterxml.jackson.databind.jsontype.TypeIdResolver;
|
29 | 31 | import com.fasterxml.jackson.databind.jsontype.TypeResolverBuilder;
|
30 | 32 | import org.apache.commons.logging.Log;
|
@@ -146,19 +148,29 @@ private static TypeResolverBuilder<? extends TypeResolverBuilder> createWhitelis
|
146 | 148 | }
|
147 | 149 |
|
148 | 150 | /**
|
149 |
| - * An implementation of {@link ObjectMapper.DefaultTypeResolverBuilder} that overrides the {@link TypeIdResolver} |
150 |
| - * with {@link WhitelistTypeIdResolver}. |
| 151 | + * An implementation of {@link ObjectMapper.DefaultTypeResolverBuilder} |
| 152 | + * that inserts an {@code allow all} {@link PolymorphicTypeValidator} |
| 153 | + * and overrides the {@code TypeIdResolver} |
151 | 154 | * @author Rob Winch
|
152 | 155 | */
|
153 | 156 | static class WhitelistTypeResolverBuilder extends ObjectMapper.DefaultTypeResolverBuilder {
|
154 | 157 |
|
155 | 158 | WhitelistTypeResolverBuilder(ObjectMapper.DefaultTyping defaultTyping) {
|
156 |
| - super(defaultTyping); |
| 159 | + super( |
| 160 | + defaultTyping, |
| 161 | + //we do explicit validation in the TypeIdResolver |
| 162 | + BasicPolymorphicTypeValidator.builder() |
| 163 | + .allowIfSubType(Object.class) |
| 164 | + .build() |
| 165 | + ); |
157 | 166 | }
|
158 | 167 |
|
| 168 | + @Override |
159 | 169 | protected TypeIdResolver idResolver(MapperConfig<?> config,
|
160 |
| - JavaType baseType, Collection<NamedType> subtypes, boolean forSer, boolean forDeser) { |
161 |
| - TypeIdResolver result = super.idResolver(config, baseType, subtypes, forSer, forDeser); |
| 170 | + JavaType baseType, |
| 171 | + PolymorphicTypeValidator subtypeValidator, |
| 172 | + Collection<NamedType> subtypes, boolean forSer, boolean forDeser) { |
| 173 | + TypeIdResolver result = super.idResolver(config, baseType, subtypeValidator, subtypes, forSer, forDeser); |
162 | 174 | return new WhitelistTypeIdResolver(result);
|
163 | 175 | }
|
164 | 176 | }
|
|
0 commit comments