Skip to content

Commit c7fe2b2

Browse files
committed
Upgrade swagger-core to version 2.2.34
1 parent e569451 commit c7fe2b2

File tree

25 files changed

+772
-707
lines changed

25 files changed

+772
-707
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@
5555
<central-publishing-maven-plugin.version>0.7.0
5656
</central-publishing-maven-plugin.version>
5757
<flatten-maven-plugin.version>1.5.0</flatten-maven-plugin.version>
58-
<swagger-api.version>2.2.30</swagger-api.version>
58+
<swagger-api.version>2.2.34</swagger-api.version>
5959
<swagger-ui.version>5.21.0</swagger-ui.version>
6060
<gmavenplus-plugin.version>1.13.1</gmavenplus-plugin.version>
6161
<jjwt.version>0.9.1</jjwt.version>

springdoc-openapi-starter-common/src/main/java/org/springdoc/core/converters/ModelConverterRegistrar.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131

3232
import io.swagger.v3.core.converter.ModelConverter;
3333
import io.swagger.v3.core.converter.ModelConverters;
34+
import io.swagger.v3.core.jackson.ModelResolver;
35+
import io.swagger.v3.core.util.Json31;
3436
import org.apache.commons.lang3.reflect.FieldUtils;
3537
import org.slf4j.Logger;
3638
import org.slf4j.LoggerFactory;
@@ -53,6 +55,12 @@ public class ModelConverterRegistrar {
5355
*/
5456
private final ModelConverters modelConvertersInstance;
5557

58+
59+
/**
60+
* The singleton fallback instance.
61+
*/
62+
private static volatile ModelConverters modelConvertersFallbackInstance;
63+
5664
/**
5765
* Instantiates a new Model converter registrar.
5866
*
@@ -66,8 +74,30 @@ public ModelConverterRegistrar(List<ModelConverter> modelConverters, SpringDocCo
6674
registeredConverterOptional.ifPresent(modelConvertersInstance::removeConverter);
6775
modelConvertersInstance.addConverter(modelConverter);
6876
}
77+
if (springDocConfigProperties.isOpenapi31()) {
78+
initializeFallbackInstance();
79+
}
6980
}
7081

82+
/**
83+
* Initialize fallback instance.
84+
*/
85+
private static synchronized void initializeFallbackInstance() {
86+
if (modelConvertersFallbackInstance == null) {
87+
modelConvertersFallbackInstance = new ModelConverters(true);
88+
modelConvertersFallbackInstance.addConverter(new ModelResolver(Json31.mapper()));
89+
}
90+
}
91+
92+
/**
93+
* Gets model converters fallback instance.
94+
*
95+
* @return the model converters fallback instance
96+
*/
97+
public static ModelConverters getModelConvertersFallbackInstance() {
98+
return modelConvertersFallbackInstance;
99+
}
100+
71101
/**
72102
* Gets registered converter same as.
73103
*

springdoc-openapi-starter-common/src/main/java/org/springdoc/core/customizers/DataRestDelegatingMethodParameterCustomizer.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -449,6 +449,11 @@ public Class<?> contains() {
449449
return parameterSchema.$dynamicAnchor();
450450
}
451451

452+
@Override
453+
public String $dynamicRef() {
454+
return parameterSchema.$dynamicRef();
455+
}
456+
452457
@Override
453458
public String contentEncoding() {
454459
return parameterSchema.contentEncoding();
@@ -836,6 +841,11 @@ public Class<?> contains() {
836841
return schema.$dynamicAnchor();
837842
}
838843

844+
@Override
845+
public String $dynamicRef() {
846+
return schema.$dynamicRef();
847+
}
848+
839849
@Override
840850
public String contentEncoding() {
841851
return schema.contentEncoding();

springdoc-openapi-starter-common/src/main/java/org/springdoc/core/fn/builders/schema/Builder.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,11 @@ public class Builder {
299299
*/
300300
private String $dynamicAnchor = "";
301301

302+
/**
303+
* The Dynamic ref.
304+
*/
305+
private String $dynamicRef = "";
306+
302307
/**
303308
* The Content encoding.
304309
*/
@@ -1149,6 +1154,11 @@ public Class<?> contains() {
11491154
return $dynamicAnchor;
11501155
}
11511156

1157+
@Override
1158+
public String $dynamicRef() {
1159+
return $dynamicRef;
1160+
}
1161+
11521162
@Override
11531163
public String contentEncoding() {
11541164
return contentEncoding;

springdoc-openapi-starter-common/src/main/java/org/springdoc/core/service/OpenAPIService.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -706,8 +706,10 @@ private Info resolveProperties(Info info, Map<String, Object> extensions, Locale
706706

707707
if (extensions != null) {
708708
Map<String, Object> extensionsResolved = propertyResolverUtils.resolveExtensions(locale, extensions);
709-
if (propertyResolverUtils.isOpenapi31())
709+
if (propertyResolverUtils.isOpenapi31()){
710710
extensionsResolved.forEach(info::addExtension31);
711+
info.setExtensions(extensionsResolved);
712+
}
711713
else
712714
info.setExtensions(extensionsResolved);
713715
}

springdoc-openapi-starter-common/src/main/java/org/springdoc/core/utils/SpringDocAnnotationsUtils.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
import org.apache.commons.lang3.StringUtils;
6666
import org.slf4j.Logger;
6767
import org.slf4j.LoggerFactory;
68+
import org.springdoc.core.converters.ModelConverterRegistrar;
6869

6970
import org.springframework.core.MethodParameter;
7071
import org.springframework.core.annotation.AnnotationUtils;
@@ -139,7 +140,31 @@ public static Schema extractSchema(Components components, Type returnType, JsonV
139140
new AnnotatedType(returnType)
140141
.resolveAsRef(true).jsonViewAnnotation(jsonView).ctxAnnotations(annotations));
141142
}
143+
// Handle ClassCastException - related to https://github.com/swagger-api/swagger-core/issues/4904
144+
catch (ClassCastException e) {
145+
if (openapi31) {
146+
try {
147+
resolvedSchema = ModelConverterRegistrar.getModelConvertersFallbackInstance()
148+
.resolveAsResolvedSchema(
149+
new AnnotatedType(returnType)
150+
.resolveAsRef(true)
151+
.jsonViewAnnotation(jsonView)
152+
.ctxAnnotations(annotations));
153+
} catch (Exception fallbackEx) {
154+
LOGGER.warn(Constants.GRACEFUL_EXCEPTION_OCCURRED, fallbackEx);
155+
return null;
156+
}
157+
} else {
158+
LOGGER.warn(Constants.GRACEFUL_EXCEPTION_OCCURRED, e);
159+
return null;
160+
}
161+
}
142162
catch (Exception e) {
163+
if(e instanceof ClassCastException && openapi31) {
164+
resolvedSchema = ModelConverterRegistrar.getModelConvertersFallbackInstance()
165+
.resolveAsResolvedSchema(new AnnotatedType(returnType)
166+
.resolveAsRef(true).jsonViewAnnotation(jsonView).ctxAnnotations(annotations));
167+
}
143168
LOGGER.warn(Constants.GRACEFUL_EXCEPTION_OCCURRED, e);
144169
return null;
145170
}

springdoc-openapi-starter-webmvc-api/src/test/java/test/org/springdoc/api/v31/app193/SpringDocApp193Test.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
4040
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
4141

42-
@SpringBootTest(properties = { "springdoc.api-docs.version=openapi_3_1" })
42+
@SpringBootTest(properties = { "springdoc.api-docs.version=openapi_3_1", "springdoc.remove-broken-reference-definitions=false"})
4343
public class SpringDocApp193Test extends AbstractCommonTest {
4444

4545
@Test

0 commit comments

Comments
 (0)