Skip to content

Commit 9223330

Browse files
Merge branch 'master' into fix/annotation-introspector-caching
2 parents 4a24f4d + dc8785e commit 9223330

File tree

88 files changed

+3335
-222
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

88 files changed

+3335
-222
lines changed

CI/post-release.sh

+3
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ sc_find="io.swagger.core.v3:swagger-jaxrs2:$SC_VERSION"
4444
sc_replace="io.swagger.core.v3:swagger-jaxrs2:$SC_NEXT_VERSION-SNAPSHOT"
4545
sed -i -e "s/$sc_find/$sc_replace/g" $CUR/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java
4646

47+
sc_find="<version>$SC_VERSION<\/version>"
48+
sc_replace="<version>$SC_NEXT_VERSION-SNAPSHOT<\/version>"
49+
sed -i -e "s/$sc_find/$sc_replace/g" $CUR/modules/swagger-java17-support/pom.xml
4750

4851
#####################
4952
### Copy scripts to temp folder, as they are not available when checking out different branch or repo

CI/prepare-release.sh

+4
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,10 @@ sc_find="<version>$SC_LAST_RELEASE<\/version>"
7373
sc_replace="<version>$SC_VERSION<\/version>"
7474
sed -i -e "s/$sc_find/$sc_replace/g" $CUR/modules/swagger-maven-plugin/README.md
7575

76+
sc_find="<version>$SC_LAST_RELEASE<\/version>"
77+
sc_replace="<version>$SC_VERSION<\/version>"
78+
sed -i -e "s/$sc_find/$sc_replace/g" $CUR/modules/swaggerjava17-support/pom.xml
79+
7680
#####################
7781
### build and test maven ###
7882
#####################

README.md

+4-2
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@ The OpenAPI Specification has undergone several revisions since initial creation
2323

2424
Swagger core Version | Release Date | OpenAPI Spec compatibility | Notes | Status
2525
------------------------- | ------------ | -------------------------- | ----- | ----
26-
2.2.23 (**current stable**)| 2024-08-28 | 3.x | [tag v2.2.23](https://github.com/swagger-api/swagger-core/tree/v2.2.23) | Supported
26+
2.2.25 (**current stable**)| 2024-10-02 | 3.x | [tag v2.2.25](https://github.com/swagger-api/swagger-core/tree/v2.2.25) | Supported
27+
2.2.24 | 2024-09-23 | 3.x | [tag v2.2.24](https://github.com/swagger-api/swagger-core/tree/v2.2.24) | Supported
28+
2.2.23 | 2024-08-28 | 3.x | [tag v2.2.23](https://github.com/swagger-api/swagger-core/tree/v2.2.23) | Supported
2729
2.2.22 | 2024-05-15 | 3.x | [tag v2.2.22](https://github.com/swagger-api/swagger-core/tree/v2.2.22) | Supported
2830
2.2.21 | 2024-03-20 | 3.x | [tag v2.2.21](https://github.com/swagger-api/swagger-core/tree/v2.2.21) | Supported
2931
2.2.20 | 2023-12-19 | 3.x | [tag v2.2.20](https://github.com/swagger-api/swagger-core/tree/v2.2.20) | Supported
@@ -116,7 +118,7 @@ You need the following installed and available in your $PATH:
116118
* Jackson 2.4.5 or greater
117119

118120

119-
### To build from source (currently 2.2.24-SNAPSHOT)
121+
### To build from source (currently 2.2.26-SNAPSHOT)
120122
```
121123
# first time building locally
122124
mvn -N

modules/swagger-annotations/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<parent>
44
<groupId>io.swagger.core.v3</groupId>
55
<artifactId>swagger-project</artifactId>
6-
<version>2.2.24-SNAPSHOT</version>
6+
<version>2.2.26-SNAPSHOT</version>
77
<relativePath>../..</relativePath>
88
</parent>
99
<modelVersion>4.0.0</modelVersion>

modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Schema.java

+23-2
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@
237237
boolean writeOnly() default false;
238238

239239
/**
240-
* Allows to specify the access mode (AccessMode.READ_ONLY, READ_WRITE)
240+
* Allows to specify the access mode (AccessMode.READ_ONLY, WRITE_ONLY, READ_WRITE)
241241
*
242242
* AccessMode.READ_ONLY: value will not be written to during a request but may be returned during a response.
243243
* AccessMode.WRITE_ONLY: value will only be written to during a request but not returned during a response.
@@ -246,7 +246,7 @@
246246
* @return the accessMode for this schema (property)
247247
*
248248
*/
249-
AccessMode accessMode() default AccessMode.AUTO;
249+
AccessMode accessMode() default AccessMode.AUTO;
250250

251251
/**
252252
* Provides an example of the schema. When associated with a specific media type, the example string shall be parsed by the consumer to be treated as an object or an array.
@@ -554,6 +554,14 @@ enum RequiredMode {
554554
NOT_REQUIRED;
555555
}
556556

557+
enum SchemaResolution {
558+
AUTO,
559+
DEFAULT,
560+
INLINE,
561+
ALL_OF,
562+
ALL_OF_REF;
563+
}
564+
557565
/**
558566
* Allows to specify the dependentRequired value
559567
**
@@ -616,4 +624,17 @@ enum RequiredMode {
616624
*/
617625
@OpenAPI31
618626
String _const() default "";
627+
628+
/**
629+
* Allows to specify the schema resolution mode for object schemas
630+
*
631+
* SchemaResolution.DEFAULT: bundled into components/schemas, $ref with no siblings
632+
* SchemaResolution.INLINE: inline schema, no $ref
633+
* SchemaResolution.ALL_OF: bundled into components/schemas, $ref and any context annotation resolution into allOf
634+
* SchemaResolution.ALL_OF_REF: bundled into components/schemas, $ref into allOf, context annotation resolution into root
635+
*
636+
* @return the schema resolution mode for this schema
637+
*
638+
*/
639+
SchemaResolution schemaResolution() default SchemaResolution.AUTO;
619640
}

modules/swagger-core/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<parent>
44
<groupId>io.swagger.core.v3</groupId>
55
<artifactId>swagger-project</artifactId>
6-
<version>2.2.24-SNAPSHOT</version>
6+
<version>2.2.26-SNAPSHOT</version>
77
<relativePath>../..</relativePath>
88
</parent>
99
<modelVersion>4.0.0</modelVersion>

modules/swagger-core/src/main/java/io/swagger/v3/core/converter/ModelConverters.java

+33
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,15 @@ public ModelConverters(boolean openapi31) {
4242
}
4343
}
4444

45+
public ModelConverters(boolean openapi31, Schema.SchemaResolution schemaResolution) {
46+
converters = new CopyOnWriteArrayList<>();
47+
if (openapi31) {
48+
converters.add(new ModelResolver(Json31.mapper()).openapi31(true).schemaResolution(schemaResolution));
49+
} else {
50+
converters.add(new ModelResolver(Json.mapper()).schemaResolution(schemaResolution));
51+
}
52+
}
53+
4554
public Set<String> getSkippedPackages() {
4655
return skippedPackages;
4756
}
@@ -61,6 +70,30 @@ public static ModelConverters getInstance(boolean openapi31) {
6170
return SINGLETON;
6271
}
6372

73+
public static void reset() {
74+
synchronized (ModelConverters.class) {
75+
SINGLETON = null;
76+
SINGLETON31 = null;
77+
}
78+
}
79+
80+
public static ModelConverters getInstance(boolean openapi31, Schema.SchemaResolution schemaResolution) {
81+
synchronized (ModelConverters.class) {
82+
if (openapi31) {
83+
if (SINGLETON31 == null) {
84+
SINGLETON31 = new ModelConverters(openapi31, Schema.SchemaResolution.DEFAULT);
85+
init(SINGLETON31);
86+
}
87+
return SINGLETON31;
88+
}
89+
if (SINGLETON == null) {
90+
SINGLETON = new ModelConverters(openapi31, schemaResolution);
91+
init(SINGLETON);
92+
}
93+
return SINGLETON;
94+
}
95+
}
96+
6497
private static void init(ModelConverters converter) {
6598
converter.addPackageToSkip("java.lang");
6699
converter.addPackageToSkip("groovy.lang");

modules/swagger-core/src/main/java/io/swagger/v3/core/filter/SpecFilter.java

+85-15
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ public OpenAPI filter(OpenAPI openAPI, OpenAPISpecFilter filter, Map<String, Lis
8585

8686
if (filteredOpenAPI.getWebhooks() != null) {
8787
for (String resourcePath : filteredOpenAPI.getWebhooks().keySet()) {
88-
PathItem pathItem = filteredOpenAPI.getPaths().get(resourcePath);
88+
PathItem pathItem = filteredOpenAPI.getWebhooks().get(resourcePath);
8989

9090
PathItem filteredPathItem = filterPathItem(filter, pathItem, resourcePath, params, cookies, headers);
9191
PathItem clonedPathItem = cloneFilteredPathItem(filter,filteredPathItem, resourcePath, params, cookies, headers, allowedTags, filteredTags);
@@ -350,38 +350,98 @@ private void addPathItemSchemaRef(PathItem pathItem, Set<String> referencedDefin
350350
Map<PathItem.HttpMethod, Operation> ops = pathItem.readOperationsMap();
351351
for (Operation op : ops.values()) {
352352
if (op.getRequestBody() != null) {
353-
addContentSchemaRef(op.getRequestBody().getContent(), referencedDefinitions);
353+
addRequestBodySchemaRef(op.getRequestBody(), referencedDefinitions);
354354
}
355355
if (op.getResponses() != null) {
356356
for (String keyResponses : op.getResponses().keySet()) {
357357
ApiResponse response = op.getResponses().get(keyResponses);
358-
if (response.getHeaders() != null) {
359-
for (String keyHeaders : response.getHeaders().keySet()) {
360-
Header header = response.getHeaders().get(keyHeaders);
361-
addSchemaRef(header.getSchema(), referencedDefinitions);
362-
addContentSchemaRef(header.getContent(), referencedDefinitions);
363-
}
364-
}
365-
addContentSchemaRef(response.getContent(), referencedDefinitions);
358+
addApiResponseSchemaRef(response, referencedDefinitions);
366359
}
367360
}
368361
if (op.getParameters() != null) {
369362
for (Parameter parameter : op.getParameters()) {
370-
addSchemaRef(parameter.getSchema(), referencedDefinitions);
371-
addContentSchemaRef(parameter.getContent(), referencedDefinitions);
363+
addParameterSchemaRef(parameter, referencedDefinitions);
372364
}
373365
}
374366
if (op.getCallbacks() != null) {
375367
for (String keyCallback : op.getCallbacks().keySet()) {
376368
Callback callback = op.getCallbacks().get(keyCallback);
377-
for (PathItem callbackPathItem : callback.values()) {
378-
addPathItemSchemaRef(callbackPathItem, referencedDefinitions);
379-
}
369+
addCallbackSchemaRef(callback, referencedDefinitions);
380370
}
381371
}
382372
}
383373
}
384374

375+
private void addApiResponseSchemaRef(ApiResponse response, Set<String> referencedDefinitions) {
376+
if (response.getHeaders() != null) {
377+
for (String keyHeaders : response.getHeaders().keySet()) {
378+
Header header = response.getHeaders().get(keyHeaders);
379+
addHeaderSchemaRef(header, referencedDefinitions);
380+
}
381+
}
382+
addContentSchemaRef(response.getContent(), referencedDefinitions);
383+
}
384+
385+
private void addRequestBodySchemaRef(RequestBody requestBody, Set<String> referencedDefinitions) {
386+
addContentSchemaRef(requestBody.getContent(), referencedDefinitions);
387+
}
388+
389+
private void addParameterSchemaRef(Parameter parameter, Set<String> referencedDefinitions) {
390+
addSchemaRef(parameter.getSchema(), referencedDefinitions);
391+
addContentSchemaRef(parameter.getContent(), referencedDefinitions);
392+
}
393+
394+
private void addHeaderSchemaRef(Header header, Set<String> referencedDefinitions) {
395+
addSchemaRef(header.getSchema(), referencedDefinitions);
396+
addContentSchemaRef(header.getContent(), referencedDefinitions);
397+
}
398+
399+
private void addCallbackSchemaRef(Callback callback, Set<String> referencedDefinitions){
400+
for (PathItem callbackPathItem : callback.values()) {
401+
addPathItemSchemaRef(callbackPathItem, referencedDefinitions);
402+
}
403+
}
404+
405+
private void addComponentsSchemaRef(Components components, Set<String> referencedDefinitions){
406+
407+
if (components.getResponses() != null){
408+
for (String resourcePath : components.getResponses().keySet()) {
409+
ApiResponse apiResponse = components.getResponses().get(resourcePath);
410+
addApiResponseSchemaRef(apiResponse, referencedDefinitions);
411+
}
412+
}
413+
if (components.getRequestBodies() != null){
414+
for (String requestBody : components.getRequestBodies().keySet()) {
415+
RequestBody requestBody1 = components.getRequestBodies().get(requestBody);
416+
addRequestBodySchemaRef(requestBody1, referencedDefinitions);
417+
}
418+
}
419+
if (components.getParameters() != null){
420+
for (String parameter : components.getParameters().keySet()) {
421+
Parameter resourceParam = components.getParameters().get(parameter);
422+
addParameterSchemaRef(resourceParam, referencedDefinitions);
423+
}
424+
}
425+
if (components.getHeaders() != null){
426+
for (String header : components.getHeaders().keySet()) {
427+
Header resourceHeader = components.getHeaders().get(header);
428+
addHeaderSchemaRef(resourceHeader, referencedDefinitions);
429+
}
430+
}
431+
if (components.getCallbacks() != null){
432+
for (String callback : components.getCallbacks().keySet()){
433+
Callback resourceCallback = components.getCallbacks().get(callback);
434+
addCallbackSchemaRef(resourceCallback, referencedDefinitions);
435+
}
436+
}
437+
if (components.getPathItems() != null){
438+
for (String resourcePath : components.getPathItems().keySet()){
439+
PathItem pathItem = components.getPathItems().get(resourcePath);
440+
addPathItemSchemaRef(pathItem, referencedDefinitions);
441+
}
442+
}
443+
}
444+
385445
protected OpenAPI removeBrokenReferenceDefinitions(OpenAPI openApi) {
386446

387447
if (openApi == null || openApi.getComponents() == null || openApi.getComponents().getSchemas() == null) {
@@ -395,6 +455,16 @@ protected OpenAPI removeBrokenReferenceDefinitions(OpenAPI openApi) {
395455
addPathItemSchemaRef(pathItem, referencedDefinitions);
396456
}
397457
}
458+
if (openApi.getWebhooks() != null){
459+
for (String resourcePath : openApi.getWebhooks().keySet()) {
460+
PathItem pathItem = openApi.getWebhooks().get(resourcePath);
461+
addPathItemSchemaRef(pathItem, referencedDefinitions);
462+
}
463+
}
464+
if (openApi.getComponents() != null){
465+
Components components = openApi.getComponents();
466+
addComponentsSchemaRef(components, referencedDefinitions);
467+
}
398468

399469
referencedDefinitions.addAll(resolveAllNestedRefs(referencedDefinitions, referencedDefinitions, openApi));
400470
openApi.getComponents()

0 commit comments

Comments
 (0)