diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/jackson/AbstractModelConverter.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/jackson/AbstractModelConverter.java index 3dc4788ee8..cff6f2161a 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/jackson/AbstractModelConverter.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/jackson/AbstractModelConverter.java @@ -21,7 +21,6 @@ public abstract class AbstractModelConverter implements ModelConverter { protected final ObjectMapper _mapper; - protected final AnnotationIntrospector _intr; protected final TypeNameResolver _typeNameResolver; /** * Minor optimization: no need to keep on resolving same types over and over @@ -43,7 +42,6 @@ public void setupModule(SetupContext context) { }); _mapper = mapper; _typeNameResolver = typeNameResolver; - _intr = mapper.getSerializationConfig().getAnnotationIntrospector(); } @Override @@ -55,6 +53,17 @@ public Schema resolve(AnnotatedType type, ModelConverterContext context, Iterato } } + /** + * Retrieves the current AnnotationIntrospector from the ObjectMapper's serialization configuration. + * We do not cache the value of _intr because users can load jackson modules later, + * and we want to use their annotation inspection. + * + * @return the current AnnotationIntrospector + */ + protected AnnotationIntrospector _intr() { + return _mapper.getSerializationConfig().getAnnotationIntrospector(); + } + protected String _typeName(JavaType type) { return _typeName(type, null); } @@ -89,7 +98,7 @@ protected String _findTypeName(JavaType type, BeanDescription beanDesc) { beanDesc = _mapper.getSerializationConfig().introspectClassAnnotations(type); } - PropertyName rootName = _intr.findRootName(beanDesc.getClassInfo()); + PropertyName rootName = _intr().findRootName(beanDesc.getClassInfo()); if (rootName != null && rootName.hasSimpleName()) { return rootName.getSimpleName(); } diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/jackson/ModelResolver.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/jackson/ModelResolver.java index 66634f693f..bafa33ee0c 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/jackson/ModelResolver.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/jackson/ModelResolver.java @@ -1083,7 +1083,7 @@ private Schema clone(Schema property) { private boolean isSubtype(AnnotatedClass childClass, Class parentClass) { final BeanDescription parentDesc = _mapper.getSerializationConfig().introspectClassAnnotations(parentClass); - List subTypes =_intr.findSubtypes(parentDesc.getClassInfo()); + List subTypes = _intr().findSubtypes(parentDesc.getClassInfo()); if (subTypes == null) { return false; } @@ -1130,7 +1130,7 @@ protected void _addEnumProps(Class propClass, Schema property) { Enum[] enumConstants = enumClass.getEnumConstants(); if (enumConstants != null) { - String[] enumValues = _intr.findEnumValues(propClass, enumConstants, + String[] enumValues = _intr().findEnumValues(propClass, enumConstants, new String[enumConstants.length]); for (Enum en : enumConstants) { @@ -1156,7 +1156,7 @@ protected void _addEnumProps(Class propClass, Schema property) { } else if (useToString) { n = en.toString(); } else { - n = _intr.findEnumValue(en); + n = _intr().findEnumValue(en); } if (property instanceof StringSchema) { StringSchema sp = (StringSchema) property; @@ -1526,7 +1526,7 @@ protected void applyBeanValidatorAnnotations(Schema property, Annotation[] annot } private boolean resolveSubtypes(Schema model, BeanDescription bean, ModelConverterContext context, JsonView jsonViewAnnotation) { - final List types = _intr.findSubtypes(bean.getClassInfo()); + final List types = _intr().findSubtypes(bean.getClassInfo()); if (types == null) { return false; } @@ -1662,7 +1662,7 @@ private void removeSuperClassAndInterfaceSubTypes(List types, BeanDes private void removeSuperSubTypes(List resultTypes, Class superClass) { JavaType superType = _mapper.constructType(superClass); BeanDescription superBean = _mapper.getSerializationConfig().introspect(superType); - final List superTypes = _intr.findSubtypes(superBean.getClassInfo()); + final List superTypes = _intr().findSubtypes(superBean.getClassInfo()); if (superTypes != null) { resultTypes.removeAll(superTypes); }