From 769941a19763c329db074dded43fcc305074ccdb Mon Sep 17 00:00:00 2001 From: MateuszPol Date: Fri, 28 Apr 2023 09:49:58 +0200 Subject: [PATCH 001/131] Added possibility to provide JSON/YAML Factory to initialise ObjectMapper (#4396) * Added possibility to provide custom JsonFactory/YamlFactory to yaml mapper initializer. * Cleared unused import in ObjectMapperFactory * - Removed mapper methods from Json/Json31/Yaml/Yaml31 classes - Added public methods to ObjectMapperFactory to give possibility to create mapper with custom factory * Redundant space remove in ObjectMapperFactory * Changed access modifiers to public in all methods of ObjectMapperFactory --- .../v3/core/util/ObjectMapperFactory.java | 31 ++- .../serialization/JsonSerializationTest.java | 52 +++++ .../OpenAPI3_1SerializationTest.java | 42 +++- .../specFiles/3.1.0/petstore-3.1.json | 200 ++++++++++++++++++ ...onSerialization-expected-petstore-3.0.json | 177 ++++++++++++++++ 5 files changed, 489 insertions(+), 13 deletions(-) create mode 100644 modules/swagger-core/src/test/resources/specFiles/3.1.0/petstore-3.1.json create mode 100644 modules/swagger-core/src/test/resources/specFiles/jsonSerialization-expected-petstore-3.0.json diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/ObjectMapperFactory.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/ObjectMapperFactory.java index 1376616e80..a02539f54c 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/ObjectMapperFactory.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/ObjectMapperFactory.java @@ -73,11 +73,23 @@ public class ObjectMapperFactory { - protected static ObjectMapper createJson() { + public static ObjectMapper createJson(JsonFactory jsonFactory) { + return create(jsonFactory, false); + } + + public static ObjectMapper createJson() { return create(null, false); } - protected static ObjectMapper createYaml(boolean openapi31) { + public static ObjectMapper createYaml(YAMLFactory yamlFactory) { + return create(yamlFactory, false); + } + + public static ObjectMapper createYaml() { + return createYaml(false); + } + + public static ObjectMapper createYaml(boolean openapi31) { YAMLFactory factory = new YAMLFactory(); factory.disable(YAMLGenerator.Feature.WRITE_DOC_START_MARKER); factory.enable(YAMLGenerator.Feature.MINIMIZE_QUOTES); @@ -87,20 +99,23 @@ protected static ObjectMapper createYaml(boolean openapi31) { return create(factory, openapi31); } - protected static ObjectMapper createYaml() { - return createYaml(false); + public static ObjectMapper createJson31(JsonFactory jsonFactory) { + return create(jsonFactory, true); } - protected static ObjectMapper createJson31() { + public static ObjectMapper createJson31() { return create(null, true); } + public static ObjectMapper createYaml31(YAMLFactory yamlFactory) { + return create(yamlFactory, true); + } - protected static ObjectMapper createYaml31() { + public static ObjectMapper createYaml31() { return createYaml(true); } - private static ObjectMapper create(JsonFactory jsonFactory, boolean openapi31) { + public static ObjectMapper create(JsonFactory jsonFactory, boolean openapi31) { ObjectMapper mapper = jsonFactory == null ? new ObjectMapper() : new ObjectMapper(jsonFactory); if (!openapi31) { @@ -215,7 +230,7 @@ public JsonSerializer modifySerializer( return mapper; } - protected static ObjectMapper createJsonConverter() { + public static ObjectMapper createJsonConverter() { ObjectMapper mapper = new ObjectMapper(); diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/serialization/JsonSerializationTest.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/serialization/JsonSerializationTest.java index 00d2ea0b4f..2cc3c5deab 100644 --- a/modules/swagger-core/src/test/java/io/swagger/v3/core/serialization/JsonSerializationTest.java +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/serialization/JsonSerializationTest.java @@ -1,7 +1,11 @@ package io.swagger.v3.core.serialization; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.dataformat.yaml.JacksonYAMLParseException; +import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; import io.swagger.v3.core.matchers.SerializationMatchers; import io.swagger.v3.core.util.Json; +import io.swagger.v3.core.util.ObjectMapperFactory; import io.swagger.v3.core.util.ResourceUtils; import io.swagger.v3.core.util.Yaml; import io.swagger.v3.oas.models.OpenAPI; @@ -12,6 +16,7 @@ import io.swagger.v3.oas.models.responses.ApiResponses; import io.swagger.v3.oas.models.servers.Server; import org.testng.annotations.Test; +import org.yaml.snakeyaml.LoaderOptions; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertFalse; @@ -86,4 +91,51 @@ public void testSerializeNullInSchemaExample() throws Exception { SerializationMatchers.assertEqualsToYaml(deser, yaml); } + + @Test + public void testSerializeJSONWithCustomFactory() throws Exception { + // given + JsonFactory jsonFactory = new JsonFactory(); + final String json = ResourceUtils.loadClassResource(getClass(), "specFiles/petstore-3.0.json"); + final String expectedJson = ResourceUtils.loadClassResource(getClass(), "specFiles/jsonSerialization-expected-petstore-3.0.json"); + + // when + OpenAPI deser = ObjectMapperFactory.createJson(jsonFactory).readValue(json, OpenAPI.class); + + // then + SerializationMatchers.assertEqualsToJson(deser, expectedJson); + } + + @Test + public void testSerializeYAMLWithCustomFactory() throws Exception { + // given + LoaderOptions loaderOptions = new LoaderOptions(); + loaderOptions.setCodePointLimit(5 * 1024 * 1024); + YAMLFactory yamlFactory = YAMLFactory.builder() + .loaderOptions(loaderOptions) + .build(); + final String yaml = ResourceUtils.loadClassResource(getClass(), "specFiles/null-example.yaml"); + + // when + OpenAPI deser = ObjectMapperFactory.createYaml(yamlFactory).readValue(yaml, OpenAPI.class); + + // then + SerializationMatchers.assertEqualsToYaml(deser, yaml); + } + + @Test(expectedExceptions = JacksonYAMLParseException.class) + public void testSerializeYAMLWithCustomFactoryAndCodePointLimitReached() throws Exception { + // given + LoaderOptions loaderOptions = new LoaderOptions(); + loaderOptions.setCodePointLimit(1); + YAMLFactory yamlFactory = YAMLFactory.builder() + .loaderOptions(loaderOptions) + .build(); + final String yaml = ResourceUtils.loadClassResource(getClass(), "specFiles/null-example.yaml"); + + // when + OpenAPI deser = ObjectMapperFactory.createYaml(yamlFactory).readValue(yaml, OpenAPI.class); + + // then - Throw JacksonYAMLParseException + } } diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/serialization/OpenAPI3_1SerializationTest.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/serialization/OpenAPI3_1SerializationTest.java index 234c5f5a62..97c5d02d98 100644 --- a/modules/swagger-core/src/test/java/io/swagger/v3/core/serialization/OpenAPI3_1SerializationTest.java +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/serialization/OpenAPI3_1SerializationTest.java @@ -1,12 +1,12 @@ package io.swagger.v3.core.serialization; +import com.fasterxml.jackson.core.JsonFactory; import com.fasterxml.jackson.core.util.DefaultIndenter; +import com.fasterxml.jackson.databind.json.JsonMapper; +import com.fasterxml.jackson.dataformat.yaml.JacksonYAMLParseException; +import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; import io.swagger.v3.core.matchers.SerializationMatchers; -import io.swagger.v3.core.util.Json; -import io.swagger.v3.core.util.Json31; -import io.swagger.v3.core.util.ResourceUtils; -import io.swagger.v3.core.util.Yaml; -import io.swagger.v3.core.util.Yaml31; +import io.swagger.v3.core.util.*; import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.Operation; @@ -30,6 +30,7 @@ import io.swagger.v3.oas.models.responses.ApiResponses; import io.swagger.v3.oas.models.security.SecurityScheme; import org.testng.annotations.Test; +import org.yaml.snakeyaml.LoaderOptions; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotNull; @@ -351,6 +352,21 @@ public void testSerializePetstore() throws Exception { } + @Test + public void testJSONSerializePetstoreWithCustomFactory() throws Exception { + + //given + final String jsonString = ResourceUtils.loadClassResource(getClass(), "specFiles/3.1.0/petstore-3.1.json"); + JsonFactory jsonFactory = new JsonFactory(); + + //when + final OpenAPI swagger = ObjectMapperFactory.createJson31(jsonFactory).readValue(jsonString, OpenAPI.class); + + // then + assertNotNull(swagger); + SerializationMatchers.assertEqualsToJson31(swagger, jsonString); + } + @Test public void testInfoSerialization() { OpenAPI openAPI = new OpenAPI() @@ -1497,6 +1513,22 @@ public void testBooleanAdditionalPropertiesSerialization() throws Exception{ assertTrue(Boolean.TRUE.equals(openAPI.getComponents().getSchemas().get("test").getAdditionalProperties())); } + @Test(expectedExceptions = JacksonYAMLParseException.class) + public void testSerializeYAML31WithCustomFactoryAndCodePointLimitReached() throws Exception { + // given + LoaderOptions loaderOptions = new LoaderOptions(); + loaderOptions.setCodePointLimit(1); + YAMLFactory yamlFactory = YAMLFactory.builder() + .loaderOptions(loaderOptions) + .build(); + final String yaml = ResourceUtils.loadClassResource(getClass(), "specFiles/petstore-3.0.yaml"); + + // when + OpenAPI deser = ObjectMapperFactory.createYaml31(yamlFactory).readValue(yaml, OpenAPI.class); + + // then - Throw JacksonYAMLParseException + } + private static String withJacksonSystemLineSeparator(String s) { return s.replace("\n", DefaultIndenter.SYS_LF); } diff --git a/modules/swagger-core/src/test/resources/specFiles/3.1.0/petstore-3.1.json b/modules/swagger-core/src/test/resources/specFiles/3.1.0/petstore-3.1.json new file mode 100644 index 0000000000..7f09963f99 --- /dev/null +++ b/modules/swagger-core/src/test/resources/specFiles/3.1.0/petstore-3.1.json @@ -0,0 +1,200 @@ +{ + "openapi": "3.1.0", + "info": { + "version": "1.0.0", + "title": "Swagger Petstore", + "license": { + "name": "MIT", + "identifier": "test" + } + }, + "servers": [ + { + "url": "http://petstore.swagger.io/v1" + } + ], + "webhooks": { + "newPet": { + "post": { + "requestBody": { + "description": "Information about a new pet in the system", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Pet" + } + } + } + }, + "responses": { + "200": { + "description": "Return a 200 status to indicate that the data was received successfully" + } + } + } + } + }, + "paths": { + "/pets": { + "get": { + "summary": "List all pets", + "operationId": "listPets", + "tags": [ + "pets" + ], + "parameters": [ + { + "name": "limit", + "in": "query", + "description": "How many items to return at one time (max 100)", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "An paged array of pets", + "headers": { + "x-next": { + "description": "A link to the next page of responses", + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Pets" + } + } + } + }, + "default": { + "description": "unexpected error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + } + }, + "post": { + "summary": "Create a pet", + "operationId": "createPets", + "tags": [ + "pets" + ], + "responses": { + "201": { + "description": "Null response" + }, + "default": { + "description": "unexpected error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + } + } + }, + "/pets/{petId}": { + "get": { + "summary": "Info for a specific pet", + "operationId": "showPetById", + "tags": [ + "pets" + ], + "parameters": [ + { + "name": "petId", + "in": "path", + "required": true, + "description": "The id of the pet to retrieve", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Expected response to a valid request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Pets" + } + } + } + }, + "default": { + "description": "unexpected error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + } + } + } + }, + "components": { + "schemas": { + "Pet": { + "required": [ + "id", + "name" + ], + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": [ + "string", + "integer" + ] + }, + "tag": { + "type": "string" + } + } + }, + "Pets": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Pet" + } + }, + "Error": { + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + } + } + } + } + } +} \ No newline at end of file diff --git a/modules/swagger-core/src/test/resources/specFiles/jsonSerialization-expected-petstore-3.0.json b/modules/swagger-core/src/test/resources/specFiles/jsonSerialization-expected-petstore-3.0.json new file mode 100644 index 0000000000..3973f339af --- /dev/null +++ b/modules/swagger-core/src/test/resources/specFiles/jsonSerialization-expected-petstore-3.0.json @@ -0,0 +1,177 @@ +{ + "openapi": "3.0.1", + "info": { + "title": "Swagger Petstore", + "license": { + "name": "MIT" + }, + "version": "1.0.0" + }, + "servers": [ + { + "url": "http://petstore.swagger.io/v1" + } + ], + "paths": { + "/pets": { + "get": { + "tags": [ + "pets" + ], + "summary": "List all pets", + "operationId": "listPets", + "parameters": [ + { + "name": "limit", + "in": "query", + "description": "How many items to return at one time (max 100)", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "An paged array of pets", + "headers": { + "x-next": { + "description": "A link to the next page of responses", + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Pets" + } + } + } + }, + "default": { + "description": "unexpected error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + } + }, + "post": { + "tags": [ + "pets" + ], + "summary": "Create a pet", + "operationId": "createPets", + "responses": { + "201": { + "description": "Null response" + }, + "default": { + "description": "unexpected error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + } + } + }, + "/pets/{petId}": { + "get": { + "tags": [ + "pets" + ], + "summary": "Info for a specific pet", + "operationId": "showPetById", + "parameters": [ + { + "name": "petId", + "in": "path", + "description": "The id of the pet to retrieve", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Expected response to a valid request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Pets" + } + } + } + }, + "default": { + "description": "unexpected error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + } + } + } + }, + "components": { + "schemas": { + "Pet": { + "required": [ + "id", + "name" + ], + "type": "object", + "properties": { + "tag": { + "type": "string" + }, + "id": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + } + } + }, + "Pets": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Pet" + } + }, + "Error": { + "required": [ + "code", + "message" + ], + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "code": { + "type": "integer", + "format": "int32" + } + } + } + } + } +} \ No newline at end of file From ff489c3127fe994ff00ff23bd9fea9988b9b2819 Mon Sep 17 00:00:00 2001 From: frantuma Date: Mon, 15 May 2023 09:51:00 +0000 Subject: [PATCH 002/131] prepare release 2.2.10 --- README.md | 5 +++-- modules/swagger-annotations/pom.xml | 2 +- modules/swagger-core/pom.xml | 2 +- .../swagger-eclipse-transformer-maven-plugin/pom.xml | 2 +- modules/swagger-gradle-plugin/README.md | 4 ++-- modules/swagger-gradle-plugin/gradle.properties | 2 +- .../io/swagger/v3/plugins/gradle/SwaggerPlugin.java | 2 +- .../v3/plugins/gradle/SwaggerResolveTest.java | 4 ++-- modules/swagger-integration/pom.xml | 2 +- .../swagger-jaxrs2-servlet-initializer-v2/pom.xml | 2 +- modules/swagger-jaxrs2-servlet-initializer/pom.xml | 2 +- modules/swagger-jaxrs2/pom.xml | 2 +- modules/swagger-maven-plugin/README.md | 12 ++++++------ modules/swagger-maven-plugin/pom.xml | 2 +- modules/swagger-models/pom.xml | 2 +- .../modules/swagger-annotations-jakarta/pom.xml | 2 +- .../modules/swagger-core-jakarta/pom.xml | 2 +- .../modules/swagger-integration-jakarta/pom.xml | 2 +- .../modules/swagger-jaxrs2-jakarta/pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../modules/swagger-maven-plugin-jakarta/pom.xml | 2 +- .../modules/swagger-models-jakarta/pom.xml | 2 +- modules/swagger-project-jakarta/pom.xml | 2 +- pom.xml | 2 +- 25 files changed, 34 insertions(+), 33 deletions(-) diff --git a/README.md b/README.md index d6b8c5d804..7feb8b7717 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,8 @@ The OpenAPI Specification has undergone several revisions since initial creation Swagger core Version | Release Date | OpenAPI Spec compatibility | Notes | Status ------------------------- | ------------ | -------------------------- | ----- | ---- -2.2.9 (**current stable**)| 2023-03-20 | 3.x | [tag v2.2.9](https://github.com/swagger-api/swagger-core/tree/v2.2.9) | Supported +2.2.10 (**current stable**)| 2023-05-15 | 3.x | [tag v2.2.10](https://github.com/swagger-api/swagger-core/tree/v2.2.10) | Supported +2.2.9 | 2023-03-20 | 3.x | [tag v2.2.9](https://github.com/swagger-api/swagger-core/tree/v2.2.9) | Supported 2.2.8 | 2023-01-06 | 3.x | [tag v2.2.8](https://github.com/swagger-api/swagger-core/tree/v2.2.8) | Supported 2.2.7 | 2022-11-15 | 3.x | [tag v2.2.7](https://github.com/swagger-api/swagger-core/tree/v2.2.7) | Supported 2.2.6 | 2022-11-02 | 3.x | [tag v2.2.6](https://github.com/swagger-api/swagger-core/tree/v2.2.6) | Supported @@ -95,7 +96,7 @@ You need the following installed and available in your $PATH: * Jackson 2.4.5 or greater -### To build from source (currently 2.2.10-SNAPSHOT) +### To build from source (currently 2.2.11-SNAPSHOT) ``` # first time building locally mvn -N diff --git a/modules/swagger-annotations/pom.xml b/modules/swagger-annotations/pom.xml index eced30c20d..1a7f4701af 100644 --- a/modules/swagger-annotations/pom.xml +++ b/modules/swagger-annotations/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.10-SNAPSHOT + 2.2.10 ../.. 4.0.0 diff --git a/modules/swagger-core/pom.xml b/modules/swagger-core/pom.xml index 03a83121d4..1182a42cb7 100644 --- a/modules/swagger-core/pom.xml +++ b/modules/swagger-core/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.10-SNAPSHOT + 2.2.10 ../.. 4.0.0 diff --git a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml index 74ee6a3c57..71f92d0ca1 100644 --- a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml +++ b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.10-SNAPSHOT + 2.2.10 ../.. 4.0.0 diff --git a/modules/swagger-gradle-plugin/README.md b/modules/swagger-gradle-plugin/README.md index 0976eb99fd..5b4c5028a0 100644 --- a/modules/swagger-gradle-plugin/README.md +++ b/modules/swagger-gradle-plugin/README.md @@ -26,7 +26,7 @@ Alternatively provide as value a classpath with the following dependencies (repl ``` plugins { - id "io.swagger.core.v3.swagger-gradle-plugin" version "2.2.9" + id "io.swagger.core.v3.swagger-gradle-plugin" version "2.2.10" } ``` ### Gradle 1.x and 2.0 @@ -43,7 +43,7 @@ buildscript { } } dependencies { - classpath "io.swagger.core.v3:swagger-gradle-plugin:2.2.9" + classpath "io.swagger.core.v3:swagger-gradle-plugin:2.2.10" } } diff --git a/modules/swagger-gradle-plugin/gradle.properties b/modules/swagger-gradle-plugin/gradle.properties index eb6be57f21..e0cd320291 100644 --- a/modules/swagger-gradle-plugin/gradle.properties +++ b/modules/swagger-gradle-plugin/gradle.properties @@ -1,2 +1,2 @@ -version=2.2.10-SNAPSHOT +version=2.2.10 jettyVersion=9.4.49.v20220914 diff --git a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java index a503550790..e1bc42f49f 100644 --- a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java +++ b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java @@ -16,7 +16,7 @@ public void apply(Project project) { config.defaultDependencies(new Action() { public void execute(DependencySet dependencies) { dependencies.add(project.getDependencies().create("org.apache.commons:commons-lang3:3.12.0")); - dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.10-SNAPSHOT")); + dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.10")); dependencies.add(project.getDependencies().create("javax.ws.rs:javax.ws.rs-api:2.1")); dependencies.add(project.getDependencies().create("javax.servlet:javax.servlet-api:3.1.0")); } diff --git a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java index 0ea50e49b8..9dea63b575 100644 --- a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java +++ b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java @@ -81,7 +81,7 @@ public void testSwaggerResolveTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.10-SNAPSHOT'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.10'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + @@ -154,7 +154,7 @@ public void testSwaggerResolveWithOAS31OptionTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.10-SNAPSHOT'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.10'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + diff --git a/modules/swagger-integration/pom.xml b/modules/swagger-integration/pom.xml index 83dfa31626..d092d0a76c 100644 --- a/modules/swagger-integration/pom.xml +++ b/modules/swagger-integration/pom.xml @@ -6,7 +6,7 @@ io.swagger.core.v3 swagger-project - 2.2.10-SNAPSHOT + 2.2.10 ../.. swagger-integration diff --git a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml index 53cdb3180e..af28d4feb3 100644 --- a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.10-SNAPSHOT + 2.2.10 ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2-servlet-initializer/pom.xml b/modules/swagger-jaxrs2-servlet-initializer/pom.xml index 50dfbe76f4..ad768b02e1 100644 --- a/modules/swagger-jaxrs2-servlet-initializer/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.10-SNAPSHOT + 2.2.10 ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2/pom.xml b/modules/swagger-jaxrs2/pom.xml index e1e382b528..1e0d3af1b0 100644 --- a/modules/swagger-jaxrs2/pom.xml +++ b/modules/swagger-jaxrs2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.10-SNAPSHOT + 2.2.10 ../../ 4.0.0 diff --git a/modules/swagger-maven-plugin/README.md b/modules/swagger-maven-plugin/README.md index ec76ce3602..f9a0457cfb 100644 --- a/modules/swagger-maven-plugin/README.md +++ b/modules/swagger-maven-plugin/README.md @@ -22,7 +22,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin - 2.2.9 + 2.2.10 openapi ${project.build.directory}/generatedtest @@ -47,7 +47,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-jaxrs2 - 2.2.9 + 2.2.10 @@ -73,7 +73,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin-jakarta - 2.2.9 + 2.2.10 openapi ${project.build.directory}/generatedtest @@ -98,7 +98,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-jaxrs2-jakarta - 2.2.9 + 2.2.10 @@ -126,7 +126,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin - 2.2.9 + 2.2.10 openapi ${project.build.directory}/generatedtest @@ -155,7 +155,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin-jakarta - 2.2.9 + 2.2.10 openapi ${project.build.directory}/generatedtest diff --git a/modules/swagger-maven-plugin/pom.xml b/modules/swagger-maven-plugin/pom.xml index 88840146ee..4426b92745 100644 --- a/modules/swagger-maven-plugin/pom.xml +++ b/modules/swagger-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.10-SNAPSHOT + 2.2.10 ../.. 4.0.0 diff --git a/modules/swagger-models/pom.xml b/modules/swagger-models/pom.xml index 10f1433493..51f1e0a3a9 100644 --- a/modules/swagger-models/pom.xml +++ b/modules/swagger-models/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.10-SNAPSHOT + 2.2.10 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml index cfd1bbf318..cd57bd00f8 100644 --- a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.10-SNAPSHOT + 2.2.10 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml index 90d51086d2..8f31d8310b 100644 --- a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.10-SNAPSHOT + 2.2.10 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml index f971d0d772..de1aaa231d 100644 --- a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.10-SNAPSHOT + 2.2.10 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml index 813458a571..b563ea902f 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.10-SNAPSHOT + 2.2.10 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml index bd20f4ba7f..ffd1e626f0 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.10-SNAPSHOT + 2.2.10 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml index 55bd5b5983..aa10c1db91 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.10-SNAPSHOT + 2.2.10 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml index 0a41a113e1..6dba08990a 100644 --- a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.10-SNAPSHOT + 2.2.10 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml index 726dc387d8..70199896bf 100644 --- a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.10-SNAPSHOT + 2.2.10 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/pom.xml b/modules/swagger-project-jakarta/pom.xml index 5274cfbbf1..7a1cb03c94 100644 --- a/modules/swagger-project-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/pom.xml @@ -6,7 +6,7 @@ pom swagger-project-jakarta swagger-project-jakarta - 2.2.10-SNAPSHOT + 2.2.10 https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git diff --git a/pom.xml b/pom.xml index edbf466617..ee48a888e9 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ pom swagger-project swagger-project - 2.2.10-SNAPSHOT + 2.2.10 https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git From 3231aaabc9ecbce6293e83e6c393023a1969a0ce Mon Sep 17 00:00:00 2001 From: frantuma Date: Mon, 15 May 2023 10:08:40 +0000 Subject: [PATCH 003/131] bump snapshot 2.2.11-SNAPSHOT --- modules/swagger-annotations/pom.xml | 2 +- modules/swagger-core/pom.xml | 2 +- modules/swagger-eclipse-transformer-maven-plugin/pom.xml | 2 +- modules/swagger-gradle-plugin/gradle.properties | 2 +- .../main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java | 2 +- .../java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java | 4 ++-- modules/swagger-integration/pom.xml | 2 +- modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml | 2 +- modules/swagger-jaxrs2-servlet-initializer/pom.xml | 2 +- modules/swagger-jaxrs2/pom.xml | 2 +- modules/swagger-maven-plugin/pom.xml | 2 +- modules/swagger-models/pom.xml | 2 +- .../modules/swagger-annotations-jakarta/pom.xml | 2 +- .../modules/swagger-core-jakarta/pom.xml | 2 +- .../modules/swagger-integration-jakarta/pom.xml | 2 +- .../modules/swagger-jaxrs2-jakarta/pom.xml | 2 +- .../swagger-jaxrs2-servlet-initializer-jakarta/pom.xml | 2 +- .../swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml | 2 +- .../modules/swagger-maven-plugin-jakarta/pom.xml | 2 +- .../modules/swagger-models-jakarta/pom.xml | 2 +- modules/swagger-project-jakarta/pom.xml | 2 +- pom.xml | 2 +- 22 files changed, 23 insertions(+), 23 deletions(-) diff --git a/modules/swagger-annotations/pom.xml b/modules/swagger-annotations/pom.xml index 1a7f4701af..636a237ca0 100644 --- a/modules/swagger-annotations/pom.xml +++ b/modules/swagger-annotations/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.10 + 2.2.11-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-core/pom.xml b/modules/swagger-core/pom.xml index 1182a42cb7..2f55a98109 100644 --- a/modules/swagger-core/pom.xml +++ b/modules/swagger-core/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.10 + 2.2.11-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml index 71f92d0ca1..598f1c6d30 100644 --- a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml +++ b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.10 + 2.2.11-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-gradle-plugin/gradle.properties b/modules/swagger-gradle-plugin/gradle.properties index e0cd320291..4da0bf58a1 100644 --- a/modules/swagger-gradle-plugin/gradle.properties +++ b/modules/swagger-gradle-plugin/gradle.properties @@ -1,2 +1,2 @@ -version=2.2.10 +version=2.2.11-SNAPSHOT jettyVersion=9.4.49.v20220914 diff --git a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java index e1bc42f49f..6e049e7a87 100644 --- a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java +++ b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java @@ -16,7 +16,7 @@ public void apply(Project project) { config.defaultDependencies(new Action() { public void execute(DependencySet dependencies) { dependencies.add(project.getDependencies().create("org.apache.commons:commons-lang3:3.12.0")); - dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.10")); + dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.11-SNAPSHOT")); dependencies.add(project.getDependencies().create("javax.ws.rs:javax.ws.rs-api:2.1")); dependencies.add(project.getDependencies().create("javax.servlet:javax.servlet-api:3.1.0")); } diff --git a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java index 9dea63b575..ffbe4ba762 100644 --- a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java +++ b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java @@ -81,7 +81,7 @@ public void testSwaggerResolveTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.10'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.11-SNAPSHOT'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + @@ -154,7 +154,7 @@ public void testSwaggerResolveWithOAS31OptionTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.10'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.11-SNAPSHOT'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + diff --git a/modules/swagger-integration/pom.xml b/modules/swagger-integration/pom.xml index d092d0a76c..67ca3ec409 100644 --- a/modules/swagger-integration/pom.xml +++ b/modules/swagger-integration/pom.xml @@ -6,7 +6,7 @@ io.swagger.core.v3 swagger-project - 2.2.10 + 2.2.11-SNAPSHOT ../.. swagger-integration diff --git a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml index af28d4feb3..937a9e614a 100644 --- a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.10 + 2.2.11-SNAPSHOT ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2-servlet-initializer/pom.xml b/modules/swagger-jaxrs2-servlet-initializer/pom.xml index ad768b02e1..d23618a837 100644 --- a/modules/swagger-jaxrs2-servlet-initializer/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.10 + 2.2.11-SNAPSHOT ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2/pom.xml b/modules/swagger-jaxrs2/pom.xml index 1e0d3af1b0..48993cc103 100644 --- a/modules/swagger-jaxrs2/pom.xml +++ b/modules/swagger-jaxrs2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.10 + 2.2.11-SNAPSHOT ../../ 4.0.0 diff --git a/modules/swagger-maven-plugin/pom.xml b/modules/swagger-maven-plugin/pom.xml index 4426b92745..c6d700ed20 100644 --- a/modules/swagger-maven-plugin/pom.xml +++ b/modules/swagger-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.10 + 2.2.11-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-models/pom.xml b/modules/swagger-models/pom.xml index 51f1e0a3a9..ef6de5dcb7 100644 --- a/modules/swagger-models/pom.xml +++ b/modules/swagger-models/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.10 + 2.2.11-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml index cd57bd00f8..a9b3ec01df 100644 --- a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.10 + 2.2.11-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml index 8f31d8310b..bbc4a75cde 100644 --- a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.10 + 2.2.11-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml index de1aaa231d..9757e772df 100644 --- a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.10 + 2.2.11-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml index b563ea902f..5a2157bded 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.10 + 2.2.11-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml index ffd1e626f0..4d5a49f822 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.10 + 2.2.11-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml index aa10c1db91..2586b74c33 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.10 + 2.2.11-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml index 6dba08990a..4d76f1c047 100644 --- a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.10 + 2.2.11-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml index 70199896bf..eb2820d22f 100644 --- a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.10 + 2.2.11-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/pom.xml b/modules/swagger-project-jakarta/pom.xml index 7a1cb03c94..54022ecb52 100644 --- a/modules/swagger-project-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/pom.xml @@ -6,7 +6,7 @@ pom swagger-project-jakarta swagger-project-jakarta - 2.2.10 + 2.2.11-SNAPSHOT https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git diff --git a/pom.xml b/pom.xml index ee48a888e9..be44440149 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ pom swagger-project swagger-project - 2.2.10 + 2.2.11-SNAPSHOT https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git From 2dfa1cce148c1762a2ed46f5151cce6c3da0d5aa Mon Sep 17 00:00:00 2001 From: frantuma Date: Mon, 22 May 2023 14:15:58 +0200 Subject: [PATCH 004/131] apply JAX-RS path regex to params --- .../java/io/swagger/v3/jaxrs2/Reader.java | 15 +++++++++- .../java/io/swagger/v3/jaxrs2/ReaderTest.java | 30 +++++++++++++++++++ .../jaxrs2/resources/Ticket4412Resource.java | 20 +++++++++++++ 3 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/Ticket4412Resource.java diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java index 1b0bcbcfe5..0831bd5347 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java @@ -639,7 +639,7 @@ public OpenAPI read(Class cls, continue; } setPathItemOperation(pathItemObject, httpMethod, operation); - + applyPathParamsPatterns(operation, regexMap); paths.addPathItem(operationPath, pathItemObject); if (openAPI.getPaths() != null) { this.paths.putAll(openAPI.getPaths()); @@ -680,6 +680,19 @@ public OpenAPI read(Class cls, return openAPI; } + protected void applyPathParamsPatterns(Operation operation, Map patternsMap) { + if (operation.getParameters() == null) { + return; + } + operation.getParameters().stream() + .filter(p -> patternsMap.containsKey(p.getName())) + .filter(p -> "path".equals(p.getIn())) + .filter(p -> p.getSchema() != null) + .filter(p -> StringUtils.isBlank(p.getSchema().getPattern())) + .filter(p -> !Parameter.StyleEnum.MATRIX.equals(p.getStyle())) + .filter(p -> "string" == p.getSchema().getType() || (p.getSchema().getTypes() != null && p.getSchema().getTypes().contains("string"))) + .forEach(p -> p.getSchema().setPattern(patternsMap.get(p.getName()))); + } protected Content processContent(Content content, Schema schema, Consumes methodConsumes, Consumes classConsumes) { if (content == null) { content = new Content(); diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java index da7c6c1b28..cded1b807f 100644 --- a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java @@ -66,6 +66,7 @@ import io.swagger.v3.jaxrs2.resources.Ticket3587Resource; import io.swagger.v3.jaxrs2.resources.Ticket3731BisResource; import io.swagger.v3.jaxrs2.resources.Ticket3731Resource; +import io.swagger.v3.jaxrs2.resources.Ticket4412Resource; import io.swagger.v3.jaxrs2.resources.UploadResource; import io.swagger.v3.jaxrs2.resources.UrlEncodedResourceWithEncodings; import io.swagger.v3.jaxrs2.resources.UserAnnotationResource; @@ -3063,4 +3064,33 @@ public void testResponseReturnType() { " type: string"; SerializationMatchers.assertEqualsToYaml(openAPI, yaml); } + + @Test + public void test4412PathWildcards() { + Reader reader = new Reader(new OpenAPI()); + + OpenAPI openAPI = reader.read(Ticket4412Resource.class); + String yaml = "openapi: 3.0.1\n" + + "paths:\n" + + " /test/sws/{var}:\n" + + " get:\n" + + " operationId: getCart\n" + + " parameters:\n" + + " - name: var\n" + + " in: path\n" + + " required: true\n" + + " schema:\n" + + " pattern: .*\n" + + " type: string\n" + + " responses:\n" + + " default:\n" + + " description: default response\n" + + " content:\n" + + " text/xml:\n" + + " schema:\n" + + " type: array\n" + + " items:\n" + + " type: string"; + SerializationMatchers.assertEqualsToYaml(openAPI, yaml); + } } diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/Ticket4412Resource.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/Ticket4412Resource.java new file mode 100644 index 0000000000..8d0a08b793 --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/Ticket4412Resource.java @@ -0,0 +1,20 @@ +package io.swagger.v3.jaxrs2.resources; + +import io.swagger.v3.oas.annotations.Parameter; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; +import java.util.List; + +@Path("/test") +public class Ticket4412Resource { + @Path("/sws/{var:.*}") + @GET + @Produces(MediaType.TEXT_XML) + public List getCart(@PathParam("var") String var) { + return null; + } +} From 02feb6792473d64be49788c6d737881659cf2e87 Mon Sep 17 00:00:00 2001 From: Yury Molchan Date: Wed, 31 May 2023 15:28:20 +0300 Subject: [PATCH 005/131] Update Jackson to 2.15.1 to be consistent with SnakeYAML 2.0 (#4417) --- modules/swagger-project-jakarta/pom.xml | 4 ++-- pom.xml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/swagger-project-jakarta/pom.xml b/modules/swagger-project-jakarta/pom.xml index 54022ecb52..82f6b93798 100644 --- a/modules/swagger-project-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/pom.xml @@ -573,8 +573,8 @@ 5.0.0 3.0.1 4.13.2 - 2.14.2 - 2.14.2 + 2.15.1 + 2.15.1 1.4.5 4.8.154 31.1-jre diff --git a/pom.xml b/pom.xml index be44440149..3942986cb8 100644 --- a/pom.xml +++ b/pom.xml @@ -657,8 +657,8 @@ 4.0.3 2.39 4.13.2 - 2.14.2 - 2.14.2 + 2.15.1 + 2.15.1 1.4.5 4.8.154 31.1-jre From 67b1377c802bc50b28510118289bfe2fb447d66a Mon Sep 17 00:00:00 2001 From: frantuma Date: Thu, 1 Jun 2023 10:43:57 +0000 Subject: [PATCH 006/131] prepare release 2.2.11 --- README.md | 5 +++-- modules/swagger-annotations/pom.xml | 2 +- modules/swagger-core/pom.xml | 2 +- .../swagger-eclipse-transformer-maven-plugin/pom.xml | 2 +- modules/swagger-gradle-plugin/README.md | 4 ++-- modules/swagger-gradle-plugin/gradle.properties | 2 +- .../io/swagger/v3/plugins/gradle/SwaggerPlugin.java | 2 +- .../v3/plugins/gradle/SwaggerResolveTest.java | 4 ++-- modules/swagger-integration/pom.xml | 2 +- .../swagger-jaxrs2-servlet-initializer-v2/pom.xml | 2 +- modules/swagger-jaxrs2-servlet-initializer/pom.xml | 2 +- modules/swagger-jaxrs2/pom.xml | 2 +- modules/swagger-maven-plugin/README.md | 12 ++++++------ modules/swagger-maven-plugin/pom.xml | 2 +- modules/swagger-models/pom.xml | 2 +- .../modules/swagger-annotations-jakarta/pom.xml | 2 +- .../modules/swagger-core-jakarta/pom.xml | 2 +- .../modules/swagger-integration-jakarta/pom.xml | 2 +- .../modules/swagger-jaxrs2-jakarta/pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../modules/swagger-maven-plugin-jakarta/pom.xml | 2 +- .../modules/swagger-models-jakarta/pom.xml | 2 +- modules/swagger-project-jakarta/pom.xml | 2 +- pom.xml | 2 +- 25 files changed, 34 insertions(+), 33 deletions(-) diff --git a/README.md b/README.md index 7feb8b7717..46d7853b88 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,8 @@ The OpenAPI Specification has undergone several revisions since initial creation Swagger core Version | Release Date | OpenAPI Spec compatibility | Notes | Status ------------------------- | ------------ | -------------------------- | ----- | ---- -2.2.10 (**current stable**)| 2023-05-15 | 3.x | [tag v2.2.10](https://github.com/swagger-api/swagger-core/tree/v2.2.10) | Supported +2.2.11 (**current stable**)| 2023-06-01 | 3.x | [tag v2.2.11](https://github.com/swagger-api/swagger-core/tree/v2.2.11) | Supported +2.2.10 | 2023-05-15 | 3.x | [tag v2.2.10](https://github.com/swagger-api/swagger-core/tree/v2.2.10) | Supported 2.2.9 | 2023-03-20 | 3.x | [tag v2.2.9](https://github.com/swagger-api/swagger-core/tree/v2.2.9) | Supported 2.2.8 | 2023-01-06 | 3.x | [tag v2.2.8](https://github.com/swagger-api/swagger-core/tree/v2.2.8) | Supported 2.2.7 | 2022-11-15 | 3.x | [tag v2.2.7](https://github.com/swagger-api/swagger-core/tree/v2.2.7) | Supported @@ -96,7 +97,7 @@ You need the following installed and available in your $PATH: * Jackson 2.4.5 or greater -### To build from source (currently 2.2.11-SNAPSHOT) +### To build from source (currently 2.2.12-SNAPSHOT) ``` # first time building locally mvn -N diff --git a/modules/swagger-annotations/pom.xml b/modules/swagger-annotations/pom.xml index 636a237ca0..e82c951954 100644 --- a/modules/swagger-annotations/pom.xml +++ b/modules/swagger-annotations/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.11-SNAPSHOT + 2.2.11 ../.. 4.0.0 diff --git a/modules/swagger-core/pom.xml b/modules/swagger-core/pom.xml index 2f55a98109..4f3f6da4f1 100644 --- a/modules/swagger-core/pom.xml +++ b/modules/swagger-core/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.11-SNAPSHOT + 2.2.11 ../.. 4.0.0 diff --git a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml index 598f1c6d30..2a316d477c 100644 --- a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml +++ b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.11-SNAPSHOT + 2.2.11 ../.. 4.0.0 diff --git a/modules/swagger-gradle-plugin/README.md b/modules/swagger-gradle-plugin/README.md index 5b4c5028a0..baa5deadad 100644 --- a/modules/swagger-gradle-plugin/README.md +++ b/modules/swagger-gradle-plugin/README.md @@ -26,7 +26,7 @@ Alternatively provide as value a classpath with the following dependencies (repl ``` plugins { - id "io.swagger.core.v3.swagger-gradle-plugin" version "2.2.10" + id "io.swagger.core.v3.swagger-gradle-plugin" version "2.2.11" } ``` ### Gradle 1.x and 2.0 @@ -43,7 +43,7 @@ buildscript { } } dependencies { - classpath "io.swagger.core.v3:swagger-gradle-plugin:2.2.10" + classpath "io.swagger.core.v3:swagger-gradle-plugin:2.2.11" } } diff --git a/modules/swagger-gradle-plugin/gradle.properties b/modules/swagger-gradle-plugin/gradle.properties index 4da0bf58a1..f94e60415a 100644 --- a/modules/swagger-gradle-plugin/gradle.properties +++ b/modules/swagger-gradle-plugin/gradle.properties @@ -1,2 +1,2 @@ -version=2.2.11-SNAPSHOT +version=2.2.11 jettyVersion=9.4.49.v20220914 diff --git a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java index 6e049e7a87..28828123f7 100644 --- a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java +++ b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java @@ -16,7 +16,7 @@ public void apply(Project project) { config.defaultDependencies(new Action() { public void execute(DependencySet dependencies) { dependencies.add(project.getDependencies().create("org.apache.commons:commons-lang3:3.12.0")); - dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.11-SNAPSHOT")); + dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.11")); dependencies.add(project.getDependencies().create("javax.ws.rs:javax.ws.rs-api:2.1")); dependencies.add(project.getDependencies().create("javax.servlet:javax.servlet-api:3.1.0")); } diff --git a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java index ffbe4ba762..aa2e8e59a3 100644 --- a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java +++ b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java @@ -81,7 +81,7 @@ public void testSwaggerResolveTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.11-SNAPSHOT'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.11'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + @@ -154,7 +154,7 @@ public void testSwaggerResolveWithOAS31OptionTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.11-SNAPSHOT'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.11'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + diff --git a/modules/swagger-integration/pom.xml b/modules/swagger-integration/pom.xml index 67ca3ec409..97fa766207 100644 --- a/modules/swagger-integration/pom.xml +++ b/modules/swagger-integration/pom.xml @@ -6,7 +6,7 @@ io.swagger.core.v3 swagger-project - 2.2.11-SNAPSHOT + 2.2.11 ../.. swagger-integration diff --git a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml index 937a9e614a..0f0a8b49ec 100644 --- a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.11-SNAPSHOT + 2.2.11 ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2-servlet-initializer/pom.xml b/modules/swagger-jaxrs2-servlet-initializer/pom.xml index d23618a837..5a9414b6d6 100644 --- a/modules/swagger-jaxrs2-servlet-initializer/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.11-SNAPSHOT + 2.2.11 ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2/pom.xml b/modules/swagger-jaxrs2/pom.xml index 48993cc103..f0cb07bb50 100644 --- a/modules/swagger-jaxrs2/pom.xml +++ b/modules/swagger-jaxrs2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.11-SNAPSHOT + 2.2.11 ../../ 4.0.0 diff --git a/modules/swagger-maven-plugin/README.md b/modules/swagger-maven-plugin/README.md index f9a0457cfb..c3d714ca9b 100644 --- a/modules/swagger-maven-plugin/README.md +++ b/modules/swagger-maven-plugin/README.md @@ -22,7 +22,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin - 2.2.10 + 2.2.11 openapi ${project.build.directory}/generatedtest @@ -47,7 +47,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-jaxrs2 - 2.2.10 + 2.2.11 @@ -73,7 +73,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin-jakarta - 2.2.10 + 2.2.11 openapi ${project.build.directory}/generatedtest @@ -98,7 +98,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-jaxrs2-jakarta - 2.2.10 + 2.2.11 @@ -126,7 +126,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin - 2.2.10 + 2.2.11 openapi ${project.build.directory}/generatedtest @@ -155,7 +155,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin-jakarta - 2.2.10 + 2.2.11 openapi ${project.build.directory}/generatedtest diff --git a/modules/swagger-maven-plugin/pom.xml b/modules/swagger-maven-plugin/pom.xml index c6d700ed20..dc4314e8a8 100644 --- a/modules/swagger-maven-plugin/pom.xml +++ b/modules/swagger-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.11-SNAPSHOT + 2.2.11 ../.. 4.0.0 diff --git a/modules/swagger-models/pom.xml b/modules/swagger-models/pom.xml index ef6de5dcb7..e734502efa 100644 --- a/modules/swagger-models/pom.xml +++ b/modules/swagger-models/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.11-SNAPSHOT + 2.2.11 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml index a9b3ec01df..a5cd12624c 100644 --- a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.11-SNAPSHOT + 2.2.11 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml index bbc4a75cde..fd4361967d 100644 --- a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.11-SNAPSHOT + 2.2.11 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml index 9757e772df..c381609f8d 100644 --- a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.11-SNAPSHOT + 2.2.11 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml index 5a2157bded..1ec614e1cd 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.11-SNAPSHOT + 2.2.11 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml index 4d5a49f822..06629b0c23 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.11-SNAPSHOT + 2.2.11 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml index 2586b74c33..fedde7aa9f 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.11-SNAPSHOT + 2.2.11 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml index 4d76f1c047..3cda8eced8 100644 --- a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.11-SNAPSHOT + 2.2.11 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml index eb2820d22f..08ef7a38dc 100644 --- a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.11-SNAPSHOT + 2.2.11 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/pom.xml b/modules/swagger-project-jakarta/pom.xml index 82f6b93798..9806f10c9d 100644 --- a/modules/swagger-project-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/pom.xml @@ -6,7 +6,7 @@ pom swagger-project-jakarta swagger-project-jakarta - 2.2.11-SNAPSHOT + 2.2.11 https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git diff --git a/pom.xml b/pom.xml index 3942986cb8..4c2ad14959 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ pom swagger-project swagger-project - 2.2.11-SNAPSHOT + 2.2.11 https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git From 32445ed82fb0c5167e5d03198b7b044f3c89f37b Mon Sep 17 00:00:00 2001 From: frantuma Date: Thu, 1 Jun 2023 11:12:48 +0000 Subject: [PATCH 007/131] bump snapshot 2.2.12-SNAPSHOT --- modules/swagger-annotations/pom.xml | 2 +- modules/swagger-core/pom.xml | 2 +- modules/swagger-eclipse-transformer-maven-plugin/pom.xml | 2 +- modules/swagger-gradle-plugin/gradle.properties | 2 +- .../main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java | 2 +- .../java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java | 4 ++-- modules/swagger-integration/pom.xml | 2 +- modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml | 2 +- modules/swagger-jaxrs2-servlet-initializer/pom.xml | 2 +- modules/swagger-jaxrs2/pom.xml | 2 +- modules/swagger-maven-plugin/pom.xml | 2 +- modules/swagger-models/pom.xml | 2 +- .../modules/swagger-annotations-jakarta/pom.xml | 2 +- .../modules/swagger-core-jakarta/pom.xml | 2 +- .../modules/swagger-integration-jakarta/pom.xml | 2 +- .../modules/swagger-jaxrs2-jakarta/pom.xml | 2 +- .../swagger-jaxrs2-servlet-initializer-jakarta/pom.xml | 2 +- .../swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml | 2 +- .../modules/swagger-maven-plugin-jakarta/pom.xml | 2 +- .../modules/swagger-models-jakarta/pom.xml | 2 +- modules/swagger-project-jakarta/pom.xml | 2 +- pom.xml | 2 +- 22 files changed, 23 insertions(+), 23 deletions(-) diff --git a/modules/swagger-annotations/pom.xml b/modules/swagger-annotations/pom.xml index e82c951954..dcf25221c4 100644 --- a/modules/swagger-annotations/pom.xml +++ b/modules/swagger-annotations/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.11 + 2.2.12-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-core/pom.xml b/modules/swagger-core/pom.xml index 4f3f6da4f1..6e0db6bdc0 100644 --- a/modules/swagger-core/pom.xml +++ b/modules/swagger-core/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.11 + 2.2.12-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml index 2a316d477c..ce44b78528 100644 --- a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml +++ b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.11 + 2.2.12-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-gradle-plugin/gradle.properties b/modules/swagger-gradle-plugin/gradle.properties index f94e60415a..00da148865 100644 --- a/modules/swagger-gradle-plugin/gradle.properties +++ b/modules/swagger-gradle-plugin/gradle.properties @@ -1,2 +1,2 @@ -version=2.2.11 +version=2.2.12-SNAPSHOT jettyVersion=9.4.49.v20220914 diff --git a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java index 28828123f7..08340c6ab4 100644 --- a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java +++ b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java @@ -16,7 +16,7 @@ public void apply(Project project) { config.defaultDependencies(new Action() { public void execute(DependencySet dependencies) { dependencies.add(project.getDependencies().create("org.apache.commons:commons-lang3:3.12.0")); - dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.11")); + dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.12-SNAPSHOT")); dependencies.add(project.getDependencies().create("javax.ws.rs:javax.ws.rs-api:2.1")); dependencies.add(project.getDependencies().create("javax.servlet:javax.servlet-api:3.1.0")); } diff --git a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java index aa2e8e59a3..6f2a8486ad 100644 --- a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java +++ b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java @@ -81,7 +81,7 @@ public void testSwaggerResolveTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.11'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.12-SNAPSHOT'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + @@ -154,7 +154,7 @@ public void testSwaggerResolveWithOAS31OptionTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.11'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.12-SNAPSHOT'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + diff --git a/modules/swagger-integration/pom.xml b/modules/swagger-integration/pom.xml index 97fa766207..c1ec9d8af6 100644 --- a/modules/swagger-integration/pom.xml +++ b/modules/swagger-integration/pom.xml @@ -6,7 +6,7 @@ io.swagger.core.v3 swagger-project - 2.2.11 + 2.2.12-SNAPSHOT ../.. swagger-integration diff --git a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml index 0f0a8b49ec..cf8ad475ed 100644 --- a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.11 + 2.2.12-SNAPSHOT ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2-servlet-initializer/pom.xml b/modules/swagger-jaxrs2-servlet-initializer/pom.xml index 5a9414b6d6..ce612e582a 100644 --- a/modules/swagger-jaxrs2-servlet-initializer/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.11 + 2.2.12-SNAPSHOT ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2/pom.xml b/modules/swagger-jaxrs2/pom.xml index f0cb07bb50..bcfe69c22a 100644 --- a/modules/swagger-jaxrs2/pom.xml +++ b/modules/swagger-jaxrs2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.11 + 2.2.12-SNAPSHOT ../../ 4.0.0 diff --git a/modules/swagger-maven-plugin/pom.xml b/modules/swagger-maven-plugin/pom.xml index dc4314e8a8..da8f26a3f2 100644 --- a/modules/swagger-maven-plugin/pom.xml +++ b/modules/swagger-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.11 + 2.2.12-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-models/pom.xml b/modules/swagger-models/pom.xml index e734502efa..45fa09c9d7 100644 --- a/modules/swagger-models/pom.xml +++ b/modules/swagger-models/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.11 + 2.2.12-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml index a5cd12624c..82e01597fa 100644 --- a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.11 + 2.2.12-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml index fd4361967d..37b3387e3c 100644 --- a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.11 + 2.2.12-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml index c381609f8d..cac70017c0 100644 --- a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.11 + 2.2.12-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml index 1ec614e1cd..1cfd479230 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.11 + 2.2.12-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml index 06629b0c23..9afc3f7bbb 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.11 + 2.2.12-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml index fedde7aa9f..3ef3be2696 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.11 + 2.2.12-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml index 3cda8eced8..6d70425fdc 100644 --- a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.11 + 2.2.12-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml index 08ef7a38dc..335cce1a0a 100644 --- a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.11 + 2.2.12-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/pom.xml b/modules/swagger-project-jakarta/pom.xml index 9806f10c9d..0879c5b277 100644 --- a/modules/swagger-project-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/pom.xml @@ -6,7 +6,7 @@ pom swagger-project-jakarta swagger-project-jakarta - 2.2.11 + 2.2.12-SNAPSHOT https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git diff --git a/pom.xml b/pom.xml index 4c2ad14959..2e985887d8 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ pom swagger-project swagger-project - 2.2.11 + 2.2.12-SNAPSHOT https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git From 7959c88243e65bf43df1c98fb1d790bb6a8de049 Mon Sep 17 00:00:00 2001 From: HaruhiSuzumiyah <68439343+HaruhiSuzumiyah@users.noreply.github.com> Date: Wed, 24 May 2023 10:31:07 -0400 Subject: [PATCH 008/131] Change JsonIgnoreProperties Rather than ignoring all properties with @JsonIgnoreProperties, we only ignore if it doesn't have the "allowGetters" = true Since if it allowsGetters, you are going to receive it as part of the response --- .../io/swagger/v3/core/jackson/ModelResolver.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) 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 bb2905d941..93f9b90e5d 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 @@ -2146,20 +2146,23 @@ protected Set resolveIgnoredProperties(Annotations a, Annotation[] annot Set propertiesToIgnore = new HashSet<>(); JsonIgnoreProperties ignoreProperties = a.get(JsonIgnoreProperties.class); if (ignoreProperties != null) { - propertiesToIgnore.addAll(Arrays.asList(ignoreProperties.value())); + if(!ignoreProperties.allowGetters()) { + propertiesToIgnore.addAll(Arrays.asList(ignoreProperties.value())); + } } - propertiesToIgnore.addAll(resolveIgnoredProperties(annotations)); return propertiesToIgnore; } - + protected Set resolveIgnoredProperties(Annotation[] annotations) { Set propertiesToIgnore = new HashSet<>(); if (annotations != null) { for (Annotation annotation : annotations) { if (annotation instanceof JsonIgnoreProperties) { - propertiesToIgnore.addAll(Arrays.asList(((JsonIgnoreProperties) annotation).value())); - break; + if (!((JsonIgnoreProperties) annotation).allowGetters()) { + propertiesToIgnore.addAll(Arrays.asList(((JsonIgnoreProperties) annotation).value())); + break; + } } } } From 587b9f0e08ddf2433ead324d6092d8981729e583 Mon Sep 17 00:00:00 2001 From: HaruhiSuzumiyah <68439343+HaruhiSuzumiyah@users.noreply.github.com> Date: Thu, 1 Jun 2023 13:26:13 -0400 Subject: [PATCH 009/131] Update ModelResolver.java --- .../src/main/java/io/swagger/v3/core/jackson/ModelResolver.java | 1 + 1 file changed, 1 insertion(+) 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 93f9b90e5d..649080308c 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 @@ -2150,6 +2150,7 @@ protected Set resolveIgnoredProperties(Annotations a, Annotation[] annot propertiesToIgnore.addAll(Arrays.asList(ignoreProperties.value())); } } + propertiesToIgnore.addAll(resolveIgnoredProperties(annotations)); return propertiesToIgnore; } From d6a4c970f0f08ac78ac0b9dde634cbdaa51af67f Mon Sep 17 00:00:00 2001 From: Hugo Mercado Date: Mon, 16 May 2022 20:27:53 -0500 Subject: [PATCH 010/131] OAS 3.1 - updated annotations to support OAS 3.1 --- .../swagger/v3/oas/annotations/info/Info.java | 7 + .../v3/oas/annotations/info/License.java | 7 + .../annotations/media/DependentRequired.java | 48 +++++++ .../annotations/media/DependentRequireds.java | 30 +++++ .../annotations/media/DependentSchema.java | 48 +++++++ .../annotations/media/DependentSchemas.java | 30 +++++ .../media/DiscriminatorMapping.java | 9 ++ .../v3/oas/annotations/media/Schema.java | 126 ++++++++++++++++++ 8 files changed, 305 insertions(+) create mode 100644 modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentRequired.java create mode 100644 modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentRequireds.java create mode 100644 modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentSchema.java create mode 100644 modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentSchemas.java diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/Info.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/Info.java index 70f2bb9bf6..e674499431 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/Info.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/Info.java @@ -67,4 +67,11 @@ */ Extension[] extensions() default {}; + /** + * A summary of application. + * + * @return the application's summary + **/ + String summary() default ""; + } diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/License.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/License.java index 8d958d85df..1c7b723ce4 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/License.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/License.java @@ -37,4 +37,11 @@ */ Extension[] extensions() default {}; + /** + * A identifier for a License instance. + * + * @return the URL of the license + **/ + String identifier() default ""; + } diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentRequired.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentRequired.java new file mode 100644 index 0000000000..a57a6b2704 --- /dev/null +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentRequired.java @@ -0,0 +1,48 @@ +package io.swagger.v3.oas.annotations.media; + +import java.lang.annotation.Inherited; +import java.lang.annotation.Repeatable; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.ANNOTATION_TYPE; +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.PARAMETER; +import static java.lang.annotation.ElementType.TYPE; + +/** + * The annotation may be used to define dependent schemas for an Object Schema + * + * @see Schema + * + * @since 2.1.8 + **/ +@Target({FIELD, METHOD, PARAMETER, TYPE, ANNOTATION_TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Inherited +@Repeatable(DependentRequireds.class) +public @interface DependentRequired { + /** + * The name. + * + * @return the name + **/ + String name() default ""; + + /** + * The values of the dependent schema. + * + * @return the schema + **/ + String[] value() default {}; + + /** + * The schema of the array. + * + * @return the schema of the array + */ + ArraySchema array() default @ArraySchema(); + +} diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentRequireds.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentRequireds.java new file mode 100644 index 0000000000..eb1ddc37e8 --- /dev/null +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentRequireds.java @@ -0,0 +1,30 @@ +package io.swagger.v3.oas.annotations.media; + +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.ANNOTATION_TYPE; +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.PARAMETER; +import static java.lang.annotation.ElementType.TYPE; + +/** + * Container for repeatable {@link DependentRequired} annotation + * + * @see DependentRequired + */ +@Target({FIELD, METHOD, PARAMETER, TYPE, ANNOTATION_TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Inherited +public @interface DependentRequireds { + /** + * An array of DependentRequired annotations + * + * @return the array of the DependentRequired + **/ + DependentRequired[] value() default {}; + +} diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentSchema.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentSchema.java new file mode 100644 index 0000000000..b58c276f54 --- /dev/null +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentSchema.java @@ -0,0 +1,48 @@ +package io.swagger.v3.oas.annotations.media; + +import java.lang.annotation.Inherited; +import java.lang.annotation.Repeatable; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.ANNOTATION_TYPE; +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.PARAMETER; +import static java.lang.annotation.ElementType.TYPE; + +/** + * The annotation may be used to define dependent schemas for an Object Schema + * + * @see Schema + * + * @since 2.1.8 + **/ +@Target({FIELD, METHOD, PARAMETER, TYPE, ANNOTATION_TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Inherited +@Repeatable(DependentSchemas.class) +public @interface DependentSchema { + /** + * The name. + * + * @return the name + **/ + String name() default ""; + + /** + * The schema of the property. + * + * @return the schema + **/ + Schema schema() default @Schema(); + + /** + * The schema of the array. + * + * @return the schema of the array + */ + ArraySchema array() default @ArraySchema(); + +} diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentSchemas.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentSchemas.java new file mode 100644 index 0000000000..7c1f77014e --- /dev/null +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentSchemas.java @@ -0,0 +1,30 @@ +package io.swagger.v3.oas.annotations.media; + +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.ANNOTATION_TYPE; +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.PARAMETER; +import static java.lang.annotation.ElementType.TYPE; + +/** + * Container for repeatable {@link DependentSchema} annotation + * + * @see DependentSchema + */ +@Target({FIELD, METHOD, PARAMETER, TYPE, ANNOTATION_TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Inherited +public @interface DependentSchemas { + /** + * An array of DependentSchema annotations + * + * @return the array of the DependentSchema + **/ + DependentSchema[] value() default {}; + +} diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DiscriminatorMapping.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DiscriminatorMapping.java index f30dee7a03..8e5510c424 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DiscriminatorMapping.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DiscriminatorMapping.java @@ -1,5 +1,7 @@ package io.swagger.v3.oas.annotations.media; +import io.swagger.v3.oas.annotations.extensions.Extension; + import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -34,4 +36,11 @@ **/ Class schema() default Void.class; + /** + * The list of optional extensions + * + * @return an optional array of extensions + */ + Extension[] extensions() default {}; + } diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Schema.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Schema.java index 4c3b3e46c5..86add64644 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Schema.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Schema.java @@ -328,6 +328,132 @@ */ Extension[] extensions() default {}; + /** + * List of optional items positionally defines before normal items. + * @return optional array of items + */ + Class[] prefixItems() default {}; + + /** + * List of schema types + * @return array of types + */ + String[] types() default {}; + + /** + * Provides an exclusive maximum for a expressing exclusive range. + * @return an exclusive maximum. + */ + int exclusiveMaximumValue() default Integer.MAX_VALUE; + + /** + * Provides an exclusive minimum for a expressing exclusive range. + * @return an exclusive minimum. + */ + int exclusiveMinimumValue() default 0; + + /** + * Specifies contains constrictions expressions. + * @return contains expression. + */ + Class contains() default Void.class; + + /** + * Provides the $id related to this schema. + * @return the $id of schema + */ + String $id() default ""; + + /** + * Provides the $schema + * @return external reference related to this schema + */ + String $schema() default ""; + + /** + * Provides the $anchor related to schema + * @return $anchor schema + */ + String $anchor() default ""; + + /** + * Provides the content encoding related to this schema + * @return content encoding + */ + String contentEncoding() default ""; + + /** + * Provides the content media type related to this schema + * @return content media type + */ + String contentMediaType() default ""; + + /** + * Provides the content schema related to this schema + * @return content schema + */ + Class contentSchema() default Void.class; + + /** + * Provides property names related to this schema + * @return property names + */ + Class propertyNames() default Void.class; + + /** + * Provides max contains related to this schema + * @return max contains + */ + int maxContains() default Integer.MAX_VALUE; + + /** + * Provides min contains related to this schema + * @return min contains + */ + int minContains() default 0; + + /** + * Provides a list of additional items + * @return additional items + */ + Class additionalItems() default Void.class; + + /** + * Provides a list of unevaluated items + * @return unevaluated items + */ + Class unevaluatedItems() default Void.class; + + /** + * Provides the if sub schema related to this schema + * @return if sub schema + */ + Class _if() default Void.class; + + /** + * Provides the else sub schema related to this schema + * @return else sub schema + */ + Class _else() default Void.class; + + /** + * Provides the then sub schema related to this schema + * @return then sub schema + */ + Class then() default Void.class; + + /** + * Provides $comment related to this schema + * @return $comment relaed to schema + */ + String $comment() default ""; + + /** + * Provides a list of examples related to this schema + * @return list of examples + */ + Class[] examples() default {}; + /** * Allows to specify the additionalProperties value * From ed0835774d9310c915d2d5062f727f7bf9f703cf Mon Sep 17 00:00:00 2001 From: Hugo Mercado Date: Mon, 16 May 2022 22:39:38 -0500 Subject: [PATCH 011/131] OAS 3.1 - updated util class --- .../v3/core/util/AnnotationsUtils.java | 168 ++++++++++++++++++ 1 file changed, 168 insertions(+) diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java index 35dfeab19b..274a897e3b 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java @@ -1780,6 +1780,174 @@ public Extension[] extensions() { return patch.extensions(); } + @Override + public Class[] prefixItems() { + if (master.prefixItems().length > 0 || patch.prefixItems().length == 0) { + return master.prefixItems(); + } + return patch.prefixItems(); + } + + @Override + public String[] types() { + if (master.types().length > 0 || patch.types().length == 0) { + return master.types(); + } + return patch.types(); + } + + @Override + public int exclusiveMaximumValue() { + if (master.exclusiveMaximumValue() != 0 || patch.exclusiveMaximumValue() == 0) { + return master.exclusiveMaximumValue(); + } + return patch.exclusiveMaximumValue(); + } + + @Override + public int exclusiveMinimumValue() { + if (master.exclusiveMinimumValue() != 0 || patch.exclusiveMinimumValue() == 0) { + return master.exclusiveMaximumValue(); + } + return patch.exclusiveMinimumValue(); + } + + @Override + public Class contains() { + if (!master.contains().equals(Void.class) || patch.contains().equals(Void.class)) { + return master.contains(); + } + return patch.contains(); + } + + @Override + public String $id() { + if (StringUtils.isNotBlank(master.$id()) || StringUtils.isBlank(patch.$id())) { + return master.$id(); + } + return patch.$id(); + } + + @Override + public String $schema() { + if (StringUtils.isNotBlank(master.$schema()) || StringUtils.isBlank(patch.$schema())) { + return master.$schema(); + } + return patch.$schema(); + } + + @Override + public String $anchor() { + if (StringUtils.isNotBlank(master.$anchor()) || StringUtils.isBlank(patch.$anchor())) { + return master.$anchor(); + } + return patch.$anchor(); + } + + @Override + public String contentEncoding() { + if (StringUtils.isNotBlank(master.contentEncoding()) || StringUtils.isBlank(patch.contentEncoding())) { + return master.contentEncoding(); + } + return patch.contentEncoding(); + } + + @Override + public String contentMediaType() { + if (StringUtils.isNotBlank(master.contentMediaType()) || StringUtils.isBlank(patch.contentMediaType())) { + return master.contentMediaType(); + } + return patch.contentMediaType(); + } + + @Override + public Class contentSchema() { + if (!master.contentSchema().equals(Void.class) || patch.contentSchema().equals(Void.class)) { + return master.contentSchema(); + } + return patch.contentSchema(); + } + + @Override + public Class propertyNames() { + if (!master.propertyNames().equals(Void.class) || patch.propertyNames().equals(Void.class)) { + return master.propertyNames(); + } + return patch.propertyNames(); + } + + @Override + public int maxContains() { + if (master.maxContains() != 0 || patch.maxContains() == 0) { + return master.maxContains(); + } + return patch.maxContains(); + } + + @Override + public int minContains() { + if (master.minContains() != 0 || patch.minContains() == 0) { + return master.minContains(); + } + return patch.minContains(); + } + + @Override + public Class additionalItems() { + if (!master.additionalItems().equals(Void.class) || patch.additionalItems().equals(Void.class)) { + return master.additionalItems(); + } + return patch.additionalItems(); + } + + @Override + public Class unevaluatedItems() { + if (!master.unevaluatedItems().equals(Void.class) || patch.unevaluatedItems().equals(Void.class)) { + return master.unevaluatedItems(); + } + return patch.unevaluatedItems(); + } + + @Override + public Class _if() { + if (!master._if().equals(Void.class) || patch._if().equals(Void.class)) { + return master._if(); + } + return patch._if(); + } + + @Override + public Class _else() { + if (!master._else().equals(Void.class) || patch._else().equals(Void.class)) { + return master._else(); + } + return patch._else(); + } + + @Override + public Class then() { + if (!master.then().equals(Void.class) || patch.then().equals(Void.class)) { + return master.then(); + } + return patch.then(); + } + + @Override + public String $comment() { + if (StringUtils.isNotBlank(master.$comment()) || StringUtils.isBlank(patch.$comment())) { + return master.$comment(); + } + return patch.$comment(); + } + + @Override + public Class[] examples() { + if (master.examples().length > 0 || patch.examples().length == 0) { + return master.examples(); + } + return patch.examples(); + } + @Override public Class annotationType() { return io.swagger.v3.oas.annotations.media.Schema.class; From 2f0b0eeecc5be45349899f96eae472d36a4944c4 Mon Sep 17 00:00:00 2001 From: frantuma Date: Wed, 18 May 2022 16:59:03 +0200 Subject: [PATCH 012/131] OAS 3.1 - implement OAS 3.1 annotation - prototype --- .../swagger/v3/oas/annotations/OpenAPI31.java | 14 ++ .../oas/annotations/StringToClassMapItem.java | 18 ++ .../v3/oas/annotations/info/License.java | 9 +- .../v3/oas/annotations/media/ArraySchema.java | 47 ++++- .../v3/oas/annotations/media/Content.java | 35 ++++ .../annotations/media/DependentRequired.java | 12 +- ...quireds.java => DependentRequiredMap.java} | 5 +- .../annotations/media/DependentSchema.java | 15 +- .../v3/oas/annotations/media/Schema.java | 66 ++++++- .../v3/core/util/AnnotationsUtils.java | 183 +++++++++++++----- 10 files changed, 336 insertions(+), 68 deletions(-) create mode 100644 modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/OpenAPI31.java create mode 100644 modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/StringToClassMapItem.java rename modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/{DependentRequireds.java => DependentRequiredMap.java} (89%) diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/OpenAPI31.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/OpenAPI31.java new file mode 100644 index 0000000000..f503cc923a --- /dev/null +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/OpenAPI31.java @@ -0,0 +1,14 @@ +package io.swagger.v3.oas.annotations; + +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.ANNOTATION_TYPE; +import static java.lang.annotation.ElementType.METHOD; + +@Target({METHOD, ANNOTATION_TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Inherited +public @interface OpenAPI31 {} diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/StringToClassMapItem.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/StringToClassMapItem.java new file mode 100644 index 0000000000..b6359dcac0 --- /dev/null +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/StringToClassMapItem.java @@ -0,0 +1,18 @@ +package io.swagger.v3.oas.annotations; + +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.ANNOTATION_TYPE; +import static java.lang.annotation.ElementType.METHOD; + +@Target({METHOD, ANNOTATION_TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Inherited +public @interface StringToClassMapItem { + String key(); + Class value(); + +} diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/License.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/License.java index 1c7b723ce4..ea25a815a5 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/License.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/License.java @@ -1,5 +1,6 @@ package io.swagger.v3.oas.annotations.info; +import io.swagger.v3.oas.annotations.OpenAPI31; import io.swagger.v3.oas.annotations.extensions.Extension; import java.lang.annotation.Retention; @@ -9,7 +10,8 @@ /** * The annotation may be used in {@link Info#license()} to define a license for the OpenAPI spec. * - * @see License (OpenAPI specification) + * @see License (OpenAPI 3.0 pecification) + * @see License (OpenAPI 3.1 specification) * @see io.swagger.v3.oas.annotations.OpenAPIDefinition * @see Info **/ @@ -38,10 +40,13 @@ Extension[] extensions() default {}; /** - * A identifier for a License instance. + * An identifier for a License instance. + * + * @since 2.2.1 / OpenAPI 3.1 * * @return the URL of the license **/ + @OpenAPI31 String identifier() default ""; } diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/ArraySchema.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/ArraySchema.java index 6619eef2cd..02e5fb1f53 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/ArraySchema.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/ArraySchema.java @@ -1,5 +1,6 @@ package io.swagger.v3.oas.annotations.media; +import io.swagger.v3.oas.annotations.OpenAPI31; import io.swagger.v3.oas.annotations.extensions.Extension; import java.lang.annotation.Inherited; @@ -32,6 +33,14 @@ @Inherited public @interface ArraySchema { + /** + * The schemas of the items in the array + * + * @return items + */ + @OpenAPI31 + Schema[] items() default {}; + /** * The schema of the items in the array * @@ -39,6 +48,7 @@ */ Schema schema() default @Schema; + /** * Allows to define the properties to be resolved into properties of the schema of type `array` (not the ones of the * `items` of such schema which are defined in {@link #schema() schema}. @@ -76,4 +86,39 @@ * @return an optional array of extensions */ Extension[] extensions() default {}; -} \ No newline at end of file + + /** + * Specifies contains constrictions expressions. + * @return contains expression. + */ + @OpenAPI31 + Schema contains() default @Schema; + + /** + * Provides max contains related to this schema + * @return max contains + */ + @OpenAPI31 + String maxContains() default ""; + + /** + * Provides min contains related to this schema + * @return min contains + */ + @OpenAPI31 + String minContains() default ""; + + /** + * TODO desc + * @return unevaluated items + */ + @OpenAPI31 + Schema unevaluatedItems() default @Schema; + + /** + * TODO desc + * @return prefixItems + */ + @OpenAPI31 + Schema[] prefixItems() default {}; +} diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Content.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Content.java index 981740a0cd..252ffc1ce8 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Content.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Content.java @@ -1,5 +1,6 @@ package io.swagger.v3.oas.annotations.media; +import io.swagger.v3.oas.annotations.OpenAPI31; import io.swagger.v3.oas.annotations.extensions.Extension; import java.lang.annotation.ElementType; @@ -84,4 +85,38 @@ */ Extension[] extensions() default {}; + /** + * Allows to specify the dependentSchemas value providing a Schema annotations map + * + * @since 2.2.1 / OpenAPI 3.1 + * @return the schema properties + */ + @OpenAPI31 + DependentSchema[] dependentSchemas() default {}; + + /** + * TODO + * + */ + @OpenAPI31 + Schema contentSchema() default @Schema(); + + /** + * TODO + * + */ + @OpenAPI31 + Schema propertyNames() default @Schema(); + + @OpenAPI31 + Schema _if() default @Schema(); + @OpenAPI31 + Schema _then() default @Schema(); + @OpenAPI31 + Schema _else() default @Schema(); + Schema not() default @Schema(); + Schema[] oneOf() default {}; + Schema[] anyOf() default {}; + Schema[] allOf() default {}; + } diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentRequired.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentRequired.java index a57a6b2704..46f3be0b99 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentRequired.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentRequired.java @@ -1,5 +1,7 @@ package io.swagger.v3.oas.annotations.media; +import io.swagger.v3.oas.annotations.OpenAPI31; + import java.lang.annotation.Inherited; import java.lang.annotation.Repeatable; import java.lang.annotation.Retention; @@ -22,7 +24,8 @@ @Target({FIELD, METHOD, PARAMETER, TYPE, ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Inherited -@Repeatable(DependentRequireds.class) +@Repeatable(DependentRequiredMap.class) +@OpenAPI31 public @interface DependentRequired { /** * The name. @@ -38,11 +41,4 @@ **/ String[] value() default {}; - /** - * The schema of the array. - * - * @return the schema of the array - */ - ArraySchema array() default @ArraySchema(); - } diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentRequireds.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentRequiredMap.java similarity index 89% rename from modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentRequireds.java rename to modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentRequiredMap.java index eb1ddc37e8..3cc9949619 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentRequireds.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentRequiredMap.java @@ -1,5 +1,7 @@ package io.swagger.v3.oas.annotations.media; +import io.swagger.v3.oas.annotations.OpenAPI31; + import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -19,7 +21,8 @@ @Target({FIELD, METHOD, PARAMETER, TYPE, ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Inherited -public @interface DependentRequireds { +@OpenAPI31 +public @interface DependentRequiredMap { /** * An array of DependentRequired annotations * diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentSchema.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentSchema.java index b58c276f54..38d5ed8846 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentSchema.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentSchema.java @@ -1,5 +1,7 @@ package io.swagger.v3.oas.annotations.media; +import io.swagger.v3.oas.annotations.OpenAPI31; + import java.lang.annotation.Inherited; import java.lang.annotation.Repeatable; import java.lang.annotation.Retention; @@ -23,25 +25,30 @@ @Retention(RetentionPolicy.RUNTIME) @Inherited @Repeatable(DependentSchemas.class) +@OpenAPI31 public @interface DependentSchema { /** * The name. * - * @return the name + * @return the key of the dependent schema map item **/ String name() default ""; /** - * The schema of the property. + * The value (Schema) of the dependent schema map item. + * Alternative to `array()`. Applied when the schema is not of type "array". + * Use `array()` when schema is of type "array" * * @return the schema **/ Schema schema() default @Schema(); /** - * The schema of the array. + * The value (ArraySchema) of the dependent schema map item. + * Alternative to `schema()`. Applied when the schema is of type "array". + * Use `schema()` when schema is not of type "array" * - * @return the schema of the array + * @return the value of the array schema */ ArraySchema array() default @ArraySchema(); diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Schema.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Schema.java index 86add64644..94cef1cf07 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Schema.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Schema.java @@ -1,6 +1,8 @@ package io.swagger.v3.oas.annotations.media; import io.swagger.v3.oas.annotations.ExternalDocumentation; +import io.swagger.v3.oas.annotations.OpenAPI31; +import io.swagger.v3.oas.annotations.StringToClassMapItem; import io.swagger.v3.oas.annotations.extensions.Extension; import java.lang.annotation.Inherited; @@ -338,78 +340,94 @@ * List of schema types * @return array of types */ + @OpenAPI31 String[] types() default {}; /** - * Provides an exclusive maximum for a expressing exclusive range. - * @return an exclusive maximum. - */ + * @since 2.2.1 / OpenAPI 3.1 + * + * OAS 3.1 version of `exclusiveMaximum`, accepting a numeric value + * + * @return the exclusive maximum value for this schema + **/ + @OpenAPI31 int exclusiveMaximumValue() default Integer.MAX_VALUE; /** * Provides an exclusive minimum for a expressing exclusive range. * @return an exclusive minimum. */ + @OpenAPI31 int exclusiveMinimumValue() default 0; /** * Specifies contains constrictions expressions. * @return contains expression. */ + @OpenAPI31 Class contains() default Void.class; /** * Provides the $id related to this schema. * @return the $id of schema */ + @OpenAPI31 String $id() default ""; /** * Provides the $schema * @return external reference related to this schema */ + @OpenAPI31 String $schema() default ""; /** * Provides the $anchor related to schema * @return $anchor schema */ + @OpenAPI31 String $anchor() default ""; /** * Provides the content encoding related to this schema * @return content encoding */ + @OpenAPI31 String contentEncoding() default ""; /** * Provides the content media type related to this schema * @return content media type */ + @OpenAPI31 String contentMediaType() default ""; /** * Provides the content schema related to this schema * @return content schema */ + @OpenAPI31 Class contentSchema() default Void.class; /** * Provides property names related to this schema * @return property names */ + @OpenAPI31 Class propertyNames() default Void.class; /** * Provides max contains related to this schema * @return max contains */ + @OpenAPI31 int maxContains() default Integer.MAX_VALUE; /** * Provides min contains related to this schema * @return min contains */ + @OpenAPI31 int minContains() default 0; /** @@ -428,24 +446,28 @@ * Provides the if sub schema related to this schema * @return if sub schema */ + @OpenAPI31 Class _if() default Void.class; /** * Provides the else sub schema related to this schema * @return else sub schema */ + @OpenAPI31 Class _else() default Void.class; /** * Provides the then sub schema related to this schema * @return then sub schema */ + @OpenAPI31 Class then() default Void.class; /** * Provides $comment related to this schema * @return $comment relaed to schema */ + @OpenAPI31 String $comment() default ""; /** @@ -460,6 +482,7 @@ * AdditionalPropertiesValue.TRUE: set to TRUE * AdditionalPropertiesValue.FALSE: set to FALSE * AdditionalPropertiesValue.USE_ADDITIONAL_PROPERTIES_ANNOTATION: resolve from @Content.additionalPropertiesSchema + * or @Schema.additionalPropertiesSchema * * @since 2.2.0 * @return the accessMode for this schema (property) @@ -485,4 +508,41 @@ enum RequiredMode { REQUIRED, NOT_REQUIRED; } + + /** + * Allows to specify the dependentRequired value + ** + * @since 2.2.1 / OpenAPI 3.1 + * @return the list of DependentRequire annotations + * + */ + @OpenAPI31 + DependentRequired[] dependentRequiredMap() default {}; + + /** + * Allows to specify the dependentSchemas value providing a Class to be resolved into a Schema + ** + * @since 2.2.1 / OpenAPI 3.1 + * @return the list of dependentSchemas annotations + * + */ + @OpenAPI31 + StringToClassMapItem[] dependentSchemas() default {}; + + @OpenAPI31 + StringToClassMapItem[] patternProperties() default {}; + + StringToClassMapItem[] properties() default {}; + + @OpenAPI31 + Class unevaluatedProperties() default Void.class; + Class additionalPropertiesSchema() default Void.class; + + /** + * Provides an array of examples 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. + * + * @return an array of examples of this schema + **/ + @OpenAPI31 + String[] examples() default {}; } diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java index 274a897e3b..b0f675e3c3 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java @@ -8,9 +8,11 @@ import io.swagger.v3.core.converter.AnnotatedType; import io.swagger.v3.core.converter.ModelConverters; import io.swagger.v3.core.converter.ResolvedSchema; +import io.swagger.v3.oas.annotations.StringToClassMapItem; import io.swagger.v3.oas.annotations.extensions.Extension; import io.swagger.v3.oas.annotations.extensions.ExtensionProperty; import io.swagger.v3.oas.annotations.links.LinkParameter; +import io.swagger.v3.oas.annotations.media.DependentRequired; import io.swagger.v3.oas.annotations.media.DiscriminatorMapping; import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.SchemaProperty; @@ -99,6 +101,8 @@ public static boolean hasSchemaAnnotation(io.swagger.v3.oas.annotations.media.Sc && schema.extensions().length == 0 && !schema.hidden() && !schema.enumAsRef() + && schema.dependentSchemas().length == 0 + // @@ TODO ADD ALL UPDATED FIELDS && schema.additionalProperties().equals(io.swagger.v3.oas.annotations.media.Schema.AdditionalPropertiesValue.USE_ADDITIONAL_PROPERTIES_ANNOTATION) ) { return false; @@ -1780,14 +1784,6 @@ public Extension[] extensions() { return patch.extensions(); } - @Override - public Class[] prefixItems() { - if (master.prefixItems().length > 0 || patch.prefixItems().length == 0) { - return master.prefixItems(); - } - return patch.prefixItems(); - } - @Override public String[] types() { if (master.types().length > 0 || patch.types().length == 0) { @@ -1812,14 +1808,6 @@ public int exclusiveMinimumValue() { return patch.exclusiveMinimumValue(); } - @Override - public Class contains() { - if (!master.contains().equals(Void.class) || patch.contains().equals(Void.class)) { - return master.contains(); - } - return patch.contains(); - } - @Override public String $id() { if (StringUtils.isNotBlank(master.$id()) || StringUtils.isBlank(patch.$id())) { @@ -1876,38 +1864,6 @@ public Class propertyNames() { return patch.propertyNames(); } - @Override - public int maxContains() { - if (master.maxContains() != 0 || patch.maxContains() == 0) { - return master.maxContains(); - } - return patch.maxContains(); - } - - @Override - public int minContains() { - if (master.minContains() != 0 || patch.minContains() == 0) { - return master.minContains(); - } - return patch.minContains(); - } - - @Override - public Class additionalItems() { - if (!master.additionalItems().equals(Void.class) || patch.additionalItems().equals(Void.class)) { - return master.additionalItems(); - } - return patch.additionalItems(); - } - - @Override - public Class unevaluatedItems() { - if (!master.unevaluatedItems().equals(Void.class) || patch.unevaluatedItems().equals(Void.class)) { - return master.unevaluatedItems(); - } - return patch.unevaluatedItems(); - } - @Override public Class _if() { if (!master._if().equals(Void.class) || patch._if().equals(Void.class)) { @@ -1941,7 +1897,7 @@ public Class then() { } @Override - public Class[] examples() { + public String[] examples() { if (master.examples().length > 0 || patch.examples().length == 0) { return master.examples(); } @@ -1960,6 +1916,55 @@ public AdditionalPropertiesValue additionalProperties() { } return patch.additionalProperties(); } + + @Override + public DependentRequired[] dependentRequiredMap() { + if (master.dependentRequiredMap().length > 0 || patch.dependentRequiredMap().length == 0) { + return master.dependentRequiredMap(); + } + return patch.dependentRequiredMap(); + } + + @Override + public StringToClassMapItem[] dependentSchemas() { + if (master.dependentSchemas().length > 0 || patch.dependentSchemas().length == 0) { + return master.dependentSchemas(); + } + return patch.dependentSchemas(); + } + + @Override + public StringToClassMapItem[] patternProperties() { + if (master.patternProperties().length > 0 || patch.patternProperties().length == 0) { + return master.patternProperties(); + } + return patch.patternProperties(); + } + + @Override + public StringToClassMapItem[] properties() { + if (master.properties().length > 0 || patch.properties().length == 0) { + return master.properties(); + } + return patch.properties(); + } + + @Override + public Class unevaluatedProperties() { + if (!master.unevaluatedProperties().equals(Void.class) || patch.unevaluatedProperties().equals(Void.class)) { + return master.unevaluatedProperties(); + } + return patch.unevaluatedProperties(); + } + + @Override + public Class additionalPropertiesSchema() { + if (!master.additionalPropertiesSchema().equals(Void.class) || patch.additionalPropertiesSchema().equals(Void.class)) { + return master.additionalPropertiesSchema(); + } + return patch.additionalPropertiesSchema(); + } + }; return (io.swagger.v3.oas.annotations.media.Schema)schema; @@ -2041,6 +2046,56 @@ public Extension[] extensions() { } return patch.extensions(); } + + @Override + public io.swagger.v3.oas.annotations.media.Schema[] prefixItems() { + if (master.prefixItems().length > 0 || patch.prefixItems().length == 0) { + return master.prefixItems(); + } + return patch.prefixItems(); + } + + @Override + public io.swagger.v3.oas.annotations.media.Schema contains() { + if (!master.contains().equals(Void.class) || patch.contains().equals(Void.class)) { + return master.contains(); + } + return patch.contains(); + } + + @Override + public String maxContains() { + if (StringUtils.isNotBlank(master.maxContains()) || StringUtils.isBlank(patch.maxContains())) { + return master.maxContains(); + } + return patch.maxContains(); + } + + @Override + public String minContains() { + if (StringUtils.isNotBlank(master.minContains()) || StringUtils.isBlank(patch.minContains())) { + return master.minContains(); + } + return patch.minContains(); + } + + @Override + public io.swagger.v3.oas.annotations.media.Schema unevaluatedItems() { + if (!master.unevaluatedItems().equals(Void.class) || patch.unevaluatedItems().equals(Void.class)) { + return master.unevaluatedItems(); + } + return patch.unevaluatedItems(); + } + + @Override + public io.swagger.v3.oas.annotations.media.Schema[] items() { + if (master.items().length > 0 || patch.items().length == 0) { + return master.items(); + } + return patch.items(); + } + + }; return (io.swagger.v3.oas.annotations.media.ArraySchema)newArraySchema; @@ -2062,6 +2117,11 @@ public Class annotationType() { return io.swagger.v3.oas.annotations.media.ArraySchema.class; } + @Override + public io.swagger.v3.oas.annotations.media.Schema[] items() { + return new io.swagger.v3.oas.annotations.media.Schema[0]; + } + @Override public io.swagger.v3.oas.annotations.media.Schema schema() { return schema; @@ -2091,6 +2151,31 @@ public boolean uniqueItems() { public Extension[] extensions() { return arraySchema.extensions(); } + + @Override + public io.swagger.v3.oas.annotations.media.Schema contains() { + return arraySchema.contains(); + } + + @Override + public String maxContains() { + return arraySchema.maxContains(); + } + + @Override + public String minContains() { + return arraySchema.minContains(); + } + + @Override + public io.swagger.v3.oas.annotations.media.Schema unevaluatedItems() { + return arraySchema.unevaluatedItems(); + } + + @Override + public io.swagger.v3.oas.annotations.media.Schema[] prefixItems() { + return arraySchema.prefixItems(); + } }; return (io.swagger.v3.oas.annotations.media.ArraySchema)newArraySchema; From 35a675deff387419e331f7480a33e6eb0ecfba3a Mon Sep 17 00:00:00 2001 From: Hugo Mercado Date: Fri, 20 May 2022 03:47:25 -0500 Subject: [PATCH 013/131] OAS 3.1 - added @since annotations to new OAS 3.1 fields --- .../swagger/v3/oas/annotations/info/Info.java | 3 ++ .../v3/oas/annotations/info/License.java | 1 - .../v3/oas/annotations/media/ArraySchema.java | 15 +++++- .../annotations/media/DependentSchemas.java | 3 ++ .../media/DiscriminatorMapping.java | 3 ++ .../v3/oas/annotations/media/Schema.java | 46 ++++++++++++++++++- 6 files changed, 67 insertions(+), 4 deletions(-) diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/Info.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/Info.java index e674499431..582219e6eb 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/Info.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/Info.java @@ -1,5 +1,6 @@ package io.swagger.v3.oas.annotations.info; +import io.swagger.v3.oas.annotations.OpenAPI31; import io.swagger.v3.oas.annotations.extensions.Extension; import java.lang.annotation.ElementType; @@ -70,8 +71,10 @@ /** * A summary of application. * + * @since 2.2.1 / OpenAPI 3.1 * @return the application's summary **/ + @OpenAPI31 String summary() default ""; } diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/License.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/License.java index ea25a815a5..87764771c5 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/License.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/License.java @@ -43,7 +43,6 @@ * An identifier for a License instance. * * @since 2.2.1 / OpenAPI 3.1 - * * @return the URL of the license **/ @OpenAPI31 diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/ArraySchema.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/ArraySchema.java index 02e5fb1f53..f122bcb72b 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/ArraySchema.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/ArraySchema.java @@ -36,6 +36,7 @@ /** * The schemas of the items in the array * + * @since 2.2.1 / OpenAPI 3.1 * @return items */ @OpenAPI31 @@ -89,6 +90,8 @@ /** * Specifies contains constrictions expressions. + * + * @since 2.2.1 / OpenAPI 3.1 * @return contains expression. */ @OpenAPI31 @@ -96,6 +99,8 @@ /** * Provides max contains related to this schema + * + * @since 2.2.1 / OpenAPI 3.1 * @return max contains */ @OpenAPI31 @@ -103,20 +108,26 @@ /** * Provides min contains related to this schema + * + * @since 2.2.1 / OpenAPI 3.1 * @return min contains */ @OpenAPI31 String minContains() default ""; /** - * TODO desc + * Provides unevaluted items to this schema + * + * @since 2.2.1 / OpenAPI 3.1 * @return unevaluated items */ @OpenAPI31 Schema unevaluatedItems() default @Schema; /** - * TODO desc + * Provides prefix items to this schema + * + * @since 2.2.1 / OpenAPI 3.1 * @return prefixItems */ @OpenAPI31 diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentSchemas.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentSchemas.java index 7c1f77014e..974d6c99f4 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentSchemas.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentSchemas.java @@ -1,5 +1,7 @@ package io.swagger.v3.oas.annotations.media; +import io.swagger.v3.oas.annotations.OpenAPI31; + import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -19,6 +21,7 @@ @Target({FIELD, METHOD, PARAMETER, TYPE, ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Inherited +@OpenAPI31 public @interface DependentSchemas { /** * An array of DependentSchema annotations diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DiscriminatorMapping.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DiscriminatorMapping.java index 8e5510c424..33813d462b 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DiscriminatorMapping.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DiscriminatorMapping.java @@ -1,5 +1,6 @@ package io.swagger.v3.oas.annotations.media; +import io.swagger.v3.oas.annotations.OpenAPI31; import io.swagger.v3.oas.annotations.extensions.Extension; import java.lang.annotation.Inherited; @@ -39,8 +40,10 @@ /** * The list of optional extensions * + * @since 2.2.1 / OpenAPI 3.1 * @return an optional array of extensions */ + @OpenAPI31 Extension[] extensions() default {}; } diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Schema.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Schema.java index 94cef1cf07..8f94ab12e5 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Schema.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Schema.java @@ -338,6 +338,8 @@ /** * List of schema types + * + * @since 2.2.1 / OpenAPI 3.1 * @return array of types */ @OpenAPI31 @@ -355,6 +357,8 @@ /** * Provides an exclusive minimum for a expressing exclusive range. + * + * @since 2.2.1 / OpenAPI 3.1 * @return an exclusive minimum. */ @OpenAPI31 @@ -369,6 +373,8 @@ /** * Provides the $id related to this schema. + * + * @since 2.2.1 / OpenAPI 3.1 * @return the $id of schema */ @OpenAPI31 @@ -376,6 +382,8 @@ /** * Provides the $schema + * + * @since 2.2.1 / OpenAPI 3.1 * @return external reference related to this schema */ @OpenAPI31 @@ -383,6 +391,8 @@ /** * Provides the $anchor related to schema + * + * @since 2.2.1 / OpenAPI 3.1 * @return $anchor schema */ @OpenAPI31 @@ -390,6 +400,8 @@ /** * Provides the content encoding related to this schema + * + * @since 2.2.1 / OpenAPI 3.1 * @return content encoding */ @OpenAPI31 @@ -397,6 +409,8 @@ /** * Provides the content media type related to this schema + * + * @since 2.2.1 / OpenAPI 3.1 * @return content media type */ @OpenAPI31 @@ -404,6 +418,8 @@ /** * Provides the content schema related to this schema + * + * @since 2.2.1 / OpenAPI 3.1 * @return content schema */ @OpenAPI31 @@ -411,6 +427,8 @@ /** * Provides property names related to this schema + * + * @since 2.2.1 / OpenAPI 3.1 * @return property names */ @OpenAPI31 @@ -444,6 +462,8 @@ /** * Provides the if sub schema related to this schema + * + * @since 2.2.1 / OpenAPI 3.1 * @return if sub schema */ @OpenAPI31 @@ -451,6 +471,8 @@ /** * Provides the else sub schema related to this schema + * + * @since 2.2.1 / OpenAPI 3.1 * @return else sub schema */ @OpenAPI31 @@ -458,6 +480,8 @@ /** * Provides the then sub schema related to this schema + * + * @since 2.2.1 / OpenAPI 3.1 * @return then sub schema */ @OpenAPI31 @@ -465,6 +489,8 @@ /** * Provides $comment related to this schema + * + * @since 2.2.1 / OpenAPI 3.1 * @return $comment relaed to schema */ @OpenAPI31 @@ -521,7 +547,7 @@ enum RequiredMode { /** * Allows to specify the dependentSchemas value providing a Class to be resolved into a Schema - ** + * * @since 2.2.1 / OpenAPI 3.1 * @return the list of dependentSchemas annotations * @@ -529,11 +555,28 @@ enum RequiredMode { @OpenAPI31 StringToClassMapItem[] dependentSchemas() default {}; + /** + * Provides pattern properties to this schema + * + * @since 2.2.1 / OpenAPI 3.1 + * @return pattern properties + */ @OpenAPI31 StringToClassMapItem[] patternProperties() default {}; + /** + * Provoes properties related to this schema + * + * @return schema properties + */ StringToClassMapItem[] properties() default {}; + /** + * Provides unevaluated properties to this schema + * + * @since 2.2.1 / OpenAPI 3.1 + * @return unevaluated properties + */ @OpenAPI31 Class unevaluatedProperties() default Void.class; Class additionalPropertiesSchema() default Void.class; @@ -541,6 +584,7 @@ enum RequiredMode { /** * Provides an array of examples 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. * + * @since 2.2.1 / OpenAPI 3.1 * @return an array of examples of this schema **/ @OpenAPI31 From 7976a1cf254929be5927cc29484ecd7fb2fd0db6 Mon Sep 17 00:00:00 2001 From: Hugo Mercado Date: Sat, 21 May 2022 17:21:32 -0500 Subject: [PATCH 014/131] OAS 3.1 - added link on annotation to oas 3.1 documentation page --- .../swagger/v3/oas/annotations/info/Info.java | 1 + .../v3/oas/annotations/media/ArraySchema.java | 1 + .../v3/oas/annotations/media/Content.java | 52 ++++++++++++++++++- .../media/DiscriminatorMapping.java | 1 + .../v3/oas/annotations/media/Schema.java | 1 + 5 files changed, 54 insertions(+), 2 deletions(-) diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/Info.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/Info.java index 582219e6eb..599f32a9b1 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/Info.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/Info.java @@ -13,6 +13,7 @@ * The annotation may be used in {@link io.swagger.v3.oas.annotations.OpenAPIDefinition#info()} to populate the Info section of the OpenAPI document. * * @see Info (OpenAPI specification) + * @see Info (OpenAPI specification) * @see io.swagger.v3.oas.annotations.OpenAPIDefinition **/ @Target({ElementType.ANNOTATION_TYPE}) diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/ArraySchema.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/ArraySchema.java index f122bcb72b..158200d29e 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/ArraySchema.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/ArraySchema.java @@ -26,6 +26,7 @@ * coexist

* * @see Schema (OpenAPI specification) + * @see Schema (OpenAPI specification) * @see Schema **/ @Target({FIELD, METHOD, PARAMETER, TYPE, ANNOTATION_TYPE}) diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Content.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Content.java index 252ffc1ce8..f133a9e070 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Content.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Content.java @@ -95,28 +95,76 @@ DependentSchema[] dependentSchemas() default {}; /** - * TODO + * Provides the content schema related to this schema * + * @since 2.2.1 / OpenAPI 3.1 + * @return content schema */ @OpenAPI31 Schema contentSchema() default @Schema(); /** - * TODO + * Provides property names related to this schema * + * @since 2.2.1 / OpenAPI 3.1 + * @return content schema */ @OpenAPI31 Schema propertyNames() default @Schema(); + /** + * Provides the if sub schema related to this schema + * + * @since 2.2.1 / OpenAPI 3.1 + * @return content schema + */ @OpenAPI31 Schema _if() default @Schema(); + + /** + * Provides the then sub schema related to this schema + * + * @since 2.2.1 / OpenAPI 3.1 + * @return content schema + */ @OpenAPI31 Schema _then() default @Schema(); + + /** + * Provides the else sub schema related to this schema + * + * @since 2.2.1 / OpenAPI 3.1 + * @return content schema + */ @OpenAPI31 Schema _else() default @Schema(); + + /** + * Provides a java class to be used to disallow matching properties. + * + * @return a class with disallowed properties + **/ Schema not() default @Schema(); + + /** + * Provides an array of java class implementations which can be used to describe multiple acceptable schemas. + * + * @return the list of possible classes for a single match + **/ Schema[] oneOf() default {}; + + /** + * Provides an array of java class implementations which can be used to describe multiple acceptable schemas. + * + * @return the list of possible class matches + **/ Schema[] anyOf() default {}; + + /** + * Provides an array of java class implementations which can be used to describe multiple acceptable schemas. + * + * @return the list of classes to match + **/ Schema[] allOf() default {}; } diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DiscriminatorMapping.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DiscriminatorMapping.java index 33813d462b..4d4f375a14 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DiscriminatorMapping.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DiscriminatorMapping.java @@ -16,6 +16,7 @@ *

Use {@link Schema#discriminatorProperty()} to define a discriminator property.

* * @see Discriminator (OpenAPI specification) + * @see Discriminator (OpenAPI specification) * @see Schema **/ @Target({}) diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Schema.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Schema.java index 8f94ab12e5..c8fc1aca07 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Schema.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Schema.java @@ -31,6 +31,7 @@ * coexist

* * @see Schema (OpenAPI specification) + * @see Schema (OpenAPI specification) * @see ArraySchema **/ @Target({FIELD, METHOD, PARAMETER, TYPE, ANNOTATION_TYPE}) From 24df25e1c981ce077de1bd711fae6fe702375000 Mon Sep 17 00:00:00 2001 From: Hugo Mercado Date: Tue, 31 May 2022 23:05:30 -0500 Subject: [PATCH 015/131] OAS 3.1 - updated annotations, utils class and added webhook annotation --- .../swagger/v3/oas/annotations/Webhook.java | 34 ++++ .../v3/oas/annotations/media/ArraySchema.java | 6 +- .../v3/core/util/AnnotationsUtils.java | 170 ++++++++++++++++-- .../swagger/v3/oas/models/media/Schema.java | 13 ++ 4 files changed, 210 insertions(+), 13 deletions(-) create mode 100644 modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/Webhook.java diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/Webhook.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/Webhook.java new file mode 100644 index 0000000000..9a50a4034d --- /dev/null +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/Webhook.java @@ -0,0 +1,34 @@ +package io.swagger.v3.oas.annotations; + +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.ANNOTATION_TYPE; +import static java.lang.annotation.ElementType.METHOD; + +/** + * The annotation may be used to define a method as an OpenAPI Webhook. + * + * @see Webhook (OpenAPI specification) + * @see io.swagger.v3.oas.annotations.OpenAPIDefinition + **/ +@Target({METHOD, ANNOTATION_TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Inherited +@OpenAPI31 +public @interface Webhook { + /** + * Provides the name related to this webhook. + * @return webhook name + */ + String name(); + + /** + * Provides the operation related to this webhook. + * @return webhook operation + */ + Operation operation(); + +} diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/ArraySchema.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/ArraySchema.java index 158200d29e..6bacd360e8 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/ArraySchema.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/ArraySchema.java @@ -41,7 +41,7 @@ * @return items */ @OpenAPI31 - Schema[] items() default {}; + Schema items() default @Schema; /** * The schema of the items in the array @@ -105,7 +105,7 @@ * @return max contains */ @OpenAPI31 - String maxContains() default ""; + int maxContains() default 0; /** * Provides min contains related to this schema @@ -114,7 +114,7 @@ * @return min contains */ @OpenAPI31 - String minContains() default ""; + int minContains() default 0; /** * Provides unevaluted items to this schema diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java index b0f675e3c3..33f2e2840e 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java @@ -9,15 +9,18 @@ import io.swagger.v3.core.converter.ModelConverters; import io.swagger.v3.core.converter.ResolvedSchema; import io.swagger.v3.oas.annotations.StringToClassMapItem; +import io.swagger.v3.oas.annotations.Webhook; import io.swagger.v3.oas.annotations.extensions.Extension; import io.swagger.v3.oas.annotations.extensions.ExtensionProperty; import io.swagger.v3.oas.annotations.links.LinkParameter; import io.swagger.v3.oas.annotations.media.DependentRequired; +import io.swagger.v3.oas.annotations.media.DependentSchema; import io.swagger.v3.oas.annotations.media.DiscriminatorMapping; import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.SchemaProperty; import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.ExternalDocumentation; +import io.swagger.v3.oas.models.PathItem; import io.swagger.v3.oas.models.examples.Example; import io.swagger.v3.oas.models.headers.Header; import io.swagger.v3.oas.models.info.Contact; @@ -47,6 +50,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; @@ -400,6 +404,22 @@ public static Optional getArraySchema(io.swagger.v3.oas.annotations if (arraySchema.minItems() < Integer.MAX_VALUE) { arraySchemaObject.setMinItems(arraySchema.minItems()); } + + getSchemaFromAnnotation(arraySchema.contains(), components, jsonViewAnnotation).ifPresent(arraySchemaObject::setContains); + getSchemaFromAnnotation(arraySchema.unevaluatedItems(), components, jsonViewAnnotation).ifPresent(arraySchemaObject::setUnevaluatedItems); + + if (arraySchema.maxContains() > 0) { + arraySchemaObject.setMaxContains(arraySchema.maxContains()); + } + if (arraySchema.minContains() > 0) { + arraySchemaObject.setMinContains(arraySchema.minContains()); + } + if (arraySchema.prefixItems().length > 0) { + for (io.swagger.v3.oas.annotations.media.Schema prefixItem : arraySchema.prefixItems()) { + getSchemaFromAnnotation(prefixItem, components, jsonViewAnnotation).ifPresent(arraySchemaObject::addPrefixItem); + } + } + if (arraySchema.extensions().length > 0) { Map extensions = AnnotationsUtils.getExtensions(arraySchema.extensions()); if (extensions != null) { @@ -440,6 +460,90 @@ public static Optional getSchemaFromAnnotation(io.swagger.v3.oas.annotat if (StringUtils.isNotBlank(schema.type())) { schemaObject.setType(schema.type()); } + + if (schema.types().length > 0) { + if (schema.types().length == 1) { + schemaObject.setType(schema.types()[0]); + } else { + for (String type : schema.types()) { + schemaObject.addType(type); + } + } + } + if (StringUtils.isNotBlank(schema.$id())) { + schemaObject.set$id(schema.$id()); + } + if (StringUtils.isNotBlank(schema.$schema())) { + schemaObject.set$schema(schema.$schema()); + } + if (StringUtils.isNotBlank(schema.$anchor())) { + schemaObject.set$anchor(schema.$anchor()); + } + if (StringUtils.isNotBlank(schema.contentEncoding())) { + schemaObject.setContentEncoding(schema.contentEncoding()); + } + if (StringUtils.isNotBlank(schema.contentMediaType())) { + schemaObject.setContentMediaType(schema.contentMediaType()); + } + if (schema.exclusiveMaximumValue() != Integer.MAX_VALUE && schema.exclusiveMaximumValue() > 0) { + schemaObject.setExclusiveMaximumValue(BigDecimal.valueOf(schema.exclusiveMaximumValue())); + } + if (schema.exclusiveMinimumValue() > 0) { + schemaObject.setExclusiveMinimumValue(BigDecimal.valueOf(schema.exclusiveMinimumValue())); + } + if (!schema.contentSchema().equals(Void.class)) { + schemaObject.setContentSchema(resolveSchemaFromType(schema.contentSchema(), components, jsonViewAnnotation)); + } + if (!schema.propertyNames().equals(Void.class)) { + schemaObject.setPropertyNames(resolveSchemaFromType(schema.propertyNames(), components, jsonViewAnnotation)); + } + if (!schema._if().equals(Void.class)) { + schemaObject.setIf(resolveSchemaFromType(schema._if(), components, jsonViewAnnotation)); + } + if (!schema._else().equals(Void.class)) { + schemaObject.setElse(resolveSchemaFromType(schema._else(), components, jsonViewAnnotation)); + } + if (!schema.then().equals(Void.class)) { + schemaObject.setThen(resolveSchemaFromType(schema.then(), components, jsonViewAnnotation)); + } + if (StringUtils.isNotBlank(schema.$comment())) { + schemaObject.set$comment(schema.$comment()); + } + if (schema.dependentRequiredMap().length > 0) { + final Map> dependentRequired = new LinkedHashMap<>(); + for (DependentRequired dependentRequiredAnnotation : schema.dependentRequiredMap()) { + dependentRequired.put(dependentRequiredAnnotation.name(), Arrays.asList(dependentRequiredAnnotation.value())); + } + schemaObject.setDependentRequired(dependentRequired); + } + if (schema.dependentSchemas().length > 0) { + final Map dependentSchema = new LinkedHashMap<>(); + for (StringToClassMapItem mapItem : schema.dependentSchemas()) { + dependentSchema.put(mapItem.key(), resolveSchemaFromType(mapItem.value(), components, jsonViewAnnotation)); + } + schemaObject.setDependentSchemas(dependentSchema); + } + if (schema.patternProperties().length > 0) { + final Map patternProperties = new LinkedHashMap<>(); + for (StringToClassMapItem mapItem : schema.patternProperties()) { + patternProperties.put(mapItem.key(), resolveSchemaFromType(mapItem.value(), components, jsonViewAnnotation)); + } + schemaObject.setPatternProperties(patternProperties); + } + if (schema.properties().length > 0) { + final Map properties = new LinkedHashMap<>(); + for (StringToClassMapItem mapItem : schema.properties()) { + properties.put(mapItem.key(), resolveSchemaFromType(mapItem.value(), components, jsonViewAnnotation)); + } + schemaObject.setProperties(properties); + } + if (!schema.unevaluatedProperties().equals(Void.class)) { + schemaObject.setUnevaluatedProperties(resolveSchemaFromType(schema.unevaluatedProperties(), components, jsonViewAnnotation)); + } + if (schema.examples().length > 0) { + schemaObject.setExamples(Arrays.asList(schema.examples())); + } + if (StringUtils.isNotBlank(schema.defaultValue())) { schemaObject.setDefault(schema.defaultValue()); } @@ -557,6 +661,10 @@ public static Optional getSchemaFromAnnotation(io.swagger.v3.oas.annotat schemaObject.additionalProperties(true); } else if (schema.additionalProperties().equals(io.swagger.v3.oas.annotations.media.Schema.AdditionalPropertiesValue.FALSE)) { schemaObject.additionalProperties(false); + } else { + if (!schema.additionalPropertiesSchema().equals(Void.class)) { + schemaObject.additionalProperties(resolveSchemaFromType(schema.additionalPropertiesSchema(), components, jsonViewAnnotation)); + } } return Optional.of(schemaObject); @@ -748,6 +856,10 @@ public static Optional getInfo(io.swagger.v3.oas.annotations.info.Info inf infoObject.setVersion(info.version()); isEmpty = false; } + if (StringUtils.isNotBlank(info.summary())) { + infoObject.setSummary(info.summary()); + isEmpty = false; + } if (info.extensions() != null && info.extensions().length > 0) { Map extensions = AnnotationsUtils.getExtensions(info.extensions()); if (extensions != null) { @@ -810,6 +922,10 @@ public static Optional getLicense(io.swagger.v3.oas.annotations.info.Li licenseObject.setUrl(license.url()); isEmpty = false; } + if (StringUtils.isNotBlank(license.identifier())) { + licenseObject.setIdentifier(license.identifier()); + isEmpty = false; + } if (license.extensions() != null && license.extensions().length > 0) { Map extensions = AnnotationsUtils.getExtensions(license.extensions()); if (extensions != null) { @@ -1127,6 +1243,40 @@ public static Optional getContent(io.swagger.v3.oas.annotations.media.C } else { applyTypes(classTypes, methodTypes, content, mediaType); } + + DependentSchema[] dependentSchemas = annotationContent.dependentSchemas(); + if (dependentSchemas.length > 0) { + final Map dependentSchemaMap = new LinkedHashMap<>(); + for (DependentSchema dependentSchema : dependentSchemas) { + if ("array".equals(mediaType.getSchema().getType())) { + getArraySchema(dependentSchema.array(), components, jsonViewAnnotation).ifPresent(arraySchema -> dependentSchemaMap.put(dependentSchema.name(), arraySchema)); + } else { + getSchemaFromAnnotation(dependentSchema.schema(), components, jsonViewAnnotation).ifPresent(schema1 -> dependentSchemaMap.put(dependentSchema.name(), schema1)); + } + } + mediaType.getSchema().setDependentSchemas(dependentSchemaMap); + } + getSchemaFromAnnotation(annotationContent.contentSchema(), components, jsonViewAnnotation).ifPresent(mediaType.getSchema()::setContentSchema); + getSchemaFromAnnotation(annotationContent.propertyNames(), components, jsonViewAnnotation).ifPresent(mediaType.getSchema()::setPropertyNames); + getSchemaFromAnnotation(annotationContent._if(), components, jsonViewAnnotation).ifPresent(mediaType.getSchema()::setIf); + getSchemaFromAnnotation(annotationContent._then(), components, jsonViewAnnotation).ifPresent(mediaType.getSchema()::setThen); + getSchemaFromAnnotation(annotationContent._else(), components, jsonViewAnnotation).ifPresent(mediaType.getSchema()::setElse); + getSchemaFromAnnotation(annotationContent.not(), components, jsonViewAnnotation).ifPresent(mediaType.getSchema()::setNot); + if (annotationContent.oneOf().length > 0) { + for (io.swagger.v3.oas.annotations.media.Schema oneOfSchema : annotationContent.oneOf()) { + getSchemaFromAnnotation(oneOfSchema, components, jsonViewAnnotation).ifPresent(mediaType.getSchema()::addOneOfItem); + } + } + if (annotationContent.anyOf().length > 0) { + for (io.swagger.v3.oas.annotations.media.Schema anyOfSchema : annotationContent.anyOf()) { + getSchemaFromAnnotation(anyOfSchema, components, jsonViewAnnotation).ifPresent(mediaType.getSchema()::addAnyOfItem); + } + } + if (annotationContent.allOf().length > 0) { + for (io.swagger.v3.oas.annotations.media.Schema anyOfSchema : annotationContent.allOf()) { + getSchemaFromAnnotation(anyOfSchema, components, jsonViewAnnotation).ifPresent(mediaType.getSchema()::addAllOfItem); + } + } } if (content.size() == 0) { @@ -2064,16 +2214,16 @@ public io.swagger.v3.oas.annotations.media.Schema contains() { } @Override - public String maxContains() { - if (StringUtils.isNotBlank(master.maxContains()) || StringUtils.isBlank(patch.maxContains())) { + public int maxContains() { + if (master.maxContains() > 0) { return master.maxContains(); } return patch.maxContains(); } @Override - public String minContains() { - if (StringUtils.isNotBlank(master.minContains()) || StringUtils.isBlank(patch.minContains())) { + public int minContains() { + if (master.minContains() > 0) { return master.minContains(); } return patch.minContains(); @@ -2088,8 +2238,8 @@ public io.swagger.v3.oas.annotations.media.Schema unevaluatedItems() { } @Override - public io.swagger.v3.oas.annotations.media.Schema[] items() { - if (master.items().length > 0 || patch.items().length == 0) { + public io.swagger.v3.oas.annotations.media.Schema items() { + if (!master.items().equals(Void.class) || patch.items().equals(Void.class)) { return master.items(); } return patch.items(); @@ -2118,8 +2268,8 @@ public Class annotationType() { } @Override - public io.swagger.v3.oas.annotations.media.Schema[] items() { - return new io.swagger.v3.oas.annotations.media.Schema[0]; + public io.swagger.v3.oas.annotations.media.Schema items() { + return arraySchema.items(); } @Override @@ -2158,12 +2308,12 @@ public io.swagger.v3.oas.annotations.media.Schema contains() { } @Override - public String maxContains() { + public int maxContains() { return arraySchema.maxContains(); } @Override - public String minContains() { + public int minContains() { return arraySchema.minContains(); } diff --git a/modules/swagger-models/src/main/java/io/swagger/v3/oas/models/media/Schema.java b/modules/swagger-models/src/main/java/io/swagger/v3/oas/models/media/Schema.java index 6dc606bc13..c69b125734 100644 --- a/modules/swagger-models/src/main/java/io/swagger/v3/oas/models/media/Schema.java +++ b/modules/swagger-models/src/main/java/io/swagger/v3/oas/models/media/Schema.java @@ -1452,6 +1452,19 @@ public Schema prefixItems(List prefixItems) { return this; } + /** + * + * @since 2.2.0 (OpenAPI 3.1.0) + */ + @OpenAPI31 + public Schema addPrefixItem(Schema prefixItem) { + if (this.prefixItems == null) { + this.prefixItems = new ArrayList<>(); + } + this.prefixItems.add(prefixItem); + return this; + } + /** * * @since 2.2.0 (OpenAPI 3.1.0) From 4ac2fda70561fbbd016c958ad6229b389b77a9c1 Mon Sep 17 00:00:00 2001 From: Hugo Mercado Date: Sat, 11 Jun 2022 01:04:17 -0500 Subject: [PATCH 016/131] OAS 3.1 - fixed NPE in tests --- .../io/swagger/v3/core/util/AnnotationsUtils.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java index 33f2e2840e..06a62f56d3 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java @@ -1256,12 +1256,14 @@ public static Optional getContent(io.swagger.v3.oas.annotations.media.C } mediaType.getSchema().setDependentSchemas(dependentSchemaMap); } - getSchemaFromAnnotation(annotationContent.contentSchema(), components, jsonViewAnnotation).ifPresent(mediaType.getSchema()::setContentSchema); - getSchemaFromAnnotation(annotationContent.propertyNames(), components, jsonViewAnnotation).ifPresent(mediaType.getSchema()::setPropertyNames); - getSchemaFromAnnotation(annotationContent._if(), components, jsonViewAnnotation).ifPresent(mediaType.getSchema()::setIf); - getSchemaFromAnnotation(annotationContent._then(), components, jsonViewAnnotation).ifPresent(mediaType.getSchema()::setThen); - getSchemaFromAnnotation(annotationContent._else(), components, jsonViewAnnotation).ifPresent(mediaType.getSchema()::setElse); - getSchemaFromAnnotation(annotationContent.not(), components, jsonViewAnnotation).ifPresent(mediaType.getSchema()::setNot); + if (mediaType.getSchema() != null) { + getSchemaFromAnnotation(annotationContent.contentSchema(), components, jsonViewAnnotation).ifPresent(mediaType.getSchema()::setContentSchema); + getSchemaFromAnnotation(annotationContent.propertyNames(), components, jsonViewAnnotation).ifPresent(mediaType.getSchema()::setPropertyNames); + getSchemaFromAnnotation(annotationContent._if(), components, jsonViewAnnotation).ifPresent(mediaType.getSchema()::setIf); + getSchemaFromAnnotation(annotationContent._then(), components, jsonViewAnnotation).ifPresent(mediaType.getSchema()::setThen); + getSchemaFromAnnotation(annotationContent._else(), components, jsonViewAnnotation).ifPresent(mediaType.getSchema()::setElse); + getSchemaFromAnnotation(annotationContent.not(), components, jsonViewAnnotation).ifPresent(mediaType.getSchema()::setNot); + } if (annotationContent.oneOf().length > 0) { for (io.swagger.v3.oas.annotations.media.Schema oneOfSchema : annotationContent.oneOf()) { getSchemaFromAnnotation(oneOfSchema, components, jsonViewAnnotation).ifPresent(mediaType.getSchema()::addOneOfItem); From 43a841eab22ce1b350b045f47b8c49cacf324836 Mon Sep 17 00:00:00 2001 From: Hugo Mercado Date: Thu, 11 Aug 2022 18:52:51 -0500 Subject: [PATCH 017/131] OAS 3.1 - updated schema check method, and fixed errors found on documentation. --- .../swagger/v3/oas/annotations/info/Info.java | 4 +-- .../v3/oas/annotations/info/License.java | 4 +-- .../v3/oas/annotations/media/ArraySchema.java | 1 - .../v3/oas/annotations/media/Content.java | 32 +++++++++++-------- .../annotations/media/DependentRequired.java | 2 +- .../media/DependentRequiredMap.java | 1 + .../annotations/media/DependentSchema.java | 2 +- .../v3/oas/annotations/media/Schema.java | 9 +++--- .../v3/core/util/AnnotationsUtils.java | 24 ++++++++++++-- 9 files changed, 50 insertions(+), 29 deletions(-) diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/Info.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/Info.java index 599f32a9b1..b006b333f8 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/Info.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/Info.java @@ -70,10 +70,10 @@ Extension[] extensions() default {}; /** - * A summary of application. + * A short API summary. * * @since 2.2.1 / OpenAPI 3.1 - * @return the application's summary + * @return API summary **/ @OpenAPI31 String summary() default ""; diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/License.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/License.java index 87764771c5..3b74ee5211 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/License.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/License.java @@ -11,7 +11,7 @@ * The annotation may be used in {@link Info#license()} to define a license for the OpenAPI spec. * * @see License (OpenAPI 3.0 pecification) - * @see License (OpenAPI 3.1 specification) + * @see License (OpenAPI 3.1 specification) * @see io.swagger.v3.oas.annotations.OpenAPIDefinition * @see Info **/ @@ -28,7 +28,7 @@ /** * A URL to the license used for the API. MUST be in the format of a URL. * - * @return the URL of the license + * @return URL to the license **/ String url() default ""; diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/ArraySchema.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/ArraySchema.java index 6bacd360e8..c2441a860f 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/ArraySchema.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/ArraySchema.java @@ -37,7 +37,6 @@ /** * The schemas of the items in the array * - * @since 2.2.1 / OpenAPI 3.1 * @return items */ @OpenAPI31 diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Content.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Content.java index f133a9e070..27d034673c 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Content.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Content.java @@ -86,10 +86,10 @@ Extension[] extensions() default {}; /** - * Allows to specify the dependentSchemas value providing a Schema annotations map + * Subschemas to be applied for a given condition. * * @since 2.2.1 / OpenAPI 3.1 - * @return the schema properties + * @return list of dependent schemas. */ @OpenAPI31 DependentSchema[] dependentSchemas() default {}; @@ -107,7 +107,7 @@ * Provides property names related to this schema * * @since 2.2.1 / OpenAPI 3.1 - * @return content schema + * @return proeprty names */ @OpenAPI31 Schema propertyNames() default @Schema(); @@ -116,7 +116,7 @@ * Provides the if sub schema related to this schema * * @since 2.2.1 / OpenAPI 3.1 - * @return content schema + * @return if schema */ @OpenAPI31 Schema _if() default @Schema(); @@ -125,7 +125,7 @@ * Provides the then sub schema related to this schema * * @since 2.2.1 / OpenAPI 3.1 - * @return content schema + * @return then schema */ @OpenAPI31 Schema _then() default @Schema(); @@ -134,36 +134,40 @@ * Provides the else sub schema related to this schema * * @since 2.2.1 / OpenAPI 3.1 - * @return content schema + * @return else schema */ @OpenAPI31 Schema _else() default @Schema(); /** - * Provides a java class to be used to disallow matching properties. + * Set schemas to validate according a given condition. * - * @return a class with disallowed properties + * @since 2.2.1 / OpenAPI 3.1 + * @return not schema to be validated **/ Schema not() default @Schema(); /** - * Provides an array of java class implementations which can be used to describe multiple acceptable schemas. + * Provides the oneOf sub schemas related to this schema. * - * @return the list of possible classes for a single match + * @since 2.2.1 / OpenAPI 3.1 + * @return oneOf sub schemas **/ Schema[] oneOf() default {}; /** - * Provides an array of java class implementations which can be used to describe multiple acceptable schemas. + * Provides the anyOf sub schemas related to this schema. * - * @return the list of possible class matches + * @since 2.2.1 / OpenAPI 3.1 + * @return anyOf sub schemas **/ Schema[] anyOf() default {}; /** - * Provides an array of java class implementations which can be used to describe multiple acceptable schemas. + * Provides the allOf sub schemas related to this schema.. * - * @return the list of classes to match + * @since 2.2.1 / OpenAPI 3.1 + * @return allOf sub schemas **/ Schema[] allOf() default {}; diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentRequired.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentRequired.java index 46f3be0b99..4b75a967f9 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentRequired.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentRequired.java @@ -19,7 +19,7 @@ * * @see Schema * - * @since 2.1.8 + * @since 2.2.1 / OpenAPI 3.1 **/ @Target({FIELD, METHOD, PARAMETER, TYPE, ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentRequiredMap.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentRequiredMap.java index 3cc9949619..2f091a8aef 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentRequiredMap.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentRequiredMap.java @@ -16,6 +16,7 @@ /** * Container for repeatable {@link DependentRequired} annotation * + * @since 2.2.1 / OpenAPI 3.1 * @see DependentRequired */ @Target({FIELD, METHOD, PARAMETER, TYPE, ANNOTATION_TYPE}) diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentSchema.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentSchema.java index 38d5ed8846..78a98c34b2 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentSchema.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentSchema.java @@ -19,7 +19,7 @@ * * @see Schema * - * @since 2.1.8 + * @since 2.2.1 / OpenAPI 3.1 **/ @Target({FIELD, METHOD, PARAMETER, TYPE, ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Schema.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Schema.java index c8fc1aca07..85fed213bd 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Schema.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Schema.java @@ -382,10 +382,10 @@ String $id() default ""; /** - * Provides the $schema + * Provides Json Schema dialect where the schema is valid. * * @since 2.2.1 / OpenAPI 3.1 - * @return external reference related to this schema + * @return json schema dialect */ @OpenAPI31 String $schema() default ""; @@ -492,7 +492,7 @@ * Provides $comment related to this schema * * @since 2.2.1 / OpenAPI 3.1 - * @return $comment relaed to schema + * @return $comment related to schema */ @OpenAPI31 String $comment() default ""; @@ -566,7 +566,7 @@ enum RequiredMode { StringToClassMapItem[] patternProperties() default {}; /** - * Provoes properties related to this schema + * Provides properties related to this schema * * @return schema properties */ @@ -585,7 +585,6 @@ enum RequiredMode { /** * Provides an array of examples 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. * - * @since 2.2.1 / OpenAPI 3.1 * @return an array of examples of this schema **/ @OpenAPI31 diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java index 06a62f56d3..ed816cba86 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java @@ -9,7 +9,6 @@ import io.swagger.v3.core.converter.ModelConverters; import io.swagger.v3.core.converter.ResolvedSchema; import io.swagger.v3.oas.annotations.StringToClassMapItem; -import io.swagger.v3.oas.annotations.Webhook; import io.swagger.v3.oas.annotations.extensions.Extension; import io.swagger.v3.oas.annotations.extensions.ExtensionProperty; import io.swagger.v3.oas.annotations.links.LinkParameter; @@ -20,7 +19,6 @@ import io.swagger.v3.oas.annotations.media.SchemaProperty; import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.ExternalDocumentation; -import io.swagger.v3.oas.models.PathItem; import io.swagger.v3.oas.models.examples.Example; import io.swagger.v3.oas.models.headers.Header; import io.swagger.v3.oas.models.info.Contact; @@ -106,7 +104,27 @@ public static boolean hasSchemaAnnotation(io.swagger.v3.oas.annotations.media.Sc && !schema.hidden() && !schema.enumAsRef() && schema.dependentSchemas().length == 0 - // @@ TODO ADD ALL UPDATED FIELDS + && schema.patternProperties().length == 0 + && schema.unevaluatedProperties().equals(Void.class) + && schema.types().length == 0 + && schema.exclusiveMinimumValue() == 0 + && schema.exclusiveMaximumValue() == Integer.MAX_VALUE + && StringUtils.isBlank(schema.$id()) + && StringUtils.isBlank(schema.$schema()) + && StringUtils.isBlank(schema.$anchor()) + && StringUtils.isBlank(schema.contentEncoding()) + && StringUtils.isBlank(schema.contentMediaType()) + && schema.contentSchema().equals(Void.class) + && schema.propertyNames().equals(Void.class) + && schema._if().equals(Void.class) + && schema._else().equals(Void.class) + && schema.then().equals(Void.class) + && StringUtils.isBlank(schema.$comment()) + && schema.dependentRequiredMap().length == 0 + && schema.patternProperties().length == 0 + && schema.properties().length == 0 + + && schema.additionalProperties().equals(io.swagger.v3.oas.annotations.media.Schema.AdditionalPropertiesValue.USE_ADDITIONAL_PROPERTIES_ANNOTATION) ) { return false; From 614f0ac8908cbf3ac870b71b5ef0d4f3be4ec7f2 Mon Sep 17 00:00:00 2001 From: frantuma Date: Mon, 10 Oct 2022 20:47:50 +0200 Subject: [PATCH 018/131] OAS 3.1 - implement initial OAS 3.1 annotations and resolve logic --- .../swagger/v3/oas/annotations/info/Info.java | 2 +- .../v3/oas/annotations/info/License.java | 4 +- .../v3/oas/annotations/media/ArraySchema.java | 15 ++++---- .../v3/oas/annotations/media/Content.java | 20 +++++----- .../annotations/media/DependentRequired.java | 2 +- .../media/DependentRequiredMap.java | 2 +- .../annotations/media/DependentSchema.java | 2 +- .../media/DiscriminatorMapping.java | 2 +- .../v3/oas/annotations/media/Schema.java | 36 +++++++++--------- .../v3/plugins/gradle/tasks/ResolveTask.java | 21 ++++++++++ .../v3/plugins/gradle/SwaggerResolveTest.java | 1 + .../integration/GenericOpenApiContext.java | 38 ++++++++++++++++++- .../oas/integration/SwaggerConfiguration.java | 27 +++++++++++++ .../integration/api/OpenAPIConfiguration.java | 7 +++- .../ServletConfigContextUtils.java | 2 + .../ServletOpenApiConfigurationLoader.java | 4 +- .../v3/jaxrs2/integration/SwaggerLoader.java | 16 +++++++- .../swagger/v3/jaxrs2/BootstrapServlet.java | 1 + .../src/test/webapp/WEB-INF/web.xml | 5 +++ .../swagger/v3/plugin/maven/SwaggerMojo.java | 11 ++++++ .../test/resources/configurationFile2.yaml | 1 + ...esolveToFileFromConfigWithOAS3.1Filter.xml | 1 + .../swagger/v3/oas/models/media/Schema.java | 2 +- 23 files changed, 174 insertions(+), 48 deletions(-) diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/Info.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/Info.java index b006b333f8..8daa5f441f 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/Info.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/Info.java @@ -72,7 +72,7 @@ /** * A short API summary. * - * @since 2.2.1 / OpenAPI 3.1 + * @since 2.2.4 / OpenAPI 3.1 * @return API summary **/ @OpenAPI31 diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/License.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/License.java index 3b74ee5211..35f821e0ea 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/License.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/License.java @@ -42,8 +42,8 @@ /** * An identifier for a License instance. * - * @since 2.2.1 / OpenAPI 3.1 - * @return the URL of the license + * @since 2.2.4 / OpenAPI 3.1 + * @return the identifier of the license **/ @OpenAPI31 String identifier() default ""; diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/ArraySchema.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/ArraySchema.java index c2441a860f..9b1248c02e 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/ArraySchema.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/ArraySchema.java @@ -37,9 +37,11 @@ /** * The schemas of the items in the array * + * @since 2.2.4 + * * @return items */ - @OpenAPI31 + Schema items() default @Schema; /** @@ -49,7 +51,6 @@ */ Schema schema() default @Schema; - /** * Allows to define the properties to be resolved into properties of the schema of type `array` (not the ones of the * `items` of such schema which are defined in {@link #schema() schema}. @@ -91,7 +92,7 @@ /** * Specifies contains constrictions expressions. * - * @since 2.2.1 / OpenAPI 3.1 + * @since 2.2.4 / OpenAPI 3.1 * @return contains expression. */ @OpenAPI31 @@ -100,7 +101,7 @@ /** * Provides max contains related to this schema * - * @since 2.2.1 / OpenAPI 3.1 + * @since 2.2.4 / OpenAPI 3.1 * @return max contains */ @OpenAPI31 @@ -109,7 +110,7 @@ /** * Provides min contains related to this schema * - * @since 2.2.1 / OpenAPI 3.1 + * @since 2.2.4 / OpenAPI 3.1 * @return min contains */ @OpenAPI31 @@ -118,7 +119,7 @@ /** * Provides unevaluted items to this schema * - * @since 2.2.1 / OpenAPI 3.1 + * @since 2.2.4 / OpenAPI 3.1 * @return unevaluated items */ @OpenAPI31 @@ -127,7 +128,7 @@ /** * Provides prefix items to this schema * - * @since 2.2.1 / OpenAPI 3.1 + * @since 2.2.4 / OpenAPI 3.1 * @return prefixItems */ @OpenAPI31 diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Content.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Content.java index 27d034673c..0b09736be6 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Content.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Content.java @@ -88,7 +88,7 @@ /** * Subschemas to be applied for a given condition. * - * @since 2.2.1 / OpenAPI 3.1 + * @since 2.2.4 / OpenAPI 3.1 * @return list of dependent schemas. */ @OpenAPI31 @@ -97,7 +97,7 @@ /** * Provides the content schema related to this schema * - * @since 2.2.1 / OpenAPI 3.1 + * @since 2.2.4 / OpenAPI 3.1 * @return content schema */ @OpenAPI31 @@ -106,7 +106,7 @@ /** * Provides property names related to this schema * - * @since 2.2.1 / OpenAPI 3.1 + * @since 2.2.4 / OpenAPI 3.1 * @return proeprty names */ @OpenAPI31 @@ -115,7 +115,7 @@ /** * Provides the if sub schema related to this schema * - * @since 2.2.1 / OpenAPI 3.1 + * @since 2.2.4 / OpenAPI 3.1 * @return if schema */ @OpenAPI31 @@ -124,7 +124,7 @@ /** * Provides the then sub schema related to this schema * - * @since 2.2.1 / OpenAPI 3.1 + * @since 2.2.4 / OpenAPI 3.1 * @return then schema */ @OpenAPI31 @@ -133,7 +133,7 @@ /** * Provides the else sub schema related to this schema * - * @since 2.2.1 / OpenAPI 3.1 + * @since 2.2.4 / OpenAPI 3.1 * @return else schema */ @OpenAPI31 @@ -142,7 +142,7 @@ /** * Set schemas to validate according a given condition. * - * @since 2.2.1 / OpenAPI 3.1 + * @since 2.2.4 / OpenAPI 3.1 * @return not schema to be validated **/ Schema not() default @Schema(); @@ -150,7 +150,7 @@ /** * Provides the oneOf sub schemas related to this schema. * - * @since 2.2.1 / OpenAPI 3.1 + * @since 2.2.4 / OpenAPI 3.1 * @return oneOf sub schemas **/ Schema[] oneOf() default {}; @@ -158,7 +158,7 @@ /** * Provides the anyOf sub schemas related to this schema. * - * @since 2.2.1 / OpenAPI 3.1 + * @since 2.2.4 / OpenAPI 3.1 * @return anyOf sub schemas **/ Schema[] anyOf() default {}; @@ -166,7 +166,7 @@ /** * Provides the allOf sub schemas related to this schema.. * - * @since 2.2.1 / OpenAPI 3.1 + * @since 2.2.4 / OpenAPI 3.1 * @return allOf sub schemas **/ Schema[] allOf() default {}; diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentRequired.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentRequired.java index 4b75a967f9..a6c2bf11d6 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentRequired.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentRequired.java @@ -19,7 +19,7 @@ * * @see Schema * - * @since 2.2.1 / OpenAPI 3.1 + * @since 2.2.4 / OpenAPI 3.1 **/ @Target({FIELD, METHOD, PARAMETER, TYPE, ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentRequiredMap.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentRequiredMap.java index 2f091a8aef..9edc855331 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentRequiredMap.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentRequiredMap.java @@ -16,7 +16,7 @@ /** * Container for repeatable {@link DependentRequired} annotation * - * @since 2.2.1 / OpenAPI 3.1 + * @since 2.2.4 / OpenAPI 3.1 * @see DependentRequired */ @Target({FIELD, METHOD, PARAMETER, TYPE, ANNOTATION_TYPE}) diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentSchema.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentSchema.java index 78a98c34b2..ffa479b3f9 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentSchema.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentSchema.java @@ -19,7 +19,7 @@ * * @see Schema * - * @since 2.2.1 / OpenAPI 3.1 + * @since 2.2.4 / OpenAPI 3.1 **/ @Target({FIELD, METHOD, PARAMETER, TYPE, ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DiscriminatorMapping.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DiscriminatorMapping.java index 4d4f375a14..89e662fe6f 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DiscriminatorMapping.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DiscriminatorMapping.java @@ -41,7 +41,7 @@ /** * The list of optional extensions * - * @since 2.2.1 / OpenAPI 3.1 + * @since 2.2.4 / OpenAPI 3.1 * @return an optional array of extensions */ @OpenAPI31 diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Schema.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Schema.java index 85fed213bd..3331ea2b3b 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Schema.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Schema.java @@ -340,14 +340,14 @@ /** * List of schema types * - * @since 2.2.1 / OpenAPI 3.1 + * @since 2.2.4 / OpenAPI 3.1 * @return array of types */ @OpenAPI31 String[] types() default {}; /** - * @since 2.2.1 / OpenAPI 3.1 + * @since 2.2.4 / OpenAPI 3.1 * * OAS 3.1 version of `exclusiveMaximum`, accepting a numeric value * @@ -359,7 +359,7 @@ /** * Provides an exclusive minimum for a expressing exclusive range. * - * @since 2.2.1 / OpenAPI 3.1 + * @since 2.2.4 / OpenAPI 3.1 * @return an exclusive minimum. */ @OpenAPI31 @@ -375,7 +375,7 @@ /** * Provides the $id related to this schema. * - * @since 2.2.1 / OpenAPI 3.1 + * @since 2.2.4 / OpenAPI 3.1 * @return the $id of schema */ @OpenAPI31 @@ -384,7 +384,7 @@ /** * Provides Json Schema dialect where the schema is valid. * - * @since 2.2.1 / OpenAPI 3.1 + * @since 2.2.4 / OpenAPI 3.1 * @return json schema dialect */ @OpenAPI31 @@ -393,7 +393,7 @@ /** * Provides the $anchor related to schema * - * @since 2.2.1 / OpenAPI 3.1 + * @since 2.2.4 / OpenAPI 3.1 * @return $anchor schema */ @OpenAPI31 @@ -402,7 +402,7 @@ /** * Provides the content encoding related to this schema * - * @since 2.2.1 / OpenAPI 3.1 + * @since 2.2.4 / OpenAPI 3.1 * @return content encoding */ @OpenAPI31 @@ -411,7 +411,7 @@ /** * Provides the content media type related to this schema * - * @since 2.2.1 / OpenAPI 3.1 + * @since 2.2.4 / OpenAPI 3.1 * @return content media type */ @OpenAPI31 @@ -420,7 +420,7 @@ /** * Provides the content schema related to this schema * - * @since 2.2.1 / OpenAPI 3.1 + * @since 2.2.4 / OpenAPI 3.1 * @return content schema */ @OpenAPI31 @@ -429,7 +429,7 @@ /** * Provides property names related to this schema * - * @since 2.2.1 / OpenAPI 3.1 + * @since 2.2.4 / OpenAPI 3.1 * @return property names */ @OpenAPI31 @@ -464,7 +464,7 @@ /** * Provides the if sub schema related to this schema * - * @since 2.2.1 / OpenAPI 3.1 + * @since 2.2.4 / OpenAPI 3.1 * @return if sub schema */ @OpenAPI31 @@ -473,7 +473,7 @@ /** * Provides the else sub schema related to this schema * - * @since 2.2.1 / OpenAPI 3.1 + * @since 2.2.4 / OpenAPI 3.1 * @return else sub schema */ @OpenAPI31 @@ -482,7 +482,7 @@ /** * Provides the then sub schema related to this schema * - * @since 2.2.1 / OpenAPI 3.1 + * @since 2.2.4 / OpenAPI 3.1 * @return then sub schema */ @OpenAPI31 @@ -491,7 +491,7 @@ /** * Provides $comment related to this schema * - * @since 2.2.1 / OpenAPI 3.1 + * @since 2.2.4 / OpenAPI 3.1 * @return $comment related to schema */ @OpenAPI31 @@ -539,7 +539,7 @@ enum RequiredMode { /** * Allows to specify the dependentRequired value ** - * @since 2.2.1 / OpenAPI 3.1 + * @since 2.2.4 / OpenAPI 3.1 * @return the list of DependentRequire annotations * */ @@ -549,7 +549,7 @@ enum RequiredMode { /** * Allows to specify the dependentSchemas value providing a Class to be resolved into a Schema * - * @since 2.2.1 / OpenAPI 3.1 + * @since 2.2.4 / OpenAPI 3.1 * @return the list of dependentSchemas annotations * */ @@ -559,7 +559,7 @@ enum RequiredMode { /** * Provides pattern properties to this schema * - * @since 2.2.1 / OpenAPI 3.1 + * @since 2.2.4 / OpenAPI 3.1 * @return pattern properties */ @OpenAPI31 @@ -575,7 +575,7 @@ enum RequiredMode { /** * Provides unevaluated properties to this schema * - * @since 2.2.1 / OpenAPI 3.1 + * @since 2.2.4 / OpenAPI 3.1 * @return unevaluated properties */ @OpenAPI31 diff --git a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/tasks/ResolveTask.java b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/tasks/ResolveTask.java index ded90666a9..9a64f11b0f 100644 --- a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/tasks/ResolveTask.java +++ b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/tasks/ResolveTask.java @@ -74,6 +74,8 @@ public enum Format {JSON, YAML, JSONANDYAML}; private Boolean openAPI31 = false; + private Boolean convertToOpenAPI31 = false; + @Input @Optional public String getOutputFileName() { @@ -333,6 +335,22 @@ public void setOpenAPI31(Boolean openAPI31) { this.openAPI31 = openAPI31; } + /** + * @since 2.2.4 + */ + @Input + @Optional + public Boolean getConvertToOpenAPI31() { + return convertToOpenAPI31; + } + + public void setConvertToOpenAPI31(Boolean convertToOpenAPI31) { + this.convertToOpenAPI31 = convertToOpenAPI31; + if (Boolean.TRUE.equals(convertToOpenAPI31)) { + this.openAPI31 = true; + } + } + @TaskAction public void resolve() throws GradleException { if (skip) { @@ -441,6 +459,9 @@ public void resolve() throws GradleException { method=swaggerLoaderClass.getDeclaredMethod("setOpenAPI31", Boolean.class); method.invoke(swaggerLoader, openAPI31); + method=swaggerLoaderClass.getDeclaredMethod("setConvertToOpenAPI31", Boolean.class); + method.invoke(swaggerLoader, convertToOpenAPI31); + method=swaggerLoaderClass.getDeclaredMethod("resolve"); Map specs = (Map)method.invoke(swaggerLoader); diff --git a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java index 6f2a8486ad..a42689f510 100644 --- a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java +++ b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java @@ -171,6 +171,7 @@ public void testSwaggerResolveWithOAS31OptionTask() throws IOException { " resourcePackages = ['io.swagger.v3.plugins.gradle.petstore']\n" + " outputPath = \'" + toNormalizedPath(outputDir) + "\'\n" + " openAPI31 = \'TRUE\'\n" + + " convertToOpenAPI31 = \'TRUE\'\n" + " openApiFile = file(\'" + toNormalizedPath(openapiInputFile.getAbsolutePath()) + "\')\n" + "}"; diff --git a/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/GenericOpenApiContext.java b/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/GenericOpenApiContext.java index c9e8bcae4c..2156eba7af 100644 --- a/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/GenericOpenApiContext.java +++ b/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/GenericOpenApiContext.java @@ -73,6 +73,8 @@ public class GenericOpenApiContext implements O private Boolean openAPI31; + private Boolean convertToOpenAPI31; + public long getCacheTTL() { return cacheTTL; } @@ -302,6 +304,30 @@ public T openAPI31(Boolean openAPI31) { return (T) this; } + /** + * @since 2.2.4 + */ + public Boolean isConvertToOpenAPI31() { + return convertToOpenAPI31; + } + + /** + * @since 2.2.4 + */ + public void setConvertToOpenAPI31(Boolean convertToOpenAPI31) { + this.convertToOpenAPI31 = convertToOpenAPI31; + if (Boolean.TRUE.equals(convertToOpenAPI31)) { + this.openAPI31 = true; + } + } + + /** + * @since 2.2.4 + */ + public T convertToOpenAPI31(Boolean convertToOpenAPI31) { + this.setConvertToOpenAPI31(convertToOpenAPI31); + return (T) this; + } protected void register() { OpenApiContextLocator.getInstance().putOpenApiContext(id, this); @@ -439,6 +465,7 @@ public T init() throws OpenApiConfigurationException { openApiConfiguration = new SwaggerConfiguration().resourcePackages(resourcePackages).resourceClasses(resourceClasses); ((SwaggerConfiguration) openApiConfiguration).setId(id); ((SwaggerConfiguration) openApiConfiguration).setOpenAPI31(openAPI31); + ((SwaggerConfiguration) openApiConfiguration).setConvertToOpenAPI31(convertToOpenAPI31); } openApiConfiguration = mergeParentConfiguration(openApiConfiguration, parent); @@ -527,6 +554,10 @@ public T init() throws OpenApiConfigurationException { if (openApiConfiguration.isOpenAPI31() != null && this.openAPI31 == null) { this.openAPI31 = openApiConfiguration.isOpenAPI31(); } + + if (openApiConfiguration.isConvertToOpenAPI31() != null && this.convertToOpenAPI31 == null) { + this.convertToOpenAPI31 = openApiConfiguration.isConvertToOpenAPI31(); + } register(); return (T) this; } @@ -593,6 +624,9 @@ private OpenAPIConfiguration mergeParentConfiguration(OpenAPIConfiguration confi if (merged.isOpenAPI31() == null) { merged.setOpenAPI31(parentConfig.isOpenAPI31()); } + if (merged.isConvertToOpenAPI31() == null) { + merged.setConvertToOpenAPI31(parentConfig.isConvertToOpenAPI31()); + } return merged; } @@ -603,7 +637,7 @@ public OpenAPI read() { if (cacheTTL == 0) { resetReader(); OpenAPI openAPI = getOpenApiReader().read(getOpenApiScanner().classes(), getOpenApiScanner().resources()); - if (Boolean.TRUE.equals(openAPI31)) { + if (Boolean.TRUE.equals(convertToOpenAPI31)) { openAPI = new SpecFilter().filter(openAPI, new OpenAPI31SpecFilter(), null, null, null); } return openAPI; @@ -615,7 +649,7 @@ public OpenAPI read() { cached.createdAt = System.currentTimeMillis(); resetReader(); cached.openApi = getOpenApiReader().read(getOpenApiScanner().classes(), getOpenApiScanner().resources()); - if (Boolean.TRUE.equals(openAPI31)) { + if (Boolean.TRUE.equals(convertToOpenAPI31)) { cached.openApi = new SpecFilter().filter(cached.openApi, new OpenAPI31SpecFilter(), null, null, null); } cache.put("openapi", cached); diff --git a/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/SwaggerConfiguration.java b/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/SwaggerConfiguration.java index 62b95d47e8..65d1ce6904 100644 --- a/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/SwaggerConfiguration.java +++ b/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/SwaggerConfiguration.java @@ -36,6 +36,8 @@ public class SwaggerConfiguration implements OpenAPIConfiguration { private Boolean openAPI31; + private Boolean convertToOpenAPI31; + public Long getCacheTTL() { return cacheTTL; } @@ -305,4 +307,29 @@ public SwaggerConfiguration openAPI31(Boolean openAPI31) { this.openAPI31 = openAPI31; return this; } + + /** + * @since 2.2.4 + */ + public Boolean isConvertToOpenAPI31() { + return convertToOpenAPI31; + } + + /** + * @since 2.2.4 + */ + public void setConvertToOpenAPI31(Boolean convertToOpenAPI31) { + this.convertToOpenAPI31 = convertToOpenAPI31; + if (Boolean.TRUE.equals(convertToOpenAPI31)) { + this.openAPI31 = true; + } + } + + /** + * @since 2.2.4 + */ + public SwaggerConfiguration convertToOpenAPI31(Boolean convertToOpenAPI31) { + this.setConvertToOpenAPI31(convertToOpenAPI31); + return this; + } } diff --git a/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/api/OpenAPIConfiguration.java b/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/api/OpenAPIConfiguration.java index 780923280f..f849241c6b 100644 --- a/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/api/OpenAPIConfiguration.java +++ b/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/api/OpenAPIConfiguration.java @@ -50,7 +50,12 @@ public interface OpenAPIConfiguration { Boolean isAlwaysResolveAppPath(); /** - * @since 3.0.0 + * @since 2.2.4 */ Boolean isOpenAPI31(); + + /** + * @since 2.2.4 + */ + Boolean isConvertToOpenAPI31(); } diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/ServletConfigContextUtils.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/ServletConfigContextUtils.java index 200dcbbd43..d00a15ca17 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/ServletConfigContextUtils.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/ServletConfigContextUtils.java @@ -51,6 +51,8 @@ public class ServletConfigContextUtils { */ public static final String OPENAPI_CONFIGURATION_OPENAPI_31_KEY = "openApi.configuration.openAPI31"; + public static final String OPENAPI_CONFIGURATION_CONVERT_TO_OPENAPI_31_KEY = "openApi.configuration.convertToOpenAPI31"; + public static Set resolveResourcePackages(ServletConfig servletConfig) { if (!isServletConfigAvailable(servletConfig)) { return null; diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/ServletOpenApiConfigurationLoader.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/ServletOpenApiConfigurationLoader.java index 9347f9e550..1e92a1c07c 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/ServletOpenApiConfigurationLoader.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/ServletOpenApiConfigurationLoader.java @@ -18,6 +18,7 @@ import static io.swagger.v3.jaxrs2.integration.ServletConfigContextUtils.OPENAPI_CONFIGURATION_FILTER_KEY; import static io.swagger.v3.jaxrs2.integration.ServletConfigContextUtils.OPENAPI_CONFIGURATION_OBJECT_MAPPER_PROCESSOR_KEY; import static io.swagger.v3.jaxrs2.integration.ServletConfigContextUtils.OPENAPI_CONFIGURATION_OPENAPI_31_KEY; +import static io.swagger.v3.jaxrs2.integration.ServletConfigContextUtils.OPENAPI_CONFIGURATION_CONVERT_TO_OPENAPI_31_KEY; import static io.swagger.v3.jaxrs2.integration.ServletConfigContextUtils.OPENAPI_CONFIGURATION_PRETTYPRINT_KEY; import static io.swagger.v3.jaxrs2.integration.ServletConfigContextUtils.OPENAPI_CONFIGURATION_READALLRESOURCES_KEY; import static io.swagger.v3.jaxrs2.integration.ServletConfigContextUtils.OPENAPI_CONFIGURATION_READER_KEY; @@ -63,6 +64,7 @@ public OpenAPIConfiguration load(String path) throws IOException { .scannerClass(getInitParam(servletConfig, OPENAPI_CONFIGURATION_SCANNER_KEY)) .objectMapperProcessorClass(getInitParam(servletConfig, OPENAPI_CONFIGURATION_OBJECT_MAPPER_PROCESSOR_KEY)) .openAPI31(getBooleanInitParam(servletConfig, OPENAPI_CONFIGURATION_OPENAPI_31_KEY)) + .convertToOpenAPI31(getBooleanInitParam(servletConfig, OPENAPI_CONFIGURATION_CONVERT_TO_OPENAPI_31_KEY)) .modelConverterClasses(resolveModelConverterClasses(servletConfig)); return configuration; @@ -131,7 +133,7 @@ public boolean exists(String path) { if (getInitParam(servletConfig, OPENAPI_CONFIGURATION_OBJECT_MAPPER_PROCESSOR_KEY) != null) { return true; } - if (getInitParam(servletConfig, OPENAPI_CONFIGURATION_OPENAPI_31_KEY) != null) { + if (getInitParam(servletConfig, OPENAPI_CONFIGURATION_CONVERT_TO_OPENAPI_31_KEY) != null) { return true; } return resolveModelConverterClasses(servletConfig) != null; diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/SwaggerLoader.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/SwaggerLoader.java index 5f31bb120f..98df764c6d 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/SwaggerLoader.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/SwaggerLoader.java @@ -44,6 +44,8 @@ public class SwaggerLoader { private Boolean openAPI31 = false; + private Boolean convertToOpenAPI31 = false; + /** * @since 2.0.6 */ @@ -199,6 +201,10 @@ public Boolean getOpenAPI31() { return openAPI31; } + public Boolean getConvertToOpenAPI31() { + return convertToOpenAPI31; + } + /** * @since 2.2.0 */ @@ -206,6 +212,13 @@ public void setOpenAPI31(Boolean openAPI31) { this.openAPI31 = openAPI31; } + /** + * @since 2.2.4 + */ + public void setConvertToOpenAPI31(Boolean convertToOpenAPI31) { + this.convertToOpenAPI31 = convertToOpenAPI31; + } + public Map resolve() throws Exception{ Set ignoredRoutesSet = null; @@ -253,7 +266,8 @@ public Map resolve() throws Exception{ .modelConverterClasses(modelConverterSet) .sortOutput(sortOutput) .alwaysResolveAppPath(alwaysResolveAppPath) - .openAPI31(openAPI31); + .openAPI31(openAPI31) + .convertToOpenAPI31(convertToOpenAPI31); try { GenericOpenApiContextBuilder builder = new JaxrsOpenApiContextBuilder() .openApiConfiguration(config); diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/BootstrapServlet.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/BootstrapServlet.java index 20290c2729..8025e0d552 100644 --- a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/BootstrapServlet.java +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/BootstrapServlet.java @@ -45,6 +45,7 @@ public void init(ServletConfig config) throws ServletException { .openAPI(oas) .prettyPrint(true) .openAPI31(true) + .convertToOpenAPI31(true) .resourcePackages(Stream.of("io.swagger.v3.jaxrs2.it.resources").collect(Collectors.toSet())); try { diff --git a/modules/swagger-jaxrs2/src/test/webapp/WEB-INF/web.xml b/modules/swagger-jaxrs2/src/test/webapp/WEB-INF/web.xml index 63f9680539..a54330faee 100644 --- a/modules/swagger-jaxrs2/src/test/webapp/WEB-INF/web.xml +++ b/modules/swagger-jaxrs2/src/test/webapp/WEB-INF/web.xml @@ -50,6 +50,11 @@ openApi.configuration.openAPI31 true + + + openApi.configuration.convertToOpenAPI31 + true + diff --git a/modules/swagger-maven-plugin/src/main/java/io/swagger/v3/plugin/maven/SwaggerMojo.java b/modules/swagger-maven-plugin/src/main/java/io/swagger/v3/plugin/maven/SwaggerMojo.java index ec517f0246..72370a77dd 100644 --- a/modules/swagger-maven-plugin/src/main/java/io/swagger/v3/plugin/maven/SwaggerMojo.java +++ b/modules/swagger-maven-plugin/src/main/java/io/swagger/v3/plugin/maven/SwaggerMojo.java @@ -157,6 +157,9 @@ private void setDefaultsIfMissing(SwaggerConfiguration config) { if (openapi31 == null) { openapi31 = Boolean.FALSE; } + if (convertToOpenAPI31 == null) { + convertToOpenAPI31 = Boolean.FALSE; + } if (config.isPrettyPrint() == null) { config.prettyPrint(prettyPrint); } @@ -172,6 +175,9 @@ private void setDefaultsIfMissing(SwaggerConfiguration config) { if (config.isOpenAPI31() == null) { config.setOpenAPI31(openapi31); } + if (config.isConvertToOpenAPI31() == null) { + config.setConvertToOpenAPI31(convertToOpenAPI31); + } } /** @@ -415,6 +421,11 @@ private boolean isCollectionNotBlank(Collection collection) { @Parameter(property = "resolve.openapi31") private Boolean openapi31; + /** + * @since 2.2.4 + */ + @Parameter(property = "resolve.convertToOpenAPI31") + private Boolean convertToOpenAPI31; private String projectEncoding = "UTF-8"; private SwaggerConfiguration config; diff --git a/modules/swagger-maven-plugin/src/test/resources/configurationFile2.yaml b/modules/swagger-maven-plugin/src/test/resources/configurationFile2.yaml index 6d7e028537..036e934175 100644 --- a/modules/swagger-maven-plugin/src/test/resources/configurationFile2.yaml +++ b/modules/swagger-maven-plugin/src/test/resources/configurationFile2.yaml @@ -2,6 +2,7 @@ resourcePackages: - io.swagger.v3.plugin.maven.petstore.petstore prettyPrint: true openAPI31: true +convertToOpenAPI31: true cacheTTL: 0 openAPI: openapi: 3.0.1 diff --git a/modules/swagger-maven-plugin/src/test/resources/pom.resolveToFileFromConfigWithOAS3.1Filter.xml b/modules/swagger-maven-plugin/src/test/resources/pom.resolveToFileFromConfigWithOAS3.1Filter.xml index dd6d412daf..bd57d35fe1 100644 --- a/modules/swagger-maven-plugin/src/test/resources/pom.resolveToFileFromConfigWithOAS3.1Filter.xml +++ b/modules/swagger-maven-plugin/src/test/resources/pom.resolveToFileFromConfigWithOAS3.1Filter.xml @@ -19,6 +19,7 @@ JSONANDYAML true + true
diff --git a/modules/swagger-models/src/main/java/io/swagger/v3/oas/models/media/Schema.java b/modules/swagger-models/src/main/java/io/swagger/v3/oas/models/media/Schema.java index c69b125734..8073c5f66c 100644 --- a/modules/swagger-models/src/main/java/io/swagger/v3/oas/models/media/Schema.java +++ b/modules/swagger-models/src/main/java/io/swagger/v3/oas/models/media/Schema.java @@ -1454,7 +1454,7 @@ public Schema prefixItems(List prefixItems) { /** * - * @since 2.2.0 (OpenAPI 3.1.0) + * @since 2.2.4 (OpenAPI 3.1.0) */ @OpenAPI31 public Schema addPrefixItem(Schema prefixItem) { From 78752b579420fe0e67835078c9918d8494f044d7 Mon Sep 17 00:00:00 2001 From: Hugo Mercado Date: Mon, 31 Oct 2022 04:05:15 -0500 Subject: [PATCH 019/131] OAS 3.1 - added OAS 3.1 fields on annotation util methods --- .../v3/core/util/AnnotationsUtils.java | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java index ed816cba86..62aa6f2fc8 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java @@ -175,6 +175,19 @@ else if (thisArraySchema == null || thatArraySchema == null) { if (!equals(thisArraySchema.schema(), thatArraySchema.schema())) { return false; } + + if (!equals(thisArraySchema.contains(), thatArraySchema.contains())) { + return false; + } + if (thisArraySchema.maxContains() != thatArraySchema.maxContains()) { + return false; + } + if (thisArraySchema.minContains() != thatArraySchema.minContains()) { + return false; + } + if (!Arrays.equals(thisArraySchema.prefixItems(), thatArraySchema.prefixItems())) { + return false; + } return true; } @@ -320,6 +333,52 @@ else if (thisSchema == null || thatSchema == null) { return false; } + if (!Arrays.equals(thisSchema.types(), thatSchema.types())) { + return false; + } + if (thisSchema.exclusiveMaximumValue() != thatSchema.exclusiveMaximumValue()) { + return false; + } + if (thisSchema.exclusiveMinimumValue() != thatSchema.exclusiveMinimumValue()) { + return false; + } + if (!StringUtils.equals(thisSchema.$id(), thatSchema.$id())) { + return false; + } + if (!StringUtils.equals(thisSchema.$schema(), thatSchema.$schema())) { + return false; + } + if (!StringUtils.equals(thisSchema.$anchor(), thatSchema.$anchor())) { + return false; + } + if (!StringUtils.equals(thisSchema.contentEncoding(), thatSchema.contentEncoding())) { + return false; + } + if (!StringUtils.equals(thisSchema.contentMediaType(), thatSchema.contentMediaType())) { + return false; + } + if (!StringUtils.equals(thisSchema.contentMediaType(), thatSchema.contentMediaType())) { + return false; + } + if (!thisSchema.contentSchema().equals(thatSchema.contentSchema())) { + return false; + } + if (!thisSchema.propertyNames().equals(thatSchema.propertyNames())) { + return false; + } + if (!thisSchema._if().equals(thatSchema._if())) { + return false; + } + if (!thisSchema._else().equals(thatSchema._else())) { + return false; + } + if (!thisSchema.then().equals(thatSchema.then())) { + return false; + } + if (!thisSchema.$comment().equals(thatSchema.$comment())) { + return false; + } + return true; } @@ -333,6 +392,11 @@ public static boolean hasArrayAnnotation(io.swagger.v3.oas.annotations.media.Arr && array.minItems() == Integer.MAX_VALUE && !hasSchemaAnnotation(array.schema()) && !hasSchemaAnnotation(array.arraySchema()) + && !hasSchemaAnnotation(array.contains()) + && array.maxContains() == 0 + && array.minContains() == 0 + && !hasSchemaAnnotation(array.unevaluatedItems()) + && array.prefixItems().length == 0 ) { return false; } From 8cb84d3d44ab8e06efe680b34b55cdf2a46747c4 Mon Sep 17 00:00:00 2001 From: Hugo Mercado Date: Fri, 23 Dec 2022 19:33:29 -0500 Subject: [PATCH 020/131] OAS 3.1 - added missed oas3.1 keyword const for schema annotation --- .../v3/oas/annotations/media/Schema.java | 11 ++++++++++- .../swagger/v3/core/util/AnnotationsUtils.java | 18 ++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Schema.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Schema.java index 3331ea2b3b..345f4c0441 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Schema.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Schema.java @@ -354,7 +354,7 @@ * @return the exclusive maximum value for this schema **/ @OpenAPI31 - int exclusiveMaximumValue() default Integer.MAX_VALUE; + int exclusiveMaximumValue() default 0; /** * Provides an exclusive minimum for a expressing exclusive range. @@ -589,4 +589,13 @@ enum RequiredMode { **/ @OpenAPI31 String[] examples() default {}; + + /** + * Provides value restricted to this schema. + * + * @since 2.2.4 / OpenAPI 3.1 + * @return const value + */ + @OpenAPI31 + String _const() default ""; } diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java index 62aa6f2fc8..ed38becf7a 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java @@ -378,6 +378,9 @@ else if (thisSchema == null || thatSchema == null) { if (!thisSchema.$comment().equals(thatSchema.$comment())) { return false; } + if (!thisSchema._const().equals(thatSchema._const())) { + return false; + } return true; } @@ -588,6 +591,13 @@ public static Optional getSchemaFromAnnotation(io.swagger.v3.oas.annotat if (!schema.then().equals(Void.class)) { schemaObject.setThen(resolveSchemaFromType(schema.then(), components, jsonViewAnnotation)); } + if (StringUtils.isNotBlank(schema._const())) { + try { + schemaObject.setConst(Json.mapper().readTree(schema._const())); + } catch (IOException e) { + schemaObject.setConst(schema._const()); + } + } if (StringUtils.isNotBlank(schema.$comment())) { schemaObject.set$comment(schema.$comment()); } @@ -2138,6 +2148,14 @@ public String[] examples() { return patch.examples(); } + @Override + public String _const() { + if (!master._const().equals(Void.class) || patch._const().equals(Void.class)) { + return master._const(); + } + return patch._const(); + } + @Override public Class annotationType() { return io.swagger.v3.oas.annotations.media.Schema.class; From bcc53100b5cb75c11a3b977795a01c1fc3390ddf Mon Sep 17 00:00:00 2001 From: Hugo Mercado Date: Fri, 23 Dec 2022 19:34:12 -0500 Subject: [PATCH 021/131] OAS 3.1 - added oas3.1 option for modelconverter interface --- .../java/io/swagger/v3/core/converter/ModelConverter.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/converter/ModelConverter.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/converter/ModelConverter.java index 0d6759634a..b499dfd25a 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/converter/ModelConverter.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/converter/ModelConverter.java @@ -13,4 +13,8 @@ public interface ModelConverter { * @return null if this ModelConverter cannot convert the given Type */ Schema resolve(AnnotatedType type, ModelConverterContext context, Iterator chain); + + default boolean isOpenapi31() { + return false; + } } From 921556bd0717b1014a99fad7917183c509fd1a55 Mon Sep 17 00:00:00 2001 From: Hugo Mercado Date: Sat, 24 Dec 2022 23:31:48 -0500 Subject: [PATCH 022/131] OAS 3.1 - updated model resolver class to work with oas 3.1 fields --- .../v3/core/jackson/ModelResolver.java | 352 +++++++++++++++++- 1 file changed, 344 insertions(+), 8 deletions(-) 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 649080308c..0592cdd204 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 @@ -34,11 +34,15 @@ import io.swagger.v3.core.util.AnnotationsUtils; import io.swagger.v3.core.util.Constants; import io.swagger.v3.core.util.Json; +import io.swagger.v3.core.util.Json31; import io.swagger.v3.core.util.ObjectMapperFactory; import io.swagger.v3.core.util.ReferenceTypeUtils; import io.swagger.v3.core.util.PrimitiveType; import io.swagger.v3.core.util.ReflectionUtils; +import io.swagger.v3.core.util.Yaml31; import io.swagger.v3.oas.annotations.Hidden; +import io.swagger.v3.oas.annotations.StringToClassMapItem; +import io.swagger.v3.oas.annotations.media.DependentRequired; import io.swagger.v3.oas.annotations.media.DiscriminatorMapping; import io.swagger.v3.oas.annotations.media.PatternProperties; import io.swagger.v3.oas.annotations.media.PatternProperty; @@ -68,12 +72,12 @@ import javax.validation.constraints.Min; import javax.validation.constraints.Pattern; import javax.validation.constraints.Size; -import javax.xml.bind.annotation.XmlElementRef; -import javax.xml.bind.annotation.XmlElementRefs; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementRef; +import javax.xml.bind.annotation.XmlElementRefs; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlSchema; import java.io.IOException; @@ -118,6 +122,8 @@ public class ModelResolver extends AbstractModelConverter implements ModelConver */ public static boolean enumsAsRef = System.getProperty(SET_PROPERTY_OF_ENUMS_AS_REF) != null; + private boolean openapi31; + public ModelResolver(ObjectMapper mapper) { super(mapper); } @@ -341,7 +347,7 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context model.xml(xml); } applyBeanValidatorAnnotations(model, annotatedType.getCtxAnnotations(), null, false); - resolveSchemaMembers(model, annotatedType); + resolveSchemaMembers(model, annotatedType, context, next); if (resolvedArrayAnnotation != null) { ArraySchema schema = new ArraySchema(); resolveArraySchema(annotatedType, schema, resolvedArrayAnnotation); @@ -522,7 +528,7 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context } if (!(model instanceof ArraySchema) || (model instanceof ArraySchema && resolvedArrayAnnotation == null)) { - resolveSchemaMembers(model, annotatedType); + resolveSchemaMembers(model, annotatedType, context, next); } final XmlAccessorType xmlAccessorTypeAnnotation = beanDesc.getClassAnnotations().get(XmlAccessorType.class); @@ -717,7 +723,14 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context modelProps.put(prop.getName(), prop); } if (modelProps.size() > 0) { - model.setProperties(modelProps); + if (model.getProperties() == null) { + model.setProperties(modelProps); + } else { + for (String key : modelProps.keySet()) { + model.addProperty(key, modelProps.get(key)); + } + } + for(String propName : requiredProps) { addRequiredItem(model, propName); } @@ -972,7 +985,11 @@ private Schema clone(Schema property) { return property; try { String cloneName = property.getName(); - property = Json.mapper().readValue(Json.pretty(property), Schema.class); + if(openapi31) { + property = Json31.mapper().readValue(Json31.pretty(property), Schema.class); + } else { + property = Json.mapper().readValue(Json.pretty(property), Schema.class); + } property.setName(cloneName); } catch (IOException e) { LOGGER.error("Could not clone property", e); @@ -2153,7 +2170,7 @@ protected Set resolveIgnoredProperties(Annotations a, Annotation[] annot propertiesToIgnore.addAll(resolveIgnoredProperties(annotations)); return propertiesToIgnore; } - + protected Set resolveIgnoredProperties(Annotation[] annotations) { Set propertiesToIgnore = new HashSet<>(); @@ -2206,8 +2223,190 @@ protected Map resolveExtensions(AnnotatedType a, io.swagger.v3.o return null; } + protected Integer resolveMaxContains(AnnotatedType a, io.swagger.v3.oas.annotations.media.ArraySchema arraySchema) { + if (arraySchema != null && arraySchema.maxContains() > 0) { + return arraySchema.maxContains(); + } + return null; + } + + protected Integer resolveMinContains(AnnotatedType a, io.swagger.v3.oas.annotations.media.ArraySchema arraySchema) { + if (arraySchema != null && arraySchema.minContains() > 0) { + return arraySchema.minContains(); + } + return null; + } + + protected BigDecimal resolveExclusiveMaximumValue(Annotated a, Annotation[] annotations, io.swagger.v3.oas.annotations.media.Schema schema) { + if (schema != null && schema.exclusiveMaximumValue() > 0) { + return new BigDecimal(schema.exclusiveMaximumValue()); + } + return null; + } + + protected BigDecimal resolveExclusiveMinimumValue(Annotated a, Annotation[] annotations, io.swagger.v3.oas.annotations.media.Schema schema) { + if (schema != null && schema.exclusiveMinimumValue() > 0) { + return new BigDecimal(schema.exclusiveMinimumValue()); + } + return null; + } + + protected String resolveId(Annotated a, Annotation[] annotations, io.swagger.v3.oas.annotations.media.Schema schema) { + if (schema != null && StringUtils.isNotBlank(schema.$id())) { + return schema.$id(); + } + return null; + } + + protected String resolve$schema(Annotated a, Annotation[] annotations, io.swagger.v3.oas.annotations.media.Schema schema) { + if (schema != null && StringUtils.isNotBlank(schema.$schema())) { + return schema.$schema(); + } + return null; + } + + protected String resolve$anchor(Annotated a, Annotation[] annotations, io.swagger.v3.oas.annotations.media.Schema schema) { + if (schema != null && StringUtils.isNotBlank(schema.$anchor())) { + return schema.$anchor(); + } + return null; + } + + protected String resolve$comment(Annotated a, Annotation[] annotations, io.swagger.v3.oas.annotations.media.Schema schema) { + if (schema != null && StringUtils.isNotBlank(schema.$comment())) { + return schema.$comment(); + } + return null; + } + + protected String resolveContentEncoding(Annotated a, Annotation[] annotations, io.swagger.v3.oas.annotations.media.Schema schema) { + if (schema != null && StringUtils.isNotBlank(schema.contentEncoding())) { + return schema.contentEncoding(); + } + return null; + } + + protected String resolveContentMediaType(Annotated a, Annotation[] annotations, io.swagger.v3.oas.annotations.media.Schema schema) { + if (schema != null && StringUtils.isNotBlank(schema.contentMediaType())) { + return schema.contentMediaType(); + } + return null; + } + + protected void resolveContains(AnnotatedType annotatedType, ArraySchema arraySchema, io.swagger.v3.oas.annotations.media.ArraySchema arraySchemaAnnotation) { + final io.swagger.v3.oas.annotations.media.Schema containsAnnotation = arraySchemaAnnotation.contains(); + final Schema contains = new Schema(); + if (StringUtils.isNotBlank(containsAnnotation.type())) { + contains.addType(containsAnnotation.type()); + } + arraySchema.setContains(contains); + resolveSchemaMembers(arraySchema, null, null, containsAnnotation); + + Integer maxContains = resolveMaxContains(annotatedType, arraySchemaAnnotation); + if (maxContains != null) { + arraySchema.setMaxContains(maxContains); + } + Integer minContains = resolveMinContains(annotatedType, arraySchemaAnnotation); + if (minContains != null) { + arraySchema.setMinContains(minContains); + } + } + + protected void resolveUnevaluatedItems(AnnotatedType annotatedType, ArraySchema arraySchema, io.swagger.v3.oas.annotations.media.ArraySchema arraySchemaAnnotation) { + final io.swagger.v3.oas.annotations.media.Schema unevaluatedItemsAnnotation = arraySchemaAnnotation.unevaluatedItems(); + final Schema unevaluatedItems = new Schema(); + if (StringUtils.isNotBlank(unevaluatedItemsAnnotation.type())) { + unevaluatedItems.addType(unevaluatedItemsAnnotation.type()); + } + arraySchema.setUnevaluatedItems(unevaluatedItems); + resolveSchemaMembers(arraySchema, null, null, unevaluatedItemsAnnotation); + } + + protected String resolveConst(Annotated a, Annotation[] annotations, io.swagger.v3.oas.annotations.media.Schema schema) { + if (schema != null && StringUtils.isNotBlank(schema._const())) { + return schema._const(); + } + return null; + } + + protected Map> resolveDependentRequired(Annotated a, Annotation[] annotations, io.swagger.v3.oas.annotations.media.Schema schema) { + if (schema.dependentRequiredMap().length == 0) { + return null; + } + final Map> dependentRequiredMap = new HashMap<>(); + for (DependentRequired dependentRequired: schema.dependentRequiredMap()) { + final String name = dependentRequired.name(); + if (dependentRequired.value().length == 0) { + continue; + } + final List values = Arrays.asList(dependentRequired.value()); + dependentRequiredMap.put(name, values); + } + return dependentRequiredMap; + } + + protected Map resolveDependentSchemas(Annotated a, Annotation[] annotations, io.swagger.v3.oas.annotations.media.Schema schemaAnnotation, AnnotatedType annotatedType, ModelConverterContext context, Iterator next) { + if (schemaAnnotation.dependentSchemas().length == 0) { + return null; + } + final Map dependentSchemas = new HashMap<>(); + for (StringToClassMapItem mapItem : schemaAnnotation.dependentSchemas()) { + final String key = mapItem.key(); + if (mapItem.value() == null || Void.class.equals(mapItem.value())) { + continue; + } + final Schema schema = resolve(new AnnotatedType(mapItem.value()), context, next); + if (schema == null) { + continue; + } + dependentSchemas.put(key, schema); + } + return dependentSchemas; + } + + protected Map resolvePatternProperties(Annotated a, Annotation[] annotations, io.swagger.v3.oas.annotations.media.Schema schemaAnnotation, AnnotatedType annotatedType, ModelConverterContext context, Iterator next) { + if (schemaAnnotation.patternProperties().length == 0) { + return null; + } + final Map patternPropertyMap = new HashMap<>(); + for (StringToClassMapItem patternPropertyItem : schemaAnnotation.patternProperties()) { + final String key = patternPropertyItem.key(); + if (Void.class.equals(patternPropertyItem.value())) { + continue; + } + final Schema schema = resolve(new AnnotatedType(patternPropertyItem.value()), context, next); + if (schema == null) { + continue; + } + patternPropertyMap.put(key, schema); + } + return patternPropertyMap; + } + + protected Map resolveProperties(Annotated a, Annotation[] annotations, io.swagger.v3.oas.annotations.media.Schema schemaAnnotation, AnnotatedType annotatedType, ModelConverterContext context, Iterator next) { + if (schemaAnnotation.properties().length == 0) { + return null; + } + final Map propertyMap = new HashMap<>(); + for (StringToClassMapItem propertyItem : schemaAnnotation.properties()) { + final String key = propertyItem.key(); + if (Void.class.equals(propertyItem.value())) { + continue; + } + final Schema schema = resolve(new AnnotatedType(propertyItem.value()), context, next); + if (schema == null) { + continue; + } + propertyMap.put(key, schema); + } + return propertyMap; + } protected void resolveSchemaMembers(Schema schema, AnnotatedType annotatedType) { + resolveSchemaMembers(schema, annotatedType, null, null); + } + + protected void resolveSchemaMembers(Schema schema, AnnotatedType annotatedType, ModelConverterContext context, Iterator next) { final JavaType type; if (annotatedType.getType() instanceof JavaType) { type = (JavaType) annotatedType.getType(); @@ -2227,6 +2426,62 @@ protected void resolveSchemaMembers(Schema schema, AnnotatedType annotatedType) Annotated a = beanDesc.getClassInfo(); Annotation[] annotations = annotatedType.getCtxAnnotations(); resolveSchemaMembers(schema, a, annotations, schemaAnnotation); + + if (openapi31 && schema != null && schemaAnnotation != null) { + if (!Void.class.equals(schemaAnnotation.contentSchema())) { + final Schema contentSchema = resolve(new AnnotatedType(schemaAnnotation.contentSchema()), context, next); + schema.setContentSchema(contentSchema); + } + if (!Void.class.equals(schemaAnnotation.propertyNames())) { + final Schema propertyNames = resolve(new AnnotatedType(schemaAnnotation.propertyNames()), context, next); + schema.setPropertyNames(propertyNames); + } + if (!Void.class.equals(schemaAnnotation._if())) { + final Schema ifSchema = resolve(new AnnotatedType(schemaAnnotation._if()), context, next); + schema.setIf(ifSchema); + } + if (!Void.class.equals(schemaAnnotation._else())) { + final Schema elseSchema = resolve(new AnnotatedType(schemaAnnotation._else()), context, next); + schema.setElse(elseSchema); + } + if (!Void.class.equals(schemaAnnotation.then())) { + final Schema thenSchema = resolve(new AnnotatedType(schemaAnnotation.then()), context, next); + schema.setThen(thenSchema); + } + if (!Void.class.equals(schemaAnnotation.contentSchema())) { + final Schema contentSchema = resolve(new AnnotatedType(schemaAnnotation.contentSchema()), context, next); + schema.setContentSchema(contentSchema); + } + if (!Void.class.equals(schemaAnnotation.unevaluatedProperties())) { + final Schema unevaluatedProperties = resolve(new AnnotatedType(schemaAnnotation.unevaluatedProperties()), context, next); + schema.setUnevaluatedProperties(unevaluatedProperties); + } + final Map> dependentRequired = resolveDependentRequired(a, annotations, schemaAnnotation); + if (dependentRequired != null && !dependentRequired.isEmpty()) { + schema.setDependentRequired(dependentRequired); + } + final Map dependentSchemas = resolveDependentSchemas(a, annotations, schemaAnnotation, annotatedType, context, next); + if (dependentSchemas != null && !dependentSchemas.isEmpty()) { + schema.setDependentSchemas(dependentSchemas); + if (schema.getDependentSchemas() == null) { + schema.setDependentSchemas(dependentSchemas); + } else { + schema.getDependentSchemas().putAll(dependentSchemas); + } + } + final Map patternProperties = resolvePatternProperties(a, annotations, schemaAnnotation, annotatedType, context, next); + if (patternProperties != null && !patternProperties.isEmpty()) { + for (String key : patternProperties.keySet()) { + schema.addPatternProperty(key, patternProperties.get(key)); + } + } + final Map properties = resolveProperties(a, annotations, schemaAnnotation, annotatedType, context, next); + if (properties != null && !properties.isEmpty()) { + for (String key : properties.keySet()) { + schema.addProperty(key, properties.get(key)); + } + } + } } protected void resolveSchemaMembers(Schema schema, Annotated a, Annotation[] annotations, io.swagger.v3.oas.annotations.media.Schema schemaAnnotation) { @@ -2328,6 +2583,55 @@ protected void resolveSchemaMembers(Schema schema, Annotated a, Annotation[] ann if (extensions != null) { extensions.forEach(schema::addExtension); } + + if (openapi31 && schemaAnnotation != null) { + for (String type : schemaAnnotation.types()) { + schema.addType(type); + } + BigDecimal exclusiveMaximumValue = resolveExclusiveMaximumValue(a, annotations, schemaAnnotation); + if (exclusiveMaximumValue != null) { + schema.setExclusiveMaximumValue(exclusiveMaximumValue); + } + BigDecimal exclusiveMinimumValue = resolveExclusiveMinimumValue(a, annotations, schemaAnnotation); + if (exclusiveMinimumValue != null) { + schema.setExclusiveMinimumValue(exclusiveMinimumValue); + } + String $id = resolveId(a, annotations, schemaAnnotation); + if ($id != null) { + schema.set$id($id); + } + String $schema = resolve$schema(a, annotations, schemaAnnotation); + if ($schema != null) { + schema.set$schema($schema); + } + String $anchor = resolve$anchor(a, annotations, schemaAnnotation); + if ($anchor != null) { + schema.set$anchor($anchor); + } + String $comment = resolve$comment(a, annotations, schemaAnnotation); + if ($comment != null) { + schema.set$comment($comment); + } + String contentEncoding = resolveContentEncoding(a, annotations, schemaAnnotation); + if (contentEncoding != null) { + schema.setContentEncoding(contentEncoding); + } + String contentMediaType = resolveContentMediaType(a, annotations, schemaAnnotation); + if (contentMediaType != null) { + schema.setContentMediaType(contentMediaType); + } + if (schemaAnnotation.examples().length > 0) { + if (schema.getExamples() == null || schema.getExamples().isEmpty()) { + schema.setExamples(Arrays.asList(schemaAnnotation.examples())); + } else { + schema.getExamples().addAll(Arrays.asList(schemaAnnotation.examples())); + } + } + String _const = resolveConst(a, annotations, schemaAnnotation); + if (_const != null) { + schema.setConst(_const); + } + } } protected void addRequiredItem(Schema model, String propName) { @@ -2435,6 +2739,38 @@ private void resolveArraySchema(AnnotatedType annotatedType, ArraySchema schema, if (AnnotationsUtils.hasSchemaAnnotation(resolvedArrayAnnotation.arraySchema())) { resolveSchemaMembers(schema, null, null, resolvedArrayAnnotation.arraySchema()); } + if (!openapi31) { + return; + } + if (AnnotationsUtils.hasSchemaAnnotation(resolvedArrayAnnotation.contains())) { + resolveContains(annotatedType, schema, resolvedArrayAnnotation); + } + if (AnnotationsUtils.hasSchemaAnnotation(resolvedArrayAnnotation.unevaluatedItems())) { + resolveUnevaluatedItems(annotatedType, schema, resolvedArrayAnnotation); + } + if (resolvedArrayAnnotation.prefixItems().length > 0) { + for (io.swagger.v3.oas.annotations.media.Schema prefixItemAnnotation : resolvedArrayAnnotation.prefixItems()) { + final Schema prefixItem = new Schema(); + if (StringUtils.isNotBlank(prefixItemAnnotation.type())) { + prefixItem.addType(prefixItemAnnotation.type()); + } + resolveSchemaMembers(prefixItem, null, null, prefixItemAnnotation); + schema.addPrefixItem(prefixItem); + } + } } } + + public ModelResolver openapi31(boolean openapi31) { + this.openapi31 = openapi31; + return this; + } + + public boolean isOpenapi31() { + return openapi31; + } + + public void setOpenapi31(boolean openapi31) { + this.openapi31 = openapi31; + } } From 7824d3b335664ebe317ec40920bed56ef56a5729 Mon Sep 17 00:00:00 2001 From: Hugo Mercado Date: Tue, 27 Dec 2022 13:38:13 -0500 Subject: [PATCH 023/131] OAS 3.1 - fixed types for contains and unevaluated items fields --- .../v3/core/jackson/ModelResolver.java | 47 ++++++++++++------- 1 file changed, 29 insertions(+), 18 deletions(-) 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 0592cdd204..ca5b7846e7 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 @@ -2296,8 +2296,10 @@ protected String resolveContentMediaType(Annotated a, Annotation[] annotations, protected void resolveContains(AnnotatedType annotatedType, ArraySchema arraySchema, io.swagger.v3.oas.annotations.media.ArraySchema arraySchemaAnnotation) { final io.swagger.v3.oas.annotations.media.Schema containsAnnotation = arraySchemaAnnotation.contains(); final Schema contains = new Schema(); - if (StringUtils.isNotBlank(containsAnnotation.type())) { - contains.addType(containsAnnotation.type()); + if (containsAnnotation.types().length > 0) { + for (String type : containsAnnotation.types()) { + contains.addType(type); + } } arraySchema.setContains(contains); resolveSchemaMembers(arraySchema, null, null, containsAnnotation); @@ -2318,6 +2320,11 @@ protected void resolveUnevaluatedItems(AnnotatedType annotatedType, ArraySchema if (StringUtils.isNotBlank(unevaluatedItemsAnnotation.type())) { unevaluatedItems.addType(unevaluatedItemsAnnotation.type()); } + if (unevaluatedItemsAnnotation.types().length > 0) { + for (String type : unevaluatedItemsAnnotation.types()) { + unevaluatedItems.addType(type); + } + } arraySchema.setUnevaluatedItems(unevaluatedItems); resolveSchemaMembers(arraySchema, null, null, unevaluatedItemsAnnotation); } @@ -2739,23 +2746,27 @@ private void resolveArraySchema(AnnotatedType annotatedType, ArraySchema schema, if (AnnotationsUtils.hasSchemaAnnotation(resolvedArrayAnnotation.arraySchema())) { resolveSchemaMembers(schema, null, null, resolvedArrayAnnotation.arraySchema()); } - if (!openapi31) { - return; - } - if (AnnotationsUtils.hasSchemaAnnotation(resolvedArrayAnnotation.contains())) { - resolveContains(annotatedType, schema, resolvedArrayAnnotation); - } - if (AnnotationsUtils.hasSchemaAnnotation(resolvedArrayAnnotation.unevaluatedItems())) { - resolveUnevaluatedItems(annotatedType, schema, resolvedArrayAnnotation); - } - if (resolvedArrayAnnotation.prefixItems().length > 0) { - for (io.swagger.v3.oas.annotations.media.Schema prefixItemAnnotation : resolvedArrayAnnotation.prefixItems()) { - final Schema prefixItem = new Schema(); - if (StringUtils.isNotBlank(prefixItemAnnotation.type())) { - prefixItem.addType(prefixItemAnnotation.type()); + if (openapi31) { + if (AnnotationsUtils.hasSchemaAnnotation(resolvedArrayAnnotation.contains())) { + resolveContains(annotatedType, schema, resolvedArrayAnnotation); + } + if (AnnotationsUtils.hasSchemaAnnotation(resolvedArrayAnnotation.unevaluatedItems())) { + resolveUnevaluatedItems(annotatedType, schema, resolvedArrayAnnotation); + } + if (resolvedArrayAnnotation.prefixItems().length > 0) { + for (io.swagger.v3.oas.annotations.media.Schema prefixItemAnnotation : resolvedArrayAnnotation.prefixItems()) { + final Schema prefixItem = new Schema(); + if (StringUtils.isNotBlank(prefixItemAnnotation.type())) { + prefixItem.addType(prefixItemAnnotation.type()); + } + resolveSchemaMembers(prefixItem, null, null, prefixItemAnnotation); + schema.addPrefixItem(prefixItem); + } + } + if (schema.getItems() != null && AnnotationsUtils.hasSchemaAnnotation(resolvedArrayAnnotation.items())) { + for (String type : resolvedArrayAnnotation.items().types()) { + schema.getItems().addType(type); } - resolveSchemaMembers(prefixItem, null, null, prefixItemAnnotation); - schema.addPrefixItem(prefixItem); } } } From ce0abe8ceccd3aaacf981744ec64d1c4b69d439e Mon Sep 17 00:00:00 2001 From: Hugo Mercado Date: Tue, 27 Dec 2022 16:24:55 -0500 Subject: [PATCH 024/131] OAS 3.1 - handle dependent schema annotations in resolver class --- .../v3/core/jackson/ModelResolver.java | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) 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 ca5b7846e7..b946a64c2e 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 @@ -43,6 +43,8 @@ import io.swagger.v3.oas.annotations.Hidden; import io.swagger.v3.oas.annotations.StringToClassMapItem; import io.swagger.v3.oas.annotations.media.DependentRequired; +import io.swagger.v3.oas.annotations.media.DependentSchema; +import io.swagger.v3.oas.annotations.media.DependentSchemas; import io.swagger.v3.oas.annotations.media.DiscriminatorMapping; import io.swagger.v3.oas.annotations.media.PatternProperties; import io.swagger.v3.oas.annotations.media.PatternProperty; @@ -806,6 +808,17 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context } } + if (openapi31) { + Map dependentSchemas = resolveDependentSchemas(type, annotatedType.getCtxAnnotations(), context); + if (model != null && dependentSchemas != null && !dependentSchemas.isEmpty()) { + if (model.getDependentSchemas() == null) { + model.dependentSchemas(dependentSchemas); + } else { + model.getDependentSchemas().putAll(dependentSchemas); + } + } + } + if (isComposedSchema) { ComposedSchema composedSchema = (ComposedSchema) model; @@ -1733,6 +1746,58 @@ protected Map resolveSchemaProperties(JavaType a, Annotation[] a return schemaProperties; } + protected Map resolveDependentSchemas(JavaType a, Annotation[] annotations, ModelConverterContext context) { + final Map dependentSchemaMap = new LinkedHashMap<>(); + + DependentSchemas dependentSchemasAnnotation = a.getRawClass().getAnnotation(DependentSchemas.class); + if (dependentSchemasAnnotation != null && dependentSchemasAnnotation.value().length > 0) { + for (DependentSchema dependentSchemaAnnotation : dependentSchemasAnnotation.value()) { + dependentSchemaMap.put(dependentSchemaAnnotation.name(), dependentSchemaAnnotation); + } + } + + DependentSchema singleDependentSchema = a.getRawClass().getAnnotation(DependentSchema.class); + if (singleDependentSchema != null) { + dependentSchemaMap.put(singleDependentSchema.name(), singleDependentSchema); + } + + dependentSchemasAnnotation = AnnotationsUtils.getAnnotation(DependentSchemas.class, annotations); + if (dependentSchemasAnnotation != null && dependentSchemasAnnotation.value().length > 0) { + for (DependentSchema dependentSchemaAnnotation : dependentSchemasAnnotation.value()) { + dependentSchemaMap.put(dependentSchemaAnnotation.name(), dependentSchemaAnnotation); + } + } + + singleDependentSchema = AnnotationsUtils.getAnnotation(DependentSchema.class, annotations); + if (singleDependentSchema != null) { + dependentSchemaMap.put(singleDependentSchema.name(), singleDependentSchema); + } + + if (dependentSchemaMap.isEmpty()) { + return null; + } + + Map dependentSchemas = new LinkedHashMap<>(); + + for (DependentSchema dependentSchemaAnnotation: dependentSchemaMap.values()) { + String name = dependentSchemaAnnotation.name(); + if (StringUtils.isBlank(name)) { + continue; + } + Annotation[] propAnnotations = new Annotation[]{dependentSchemaAnnotation.schema(), dependentSchemaAnnotation.array()}; + AnnotatedType propType = new AnnotatedType() + .type(Object.class) + .ctxAnnotations(propAnnotations) + .resolveAsRef(true); + Schema resolvedPropSchema = context.resolve(propType); + if (resolvedPropSchema != null) { + dependentSchemas.put(name, resolvedPropSchema); + } + } + + return dependentSchemas; + } + protected Object resolveDefaultValue(Annotated a, Annotation[] annotations, io.swagger.v3.oas.annotations.media.Schema schema) { if (schema != null) { if (!schema.defaultValue().isEmpty()) { From 7446f48fa0b40d5ccf53cb2ad27222a1f0f2a130 Mon Sep 17 00:00:00 2001 From: Hugo Mercado Date: Tue, 27 Dec 2022 16:26:12 -0500 Subject: [PATCH 025/131] OAS 3.1 - added tests for OAS 3.1 model resolver --- .../resolving/v31/ModelResolverOAS31Test.java | 156 ++++++++++++++++++ .../v3/core/resolving/v31/model/Address.java | 90 ++++++++++ .../resolving/v31/model/AnnotatedArray.java | 25 +++ .../v3/core/resolving/v31/model/Client.java | 23 +++ .../core/resolving/v31/model/CreditCard.java | 14 ++ .../v31/model/ModelWithDependentSchema.java | 55 ++++++ .../v31/model/ModelWithOAS31Stuff.java | 133 +++++++++++++++ .../v31/model/PostalCodeNumberPattern.java | 20 +++ .../v31/model/PostalCodePattern.java | 19 +++ 9 files changed, 535 insertions(+) create mode 100644 modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/ModelResolverOAS31Test.java create mode 100644 modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/Address.java create mode 100644 modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/AnnotatedArray.java create mode 100644 modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/Client.java create mode 100644 modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/CreditCard.java create mode 100644 modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/ModelWithDependentSchema.java create mode 100644 modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/ModelWithOAS31Stuff.java create mode 100644 modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/PostalCodeNumberPattern.java create mode 100644 modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/PostalCodePattern.java diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/ModelResolverOAS31Test.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/ModelResolverOAS31Test.java new file mode 100644 index 0000000000..14e31a6107 --- /dev/null +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/ModelResolverOAS31Test.java @@ -0,0 +1,156 @@ +package io.swagger.v3.core.resolving.v31; + +import io.swagger.v3.core.converter.AnnotatedType; +import io.swagger.v3.core.converter.ModelConverterContextImpl; +import io.swagger.v3.core.jackson.ModelResolver; +import io.swagger.v3.core.matchers.SerializationMatchers; +import io.swagger.v3.core.resolving.SwaggerTestBase; +import io.swagger.v3.core.resolving.v31.model.AnnotatedArray; +import io.swagger.v3.core.resolving.v31.model.ModelWithDependentSchema; +import io.swagger.v3.core.resolving.v31.model.ModelWithOAS31Stuff; +import io.swagger.v3.oas.models.media.Schema; +import org.testng.annotations.Test; + +public class ModelResolverOAS31Test extends SwaggerTestBase { + + @Test + public void testAnnotatedArray() { + final ModelResolver modelResolver = new ModelResolver(mapper()).openapi31(true); + final ModelConverterContextImpl context = new ModelConverterContextImpl(modelResolver); + io.swagger.v3.oas.models.media.Schema model = context.resolve(new AnnotatedType(AnnotatedArray.class)); + SerializationMatchers.assertEqualsToYaml31(model, "type:\n" + + "- array\n" + + "- string\n" + + "- number\n" + + "contains:\n" + + " type: string\n" + + "items:\n" + + " type: string\n" + + "maxContains: 10\n" + + "minContains: 1\n" + + "prefixItems:\n" + + "- type: string\n" + + "unevaluatedItems:\n" + + " type: number"); + } + + @Test + public void testOAS31Fields() { + final ModelResolver modelResolver = new ModelResolver(mapper()).openapi31(true); + final ModelConverterContextImpl context = new ModelConverterContextImpl(modelResolver); + Schema model = context.resolve(new AnnotatedType(ModelWithOAS31Stuff.class)); + SerializationMatchers.assertEqualsToYaml31(model, "type: object\n" + + "$comment: Random comment at schema level\n" + + "$id: http://yourdomain.com/schemas/myschema.json\n" + + "description: this is model for testing OAS 3.1 resolving\n" + + "properties:\n" + + " randomList:\n" + + " type:\n" + + " - array\n" + + " - string\n" + + " - number\n" + + " contains:\n" + + " type: string\n" + + " items:\n" + + " type: string\n" + + " maxContains: 10\n" + + " minContains: 1\n" + + " prefixItems:\n" + + " - type: string\n" + + " unevaluatedItems:\n" + + " type: number\n" + + " status:\n" + + " type:\n" + + " - string\n" + + " - number\n" + + " intValue:\n" + + " type: integer\n" + + " format: int32\n" + + " $anchor: intValue\n" + + " $comment: comment at schema property level\n" + + " exclusiveMaximum: 100\n" + + " exclusiveMinimum: 1\n" + + " text:\n" + + " type: string\n" + + " contentEncoding: plan/text\n" + + " contentMediaType: base64\n" + + " encodedString:\n" + + " type: string\n" + + " contentMediaType: application/jwt\n" + + " contentSchema:\n" + + " description: MultipleBaseBean\n" + + " properties:\n" + + " beanType:\n" + + " type: string\n" + + " a:\n" + + " type: integer\n" + + " format: int32\n" + + " b:\n" + + " type: string\n" + + " address:\n" + + " if:\n" + + " properties:\n" + + " country:\n" + + " const: United States\n" + + " then:\n" + + " properties:\n" + + " postalCode:\n" + + " pattern: \"[0-9]{5}(-[0-9]{4})?\"\n" + + " else:\n" + + " properties:\n" + + " postalCode:\n" + + " pattern: \"[A-Z][0-9][A-Z] [0-9][A-Z][0-9]\"\n" + + " dependentRequired:\n" + + " street:\n" + + " - country\n" + + " properties:\n" + + " street:\n" + + " type: string\n" + + " country:\n" + + " type: string\n" + + " enum:\n" + + " - UNITED_STATES_OF_AMERICA\n" + + " - CANADA\n" + + " propertyNames:\n" + + " pattern: \"^[A-Za-z_][A-Za-z0-9_]*$\"\n" + + " client:\n" + + " dependentSchemas:\n" + + " creditCard:\n" + + " properties:\n" + + " billingAddress:\n" + + " type: string\n" + + " patternProperties:\n" + + " creditCard:\n" + + " properties:\n" + + " billingAddress:\n" + + " type: string\n" + + " properties:\n" + + " extraObject: {}\n" + + " name:\n" + + " type: string\n" + + " creditCard:\n" + + " type: integer\n" + + " format: int32"); + } + + @Test + public void testDependentSchemasAnnotation() { + final ModelResolver modelResolver = new ModelResolver(mapper()).openapi31(true); + final ModelConverterContextImpl context = new ModelConverterContextImpl(modelResolver); + io.swagger.v3.oas.models.media.Schema model = context.resolve(new AnnotatedType(ModelWithDependentSchema.class)); + + SerializationMatchers.assertEqualsToYaml31(model, "dependentSchemas:\n" + + " value:\n" + + " properties:\n" + + " enable:\n" + + " properties:\n" + + " type:\n" + + " type: boolean\n" + + "properties:\n" + + " name:\n" + + " type: string\n" + + " value:\n" + + " type: integer\n" + + " format: int32"); + } +} diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/Address.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/Address.java new file mode 100644 index 0000000000..862b4d4e50 --- /dev/null +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/Address.java @@ -0,0 +1,90 @@ +package io.swagger.v3.core.resolving.v31.model; + +import io.swagger.v3.oas.annotations.media.DependentRequired; +import io.swagger.v3.oas.annotations.media.Schema; + +@Schema( + _if = Address.AnnotatedCountry.class, + then = PostalCodeNumberPattern.class, + _else = PostalCodePattern.class, + propertyNames = Address.PropertyNamesPattern.class, + dependentRequiredMap = { + @DependentRequired( + name = "street", + value = { "country" } + ) + } +) +public class Address { + + private String street; + private CountryEnum country; + + public enum CountryEnum { + UNITED_STATES_OF_AMERICA("United States of America"), + CANADA("Canada"); + + private String value; + + CountryEnum(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + public static CountryEnum fromValue(String value) { + for (CountryEnum b : CountryEnum.values()) { + if (b.value.equals(value)) { + return b; + } + } + return null; + } + } + + public String getStreet() { + return street; + } + + public void setStreet(String street) { + this.street = street; + } + + public CountryEnum getCountry() { + return country; + } + + public void setCountry(CountryEnum country) { + this.country = country; + } + + class AnnotatedCountry { + + private Object country; + + @Schema( + _const = "United States" + + ) + public Object getCountry() { + return country; + } + + public void setCountry(Object country) { + this.country = country; + } + } + + @Schema( + pattern = "^[A-Za-z_][A-Za-z0-9_]*$" + ) + class PropertyNamesPattern { + } +} diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/AnnotatedArray.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/AnnotatedArray.java new file mode 100644 index 0000000000..566a98f116 --- /dev/null +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/AnnotatedArray.java @@ -0,0 +1,25 @@ +package io.swagger.v3.core.resolving.v31.model; + +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Schema; + +@ArraySchema( + maxContains = 10, + minContains = 1, + contains = @Schema( + types = { "string" } + ), + unevaluatedItems = @Schema( + types = { "number" } + ), + items = @Schema( + types = { "string" } + ), + prefixItems = { + @Schema( + types = { "string" } + ) + } +) +public class AnnotatedArray { +} diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/Client.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/Client.java new file mode 100644 index 0000000000..d4e130682f --- /dev/null +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/Client.java @@ -0,0 +1,23 @@ +package io.swagger.v3.core.resolving.v31.model; + +public class Client { + + private String name; + private int creditCard; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getCreditCard() { + return creditCard; + } + + public void setCreditCard(int creditCard) { + this.creditCard = creditCard; + } +} \ No newline at end of file diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/CreditCard.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/CreditCard.java new file mode 100644 index 0000000000..fc8d4c900c --- /dev/null +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/CreditCard.java @@ -0,0 +1,14 @@ +package io.swagger.v3.core.resolving.v31.model; + +public class CreditCard { + + private String billingAddress; + + public String getBillingAddress() { + return billingAddress; + } + + public void setBillingAddress(String billingAddress) { + this.billingAddress = billingAddress; + } +} diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/ModelWithDependentSchema.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/ModelWithDependentSchema.java new file mode 100644 index 0000000000..a25a08d905 --- /dev/null +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/ModelWithDependentSchema.java @@ -0,0 +1,55 @@ +package io.swagger.v3.core.resolving.v31.model; + +import io.swagger.v3.oas.annotations.StringToClassMapItem; +import io.swagger.v3.oas.annotations.media.DependentSchema; +import io.swagger.v3.oas.annotations.media.DependentSchemas; +import io.swagger.v3.oas.annotations.media.Schema; + +@DependentSchemas( + value = { + @DependentSchema( + name = "value", + schema = @Schema( + properties = { + @StringToClassMapItem( + key = "enable", + value = ModelWithDependentSchema.BooleanFakeClass.class + ) + } + ) + ) + } +) +public class ModelWithDependentSchema { + + private String name; + private int value; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getValue() { + return value; + } + + public void setValue(int value) { + this.value = value; + } + + class BooleanFakeClass { + private boolean type; + + public boolean isType() { + return type; + } + + public void setType(boolean type) { + this.type = type; + } + } +} diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/ModelWithOAS31Stuff.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/ModelWithOAS31Stuff.java new file mode 100644 index 0000000000..c1ef938175 --- /dev/null +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/ModelWithOAS31Stuff.java @@ -0,0 +1,133 @@ +package io.swagger.v3.core.resolving.v31.model; + +import io.swagger.v3.oas.annotations.StringToClassMapItem; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Schema; + +import java.util.List; + +@Schema( + $id = "http://yourdomain.com/schemas/myschema.json", + description = "this is model for testing OAS 3.1 resolving", + $comment = "Random comment at schema level", + types = {"object"} +) +public class ModelWithOAS31Stuff { + + private List randomList; + private Object status; + private int intValue; + private String text; + private String encodedString; + private Address address; + private Client client; + + @ArraySchema( + maxContains = 10, + minContains = 1, + contains = @Schema( + types = "string" + ), + unevaluatedItems = @Schema( + types = "number" + ), + prefixItems = { + @Schema( + types = "string" + ) + } + ) + public List getRandomList() { + return randomList; + } + + public void setRandomList(List randomList) { + this.randomList = randomList; + } + + @Schema(types = { + "string", + "number" + }) + public Object getStatus() { + return status; + } + + public void setStatus(Object status) { + this.status = status; + } + + @Schema( + $anchor = "intValue", + $comment = "comment at schema property level", + exclusiveMaximumValue = 100, + exclusiveMinimumValue = 1 + ) + public int getIntValue() { + return intValue; + } + + public void setIntValue(int intValue) { + this.intValue = intValue; + } + + @Schema( + contentEncoding = "plan/text", + contentMediaType = "base64" + ) + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + @Schema( + contentMediaType = "application/jwt", + contentSchema = MultipleBaseBean.class + ) + public String getEncodedString() { + return encodedString; + } + + public void setEncodedString(String encodedString) { + this.encodedString = encodedString; + } + + public Address getAddress() { + return address; + } + + public void setAddress(Address address) { + this.address = address; + } + + @Schema( + dependentSchemas = { + @StringToClassMapItem( + key = "creditCard", + value = CreditCard.class + ) + }, + patternProperties = { + @StringToClassMapItem( + key = "creditCard", + value = CreditCard.class + ) + }, + properties = { + @StringToClassMapItem( + key = "extraObject", + value = Object.class + ) + } + ) + public Client getClient() { + return client; + } + + public void setClient(Client client) { + this.client = client; + } +} diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/PostalCodeNumberPattern.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/PostalCodeNumberPattern.java new file mode 100644 index 0000000000..9d20719472 --- /dev/null +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/PostalCodeNumberPattern.java @@ -0,0 +1,20 @@ +package io.swagger.v3.core.resolving.v31.model; + +import io.swagger.v3.oas.annotations.media.Schema; + + +public class PostalCodeNumberPattern { + + private Object postalCode; + + @Schema( + pattern = "[0-9]{5}(-[0-9]{4})?" + ) + public Object getPostalCode() { + return postalCode; + } + + public void setPostalCode(Object postalCode) { + this.postalCode = postalCode; + } +} diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/PostalCodePattern.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/PostalCodePattern.java new file mode 100644 index 0000000000..e345c09d96 --- /dev/null +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/PostalCodePattern.java @@ -0,0 +1,19 @@ +package io.swagger.v3.core.resolving.v31.model; + +import io.swagger.v3.oas.annotations.media.Schema; + +public class PostalCodePattern { + + private Object postalCode; + + @Schema( + pattern = "[A-Z][0-9][A-Z] [0-9][A-Z][0-9]" + ) + public Object getPostalCode() { + return postalCode; + } + + public void setPostalCode(Object postalCode) { + this.postalCode = postalCode; + } +} From fd1e9376a8241bb1fd7dc3b1abeecb0201565f3a Mon Sep 17 00:00:00 2001 From: Hugo Mercado Date: Thu, 19 Jan 2023 04:13:33 -0500 Subject: [PATCH 026/131] OAS 3.1 - fixed schema maximum value default value comparison. --- .../src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java index ed38becf7a..cd2ed1b31b 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java @@ -108,7 +108,7 @@ public static boolean hasSchemaAnnotation(io.swagger.v3.oas.annotations.media.Sc && schema.unevaluatedProperties().equals(Void.class) && schema.types().length == 0 && schema.exclusiveMinimumValue() == 0 - && schema.exclusiveMaximumValue() == Integer.MAX_VALUE + && schema.exclusiveMaximumValue() == 0 && StringUtils.isBlank(schema.$id()) && StringUtils.isBlank(schema.$schema()) && StringUtils.isBlank(schema.$anchor()) From dc1659901932afedbc905b3f0b6ee3eb2fdaff25 Mon Sep 17 00:00:00 2001 From: Hugo Mercado Date: Thu, 19 Jan 2023 04:21:33 -0500 Subject: [PATCH 027/131] OAS 3.1 - allow set schema annotation types to schema object types --- .../java/io/swagger/v3/core/util/AnnotationsUtils.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java index cd2ed1b31b..8647c25c55 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java @@ -549,10 +549,9 @@ public static Optional getSchemaFromAnnotation(io.swagger.v3.oas.annotat if (schema.types().length > 0) { if (schema.types().length == 1) { schemaObject.setType(schema.types()[0]); - } else { - for (String type : schema.types()) { - schemaObject.addType(type); - } + } + for (String type : schema.types()) { + schemaObject.addType(type); } } if (StringUtils.isNotBlank(schema.$id())) { From 680cb16064928aade594acd3e18ff15d17bb615c Mon Sep 17 00:00:00 2001 From: Hugo Mercado Date: Thu, 19 Jan 2023 04:21:56 -0500 Subject: [PATCH 028/131] OAS 3.1 - small tweak --- .../v3/jaxrs2/integration/ServletConfigContextUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/ServletConfigContextUtils.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/ServletConfigContextUtils.java index d00a15ca17..6fa2744dd8 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/ServletConfigContextUtils.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/ServletConfigContextUtils.java @@ -128,7 +128,7 @@ public static Boolean getBooleanInitParam(ServletConfig sc, String paramKey) { if (StringUtils.isBlank(param)) { return null; } - return Boolean.valueOf(Boolean.parseBoolean(param)); + return Boolean.parseBoolean(param); } public static Long getLongInitParam(ServletConfig sc, String paramKey) { From 85d4f6e2e9f044f58497670fffe3e146c0be442c Mon Sep 17 00:00:00 2001 From: Hugo Mercado Date: Thu, 19 Jan 2023 04:23:12 -0500 Subject: [PATCH 029/131] OAS 3.1 - use the right mapper for OAS31 serialization --- .../swagger/v3/jaxrs2/SwaggerSerializers.java | 43 ++++++++++++++++--- 1 file changed, 37 insertions(+), 6 deletions(-) diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/SwaggerSerializers.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/SwaggerSerializers.java index d3b431c52f..78df2ee9c0 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/SwaggerSerializers.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/SwaggerSerializers.java @@ -1,7 +1,9 @@ package io.swagger.v3.jaxrs2; import io.swagger.v3.core.util.Json; +import io.swagger.v3.core.util.Json31; import io.swagger.v3.core.util.Yaml; +import io.swagger.v3.core.util.Yaml31; import io.swagger.v3.oas.models.OpenAPI; import javax.ws.rs.Produces; @@ -18,11 +20,16 @@ @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, "application/yaml"}) public class SwaggerSerializers implements MessageBodyWriter { static boolean prettyPrint = false; + static boolean openapi31 = false; public static void setPrettyPrint(boolean shouldPrettyPrint) { SwaggerSerializers.prettyPrint = shouldPrettyPrint; } + public static void setOpenapi31(boolean openapi31) { + SwaggerSerializers.openapi31 = openapi31; + } + @Override public boolean isWriteable(Class type, Type genericType, Annotation[] annotations, MediaType mediaType) { @@ -44,25 +51,49 @@ public void writeTo(OpenAPI data, OutputStream out) throws IOException { if (mediaType.isCompatible(MediaType.APPLICATION_JSON_TYPE)) { if (prettyPrint) { - out.write(Json.pretty().writeValueAsBytes(data)); + if (openapi31) { + out.write(Json31.pretty().writeValueAsBytes(data)); + } else { + out.write(Json.pretty().writeValueAsBytes(data)); + } } else { - out.write(Json.mapper().writeValueAsBytes(data)); + if (openapi31) { + out.write(Json31.mapper().writeValueAsBytes(data)); + } else { + out.write(Json.mapper().writeValueAsBytes(data)); + } } } else if (mediaType.toString().startsWith("application/yaml")) { headers.remove("Content-Type"); headers.add("Content-Type", "application/yaml"); if (prettyPrint) { - out.write(Yaml.pretty().writeValueAsBytes(data)); + if (openapi31) { + out.write(Yaml31.pretty().writeValueAsBytes(data)); + } else { + out.write(Yaml.pretty().writeValueAsBytes(data)); + } } else { - out.write(Yaml.mapper().writeValueAsBytes(data)); + if (openapi31) { + out.write(Yaml31.mapper().writeValueAsBytes(data)); + } else { + out.write(Yaml.mapper().writeValueAsBytes(data)); + } } } else if (mediaType.isCompatible(MediaType.APPLICATION_XML_TYPE)) { headers.remove("Content-Type"); headers.add("Content-Type", MediaType.APPLICATION_JSON); if (prettyPrint) { - out.write(Json.pretty().writeValueAsBytes(data)); + if (openapi31) { + out.write(Json31.pretty().writeValueAsBytes(data)); + } else { + out.write(Json.pretty().writeValueAsBytes(data)); + } } else { - out.write(Json.mapper().writeValueAsBytes(data)); + if (openapi31) { + out.write(Json31.mapper().writeValueAsBytes(data)); + } else { + out.write(Json.mapper().writeValueAsBytes(data)); + } } } } From 75a7a13b2a9619e85b68eda745a315dcd8723a87 Mon Sep 17 00:00:00 2001 From: Hugo Mercado Date: Thu, 19 Jan 2023 05:00:58 -0500 Subject: [PATCH 030/131] OAS 3.1 - set default openapi version for 3.1.0 --- .../src/main/java/io/swagger/v3/jaxrs2/Reader.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java index 0831bd5347..e1b7f7c0ee 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java @@ -270,6 +270,10 @@ public OpenAPI read(Class cls, // class path final javax.ws.rs.Path apiPath = ReflectionUtils.getAnnotation(cls, javax.ws.rs.Path.class); + if (Boolean.TRUE.equals(config.isOpenAPI31())) { + openAPI.setOpenapi("3.1.0"); + } + if (hidden != null) { // || (apiPath == null && !isSubresource)) { return openAPI; } From 720d7431141139cb7bd26fca64cad6ab602a7753 Mon Sep 17 00:00:00 2001 From: Hugo Mercado Date: Thu, 19 Jan 2023 05:01:35 -0500 Subject: [PATCH 031/131] OAS 3.1 - use right mapper for serialization --- .../src/main/java/io/swagger/v3/jaxrs2/Reader.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java index e1b7f7c0ee..844d0abec7 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java @@ -11,6 +11,7 @@ import io.swagger.v3.core.converter.ResolvedSchema; import io.swagger.v3.core.util.AnnotationsUtils; import io.swagger.v3.core.util.Json; +import io.swagger.v3.core.util.Json31; import io.swagger.v3.core.util.ParameterProcessor; import io.swagger.v3.core.util.PathUtils; import io.swagger.v3.core.util.ReflectionUtils; @@ -385,7 +386,12 @@ public OpenAPI read(Class cls, JavaType classType = TypeFactory.defaultInstance().constructType(cls); - BeanDescription bd = Json.mapper().getSerializationConfig().introspect(classType); + BeanDescription bd; + if (Boolean.TRUE.equals(config.isOpenAPI31())) { + bd = Json31.mapper().getSerializationConfig().introspect(classType); + } else { + bd = Json.mapper().getSerializationConfig().introspect(classType); + } final List globalParameters = new ArrayList<>(); From be38f56367a7cdfd778c43c733d8af43afec0488 Mon Sep 17 00:00:00 2001 From: Hugo Mercado Date: Sun, 22 Jan 2023 15:34:44 -0500 Subject: [PATCH 032/131] OAS 3.1 - updated Reader class to work with openapi31, added tests to verify links and content support for OAS 3.1 --- .../java/io/swagger/v3/jaxrs2/Reader.java | 14 +++- .../io/swagger/v3/jaxrs2/PetResourceTest.java | 35 ++++++++- .../annotations/AbstractAnnotationTest.java | 9 +++ .../matchers/SerializationMatchers.java | 23 ++++++ .../link/LinksAndContent31Resource.java | 76 +++++++++++++++++++ .../OpenAPI31DefinitionResource.java | 30 ++++++++ .../petstore/OpenAPI31DefinitionResource.yaml | 16 ++++ .../links/LinksAndContent31Resource.yaml | 33 ++++++++ 8 files changed, 231 insertions(+), 5 deletions(-) create mode 100644 modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore/link/LinksAndContent31Resource.java create mode 100644 modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore/openapidefintion/OpenAPI31DefinitionResource.java create mode 100644 modules/swagger-jaxrs2/src/test/resources/petstore/OpenAPI31DefinitionResource.yaml create mode 100644 modules/swagger-jaxrs2/src/test/resources/petstore/links/LinksAndContent31Resource.yaml diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java index 844d0abec7..3cc3b9b900 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java @@ -1307,16 +1307,18 @@ private void setOperationObjectFromApiOperationAnnotation( operation.setDeprecated(apiOperation.deprecated()); } + final boolean openapi31 = Boolean.TRUE.equals(config.isOpenAPI31()); + ReaderUtils.getStringListFromStringArray(apiOperation.tags()).ifPresent(tags -> tags.stream() .filter(t -> operation.getTags() == null || (operation.getTags() != null && !operation.getTags().contains(t))) .forEach(operation::addTagsItem)); if (operation.getExternalDocs() == null) { // if not set in root annotation - AnnotationsUtils.getExternalDocumentation(apiOperation.externalDocs()).ifPresent(operation::setExternalDocs); + AnnotationsUtils.getExternalDocumentation(apiOperation.externalDocs(), openapi31).ifPresent(operation::setExternalDocs); } - OperationParser.getApiResponses(apiOperation.responses(), classProduces, methodProduces, components, jsonViewAnnotation).ifPresent(responses -> { + OperationParser.getApiResponses(apiOperation.responses(), classProduces, methodProduces, components, jsonViewAnnotation, openapi31).ifPresent(responses -> { if (operation.getResponses() == null) { operation.setResponses(responses); } else { @@ -1348,9 +1350,13 @@ private void setOperationObjectFromApiOperationAnnotation( // Extensions in Operation if (apiOperation.extensions().length > 0) { - Map extensions = AnnotationsUtils.getExtensions(apiOperation.extensions()); + Map extensions = AnnotationsUtils.getExtensions(openapi31, apiOperation.extensions()); if (extensions != null) { - extensions.forEach(operation::addExtension); + if (openapi31) { + extensions.forEach(operation::addExtension31); + } else { + extensions.forEach(operation::addExtension); + } } } } diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/PetResourceTest.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/PetResourceTest.java index ea9a097691..44f140b98f 100644 --- a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/PetResourceTest.java +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/PetResourceTest.java @@ -1,5 +1,7 @@ package io.swagger.v3.jaxrs2; +import io.swagger.v3.core.util.Yaml; +import io.swagger.v3.core.util.Yaml31; import io.swagger.v3.jaxrs2.annotations.AbstractAnnotationTest; import io.swagger.v3.jaxrs2.matchers.SerializationMatchers; import io.swagger.v3.jaxrs2.petstore.EmptyPetResource; @@ -8,7 +10,9 @@ import io.swagger.v3.jaxrs2.petstore.callback.RepeatableCallbackResource; import io.swagger.v3.jaxrs2.petstore.callback.SimpleCallbackWithOperationResource; import io.swagger.v3.jaxrs2.petstore.example.ExamplesResource; +import io.swagger.v3.jaxrs2.petstore.link.LinksAndContent31Resource; import io.swagger.v3.jaxrs2.petstore.link.LinksResource; +import io.swagger.v3.jaxrs2.petstore.openapidefintion.OpenAPI31DefinitionResource; import io.swagger.v3.jaxrs2.petstore.openapidefintion.OpenAPIDefinitionResource; import io.swagger.v3.jaxrs2.petstore.operation.AnnotatedSameNameOperationResource; import io.swagger.v3.jaxrs2.petstore.operation.ExternalDocumentationResource; @@ -26,6 +30,7 @@ import io.swagger.v3.jaxrs2.petstore.parameter.OpenAPIJaxRSAnnotatedParameter; import io.swagger.v3.jaxrs2.petstore.parameter.OpenAPIWithContentJaxRSAnnotatedParameter; import io.swagger.v3.jaxrs2.petstore.parameter.OpenAPIWithImplementationJaxRSAnnotatedParameter; +import io.swagger.v3.jaxrs2.petstore.parameter.Parameters31Resource; import io.swagger.v3.jaxrs2.petstore.parameter.ParametersResource; import io.swagger.v3.jaxrs2.petstore.parameter.RepeatableParametersResource; import io.swagger.v3.jaxrs2.petstore.parameter.SingleJaxRSAnnotatedParameter; @@ -46,6 +51,7 @@ import io.swagger.v3.jaxrs2.petstore.tags.TagMethodResource; import io.swagger.v3.jaxrs2.petstore.tags.TagOpenAPIDefinitionResource; import io.swagger.v3.jaxrs2.petstore.tags.TagOperationResource; +import io.swagger.v3.oas.integration.SwaggerConfiguration; import io.swagger.v3.oas.models.OpenAPI; import org.testng.annotations.Test; @@ -249,6 +255,25 @@ private static List findClasses(final File directory, final String packag return classes; } + @Test(description = "Test an empty resource class (Without operations or annotations)") + public void testEmptyPet31Resource() { + Reader reader = new Reader(new SwaggerConfiguration() + .openAPI(new OpenAPI()) + .openAPI31(true)); + OpenAPI openAPI = reader.read(Object.class); + SerializationMatchers.assertEqualsToYaml31(openAPI, "openapi: 3.1.0"); + } + + @Test(description = "Test a resource with Links and Content)") + public void testLinksAndContent31Resource() { + compare(LinksAndContent31Resource.class, LINKS_SOURCE, true); + } + + @Test(description = "Test OpenAPIDefinition resource)") + public void testOpenAPI31DefinitionResource() { + compare(OpenAPI31DefinitionResource.class, PETSTORE_SOURCE, true); + } + /** * Compare a class that were read and parsed to a yaml against a yaml file. * @@ -256,9 +281,17 @@ private static List findClasses(final File directory, final String packag * @param source where is the yaml. */ private void compare(final Class clazz, final String source) { + compare(clazz, source, false); + } + + private void compare(final Class clazz, final String source, boolean openapi31) { final String file = source + clazz.getSimpleName() + YAML_EXTENSION; try { - compareAsYaml(clazz, getOpenAPIAsString(file)); + if (openapi31) { + compareAsYamlOAS31(clazz, getOpenAPIAsString(file)); + } else { + compareAsYaml(clazz, getOpenAPIAsString(file)); + } } catch (IOException e) { e.printStackTrace(); fail(); diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/annotations/AbstractAnnotationTest.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/annotations/AbstractAnnotationTest.java index c1f9e7e289..8048810680 100644 --- a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/annotations/AbstractAnnotationTest.java +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/annotations/AbstractAnnotationTest.java @@ -5,6 +5,7 @@ import io.swagger.v3.core.util.Yaml; import io.swagger.v3.jaxrs2.Reader; import io.swagger.v3.jaxrs2.matchers.SerializationMatchers; +import io.swagger.v3.oas.integration.SwaggerConfiguration; import io.swagger.v3.oas.models.OpenAPI; import org.apache.commons.io.IOUtils; @@ -64,4 +65,12 @@ protected String getOpenAPIAsString(final String file) throws IOException { IOUtils.closeQuietly(in); } } + + public void compareAsYamlOAS31(final Class cls, final String yaml) throws IOException { + Reader reader = new Reader(new SwaggerConfiguration() + .openAPI(new OpenAPI()) + .openAPI31(true)); + OpenAPI openAPI = reader.read(cls); + SerializationMatchers.assertEqualsToYaml31(openAPI, yaml); + } } diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/matchers/SerializationMatchers.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/matchers/SerializationMatchers.java index eebc0673dc..d66f3a0706 100644 --- a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/matchers/SerializationMatchers.java +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/matchers/SerializationMatchers.java @@ -6,7 +6,9 @@ import com.fasterxml.jackson.databind.node.ObjectNode; import io.swagger.v3.core.util.Json; +import io.swagger.v3.core.util.Json31; import io.swagger.v3.core.util.Yaml; +import io.swagger.v3.core.util.Yaml31; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; @@ -29,6 +31,14 @@ public static void assertEqualsToJson(Object objectToSerialize, String jsonStr) apply(objectToSerialize, jsonStr, Json.mapper(), false); } + public static void assertEqualsToYaml31(Object objectToSerialize, String yamlStr) { + apply31(objectToSerialize, yamlStr, Yaml31.mapper()); + } + + public static void assertEqualsToJson31(Object objectToSerialize, String jsonStr) { + apply31(objectToSerialize, jsonStr, Json31.mapper()); + } + private static void apply(Object objectToSerialize, String str, ObjectMapper mapper, boolean exactMatch) { final ObjectNode lhs = mapper.convertValue(objectToSerialize, ObjectNode.class); ObjectNode rhs = null; @@ -43,6 +53,19 @@ private static void apply(Object objectToSerialize, String str, ObjectMapper map } } + private static void apply31(Object objectToSerialize, String str, ObjectMapper mapper) { + final ObjectNode lhs = mapper.convertValue(objectToSerialize, ObjectNode.class); + ObjectNode rhs = null; + try { + rhs = mapper.readValue(str, ObjectNode.class); + } catch (IOException e) { + LOGGER.error("Failed to read value", e); + } + if (!lhs.equals(new ObjectNodeComparator(), rhs)) { + assertEquals(Yaml31.pretty(lhs), Yaml31.pretty(rhs)); + } + } + static final class ObjectNodeComparator implements Comparator { @Override public int compare(JsonNode o1, JsonNode o2) { diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore/link/LinksAndContent31Resource.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore/link/LinksAndContent31Resource.java new file mode 100644 index 0000000000..c091f5c76b --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore/link/LinksAndContent31Resource.java @@ -0,0 +1,76 @@ +package io.swagger.v3.jaxrs2.petstore.link; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.StringToClassMapItem; +import io.swagger.v3.oas.annotations.extensions.Extension; +import io.swagger.v3.oas.annotations.extensions.ExtensionProperty; +import io.swagger.v3.oas.annotations.links.Link; +import io.swagger.v3.oas.annotations.links.LinkParameter; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.DependentSchema; +import io.swagger.v3.oas.annotations.media.DependentSchemas; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.QueryParam; + +/** + * Class with Links + */ +public class LinksAndContent31Resource { + @Path("/links") + @Operation(operationId = "getUserWithAddress", + responses = { + @ApiResponse(description = "test description", + content = @Content( + mediaType = "*/*", + schema = @Schema( + types = { "object" } + ), + dependentSchemas = { + @DependentSchema( + name = "value", + schema = @Schema( + types = { + "string", + "number" + } + ) + ) + } + ), + links = { + @Link( + name = "address", + operationId = "getAddress", + parameters = @LinkParameter( + name = "userId", + expression = "$request.query.userId")), + @Link( + name = "user", + operationId = "getUser", + operationRef = "#/components/links/MyLink", + parameters = @LinkParameter( + name = "userId", + expression = "$request.query.userId"), + extensions = @Extension( + name = "x-one", + properties = { + @ExtensionProperty( + name = "x-sample-extension", + value = "true" + ) + } + ) + + ) + })} + ) + @GET + public String getUser(@QueryParam("userId")final String userId) { + return null; + } + +} diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore/openapidefintion/OpenAPI31DefinitionResource.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore/openapidefintion/OpenAPI31DefinitionResource.java new file mode 100644 index 0000000000..148fb983e1 --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore/openapidefintion/OpenAPI31DefinitionResource.java @@ -0,0 +1,30 @@ +package io.swagger.v3.jaxrs2.petstore.openapidefintion; + +import io.swagger.v3.oas.annotations.ExternalDocumentation; +import io.swagger.v3.oas.annotations.OpenAPIDefinition; +import io.swagger.v3.oas.annotations.info.Contact; +import io.swagger.v3.oas.annotations.info.Info; +import io.swagger.v3.oas.annotations.info.License; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import io.swagger.v3.oas.annotations.servers.Server; +import io.swagger.v3.oas.annotations.servers.ServerVariable; +import io.swagger.v3.oas.annotations.tags.Tag; + +/** + * OpenAPIDefinition Example + */ +@OpenAPIDefinition( + info = @Info( + title = "Pet Resource Example", + version = "2.0", + description = "API Definition", + summary = "API Summary", + termsOfService = "Terms of service", + license = @License(name = "Apache 2.0", url = "http://foo.bar", identifier = "Apache"), + contact = @Contact(url = "http://gigantic-server.com", name = "Fred", email = "Fred@gigagantic-server.com") + ) +) +public class OpenAPI31DefinitionResource { + public void foo() { + } +} diff --git a/modules/swagger-jaxrs2/src/test/resources/petstore/OpenAPI31DefinitionResource.yaml b/modules/swagger-jaxrs2/src/test/resources/petstore/OpenAPI31DefinitionResource.yaml new file mode 100644 index 0000000000..0c969ae9ac --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/resources/petstore/OpenAPI31DefinitionResource.yaml @@ -0,0 +1,16 @@ +openapi: 3.1.0 +info: + title: Pet Resource Example + description: API Definition + summary: API Summary + termsOfService: Terms of service + contact: + name: Fred + url: http://gigantic-server.com + email: Fred@gigagantic-server.com + license: + name: Apache 2.0 + url: http://foo.bar + identifier: Apache + version: "2.0" + diff --git a/modules/swagger-jaxrs2/src/test/resources/petstore/links/LinksAndContent31Resource.yaml b/modules/swagger-jaxrs2/src/test/resources/petstore/links/LinksAndContent31Resource.yaml new file mode 100644 index 0000000000..b513fbc412 --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/resources/petstore/links/LinksAndContent31Resource.yaml @@ -0,0 +1,33 @@ +openapi: 3.1.0 +paths: + /links: + get: + operationId: getUserWithAddress + parameters: + - name: userId + in: query + schema: + type: string + responses: + default: + description: test description + content: + '*/*': + schema: + type: object + dependentSchemas: + value: + type: + - string + - number + links: + address: + operationId: getAddress + parameters: + userId: $request.query.userId + user: + operationId: getUser + parameters: + userId: $request.query.userId + x-one: + x-sample-extension: "true" From e08b6f905afa795968b1bb47743c5a2239512ce1 Mon Sep 17 00:00:00 2001 From: Hugo Mercado Date: Sun, 22 Jan 2023 15:51:44 -0500 Subject: [PATCH 033/131] OAS 3.1 - overload annotation utils methods to work with openapi 3.1 --- .../v3/core/converter/ModelConverters.java | 10 + .../v3/core/util/AnnotationsUtils.java | 255 +++++++++++++----- 2 files changed, 202 insertions(+), 63 deletions(-) diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/converter/ModelConverters.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/converter/ModelConverters.java index 0cbb130b64..67ab75d647 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/converter/ModelConverters.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/converter/ModelConverters.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.databind.type.TypeFactory; import io.swagger.v3.core.jackson.ModelResolver; import io.swagger.v3.core.util.Json; +import io.swagger.v3.core.util.Json31; import io.swagger.v3.oas.models.media.Schema; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -31,6 +32,15 @@ public ModelConverters() { converters.add(new ModelResolver(Json.mapper())); } + public ModelConverters(boolean openapi31) { + converters = new CopyOnWriteArrayList<>(); + if (openapi31) { + converters.add(new ModelResolver(Json31.mapper()).openapi31(true)); + } else { + converters.add(new ModelResolver(Json.mapper())); + } + } + public static ModelConverters getInstance() { return SINGLETON; } diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java index 8647c25c55..3f08a28349 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java @@ -475,6 +475,9 @@ public static Optional getArraySchema(io.swagger.v3.oas.annotations return getArraySchema(arraySchema, null, jsonViewAnnotation); } public static Optional getArraySchema(io.swagger.v3.oas.annotations.media.ArraySchema arraySchema, Components components, JsonView jsonViewAnnotation) { + return getArraySchema(arraySchema, components, jsonViewAnnotation, false); + } + public static Optional getArraySchema(io.swagger.v3.oas.annotations.media.ArraySchema arraySchema, Components components, JsonView jsonViewAnnotation, boolean openapi31) { if (arraySchema == null || !hasArrayAnnotation(arraySchema)) { return Optional.empty(); } @@ -490,8 +493,8 @@ public static Optional getArraySchema(io.swagger.v3.oas.annotations arraySchemaObject.setMinItems(arraySchema.minItems()); } - getSchemaFromAnnotation(arraySchema.contains(), components, jsonViewAnnotation).ifPresent(arraySchemaObject::setContains); - getSchemaFromAnnotation(arraySchema.unevaluatedItems(), components, jsonViewAnnotation).ifPresent(arraySchemaObject::setUnevaluatedItems); + getSchemaFromAnnotation(arraySchema.contains(), components, jsonViewAnnotation, openapi31).ifPresent(arraySchemaObject::setContains); + getSchemaFromAnnotation(arraySchema.unevaluatedItems(), components, jsonViewAnnotation, openapi31).ifPresent(arraySchemaObject::setUnevaluatedItems); if (arraySchema.maxContains() > 0) { arraySchemaObject.setMaxContains(arraySchema.maxContains()); @@ -501,12 +504,12 @@ public static Optional getArraySchema(io.swagger.v3.oas.annotations } if (arraySchema.prefixItems().length > 0) { for (io.swagger.v3.oas.annotations.media.Schema prefixItem : arraySchema.prefixItems()) { - getSchemaFromAnnotation(prefixItem, components, jsonViewAnnotation).ifPresent(arraySchemaObject::addPrefixItem); + getSchemaFromAnnotation(prefixItem, components, jsonViewAnnotation, openapi31).ifPresent(arraySchemaObject::addPrefixItem); } } if (arraySchema.extensions().length > 0) { - Map extensions = AnnotationsUtils.getExtensions(arraySchema.extensions()); + Map extensions = AnnotationsUtils.getExtensions(openapi31, arraySchema.extensions()); if (extensions != null) { extensions.forEach(arraySchemaObject::addExtension); } @@ -514,7 +517,7 @@ public static Optional getArraySchema(io.swagger.v3.oas.annotations if (arraySchema.schema() != null) { if (arraySchema.schema().implementation().equals(Void.class)) { - getSchemaFromAnnotation(arraySchema.schema(), components, jsonViewAnnotation).ifPresent(arraySchemaObject::setItems); + getSchemaFromAnnotation(arraySchema.schema(), components, jsonViewAnnotation, openapi31).ifPresent(arraySchemaObject::setItems); } // if present, schema implementation handled upstream } @@ -522,9 +525,18 @@ public static Optional getArraySchema(io.swagger.v3.oas.annotations } public static Optional getSchemaFromAnnotation(io.swagger.v3.oas.annotations.media.Schema schema, JsonView jsonViewAnnotation) { - return getSchemaFromAnnotation(schema, null, jsonViewAnnotation); + return getSchemaFromAnnotation(schema, jsonViewAnnotation, false); + } + + public static Optional getSchemaFromAnnotation(io.swagger.v3.oas.annotations.media.Schema schema, JsonView jsonViewAnnotation, boolean openapi31) { + return getSchemaFromAnnotation(schema, null, jsonViewAnnotation, openapi31); } + public static Optional getSchemaFromAnnotation(io.swagger.v3.oas.annotations.media.Schema schema, Components components, JsonView jsonViewAnnotation) { + return getSchemaFromAnnotation(schema, components, jsonViewAnnotation, false); + } + + public static Optional getSchemaFromAnnotation(io.swagger.v3.oas.annotations.media.Schema schema, Components components, JsonView jsonViewAnnotation, boolean openapi31) { if (schema == null || !hasSchemaAnnotation(schema)) { return Optional.empty(); } @@ -576,23 +588,29 @@ public static Optional getSchemaFromAnnotation(io.swagger.v3.oas.annotat schemaObject.setExclusiveMinimumValue(BigDecimal.valueOf(schema.exclusiveMinimumValue())); } if (!schema.contentSchema().equals(Void.class)) { - schemaObject.setContentSchema(resolveSchemaFromType(schema.contentSchema(), components, jsonViewAnnotation)); + schemaObject.setContentSchema(resolveSchemaFromType(schema.contentSchema(), components, jsonViewAnnotation, openapi31)); } if (!schema.propertyNames().equals(Void.class)) { - schemaObject.setPropertyNames(resolveSchemaFromType(schema.propertyNames(), components, jsonViewAnnotation)); + schemaObject.setPropertyNames(resolveSchemaFromType(schema.propertyNames(), components, jsonViewAnnotation, openapi31)); } if (!schema._if().equals(Void.class)) { - schemaObject.setIf(resolveSchemaFromType(schema._if(), components, jsonViewAnnotation)); + schemaObject.setIf(resolveSchemaFromType(schema._if(), components, jsonViewAnnotation, openapi31)); } if (!schema._else().equals(Void.class)) { - schemaObject.setElse(resolveSchemaFromType(schema._else(), components, jsonViewAnnotation)); + schemaObject.setElse(resolveSchemaFromType(schema._else(), components, jsonViewAnnotation, openapi31)); } if (!schema.then().equals(Void.class)) { - schemaObject.setThen(resolveSchemaFromType(schema.then(), components, jsonViewAnnotation)); + schemaObject.setThen(resolveSchemaFromType(schema.then(), components, jsonViewAnnotation, openapi31)); } if (StringUtils.isNotBlank(schema._const())) { try { - schemaObject.setConst(Json.mapper().readTree(schema._const())); + Object _const; + if (openapi31) { + _const = Json31.mapper().readTree(schema._const()); + } else { + _const = Json.mapper().readTree(schema._const()); + } + schemaObject.setConst(_const); } catch (IOException e) { schemaObject.setConst(schema._const()); } @@ -610,26 +628,26 @@ public static Optional getSchemaFromAnnotation(io.swagger.v3.oas.annotat if (schema.dependentSchemas().length > 0) { final Map dependentSchema = new LinkedHashMap<>(); for (StringToClassMapItem mapItem : schema.dependentSchemas()) { - dependentSchema.put(mapItem.key(), resolveSchemaFromType(mapItem.value(), components, jsonViewAnnotation)); + dependentSchema.put(mapItem.key(), resolveSchemaFromType(mapItem.value(), components, jsonViewAnnotation, openapi31)); } schemaObject.setDependentSchemas(dependentSchema); } if (schema.patternProperties().length > 0) { final Map patternProperties = new LinkedHashMap<>(); for (StringToClassMapItem mapItem : schema.patternProperties()) { - patternProperties.put(mapItem.key(), resolveSchemaFromType(mapItem.value(), components, jsonViewAnnotation)); + patternProperties.put(mapItem.key(), resolveSchemaFromType(mapItem.value(), components, jsonViewAnnotation, openapi31)); } schemaObject.setPatternProperties(patternProperties); } if (schema.properties().length > 0) { final Map properties = new LinkedHashMap<>(); for (StringToClassMapItem mapItem : schema.properties()) { - properties.put(mapItem.key(), resolveSchemaFromType(mapItem.value(), components, jsonViewAnnotation)); + properties.put(mapItem.key(), resolveSchemaFromType(mapItem.value(), components, jsonViewAnnotation, openapi31)); } schemaObject.setProperties(properties); } if (!schema.unevaluatedProperties().equals(Void.class)) { - schemaObject.setUnevaluatedProperties(resolveSchemaFromType(schema.unevaluatedProperties(), components, jsonViewAnnotation)); + schemaObject.setUnevaluatedProperties(resolveSchemaFromType(schema.unevaluatedProperties(), components, jsonViewAnnotation, openapi31)); } if (schema.examples().length > 0) { schemaObject.setExamples(Arrays.asList(schema.examples())); @@ -640,7 +658,11 @@ public static Optional getSchemaFromAnnotation(io.swagger.v3.oas.annotat } if (StringUtils.isNotBlank(schema.example())) { try { - schemaObject.setExample(Json.mapper().readTree(schema.example())); + if (openapi31) { + schemaObject.setExample(Json31.mapper().readTree(schema.example())); + } else { + schemaObject.setExample(Json.mapper().readTree(schema.example())); + } } catch (IOException e) { schemaObject.setExample(schema.example()); } @@ -720,31 +742,31 @@ public static Optional getSchemaFromAnnotation(io.swagger.v3.oas.annotat } } - getExternalDocumentation(schema.externalDocs()).ifPresent(schemaObject::setExternalDocs); + getExternalDocumentation(schema.externalDocs(), openapi31).ifPresent(schemaObject::setExternalDocs); if (!schema.not().equals(Void.class)) { Class schemaImplementation = schema.not(); - Schema notSchemaObject = resolveSchemaFromType(schemaImplementation, components, jsonViewAnnotation); + Schema notSchemaObject = resolveSchemaFromType(schemaImplementation, components, jsonViewAnnotation, openapi31); schemaObject.setNot(notSchemaObject); } if (schema.oneOf().length > 0) { Class[] schemaImplementations = schema.oneOf(); for (Class schemaImplementation : schemaImplementations) { - Schema oneOfSchemaObject = resolveSchemaFromType(schemaImplementation, components, jsonViewAnnotation); + Schema oneOfSchemaObject = resolveSchemaFromType(schemaImplementation, components, jsonViewAnnotation, openapi31); ((ComposedSchema) schemaObject).addOneOfItem(oneOfSchemaObject); } } if (schema.anyOf().length > 0) { Class[] schemaImplementations = schema.anyOf(); for (Class schemaImplementation : schemaImplementations) { - Schema anyOfSchemaObject = resolveSchemaFromType(schemaImplementation, components, jsonViewAnnotation); + Schema anyOfSchemaObject = resolveSchemaFromType(schemaImplementation, components, jsonViewAnnotation, openapi31); ((ComposedSchema) schemaObject).addAnyOfItem(anyOfSchemaObject); } } if (schema.allOf().length > 0) { Class[] schemaImplementations = schema.allOf(); for (Class schemaImplementation : schemaImplementations) { - Schema allOfSchemaObject = resolveSchemaFromType(schemaImplementation, components, jsonViewAnnotation); + Schema allOfSchemaObject = resolveSchemaFromType(schemaImplementation, components, jsonViewAnnotation, openapi31); ((ComposedSchema) schemaObject).addAllOfItem(allOfSchemaObject); } } @@ -754,7 +776,7 @@ public static Optional getSchemaFromAnnotation(io.swagger.v3.oas.annotat schemaObject.additionalProperties(false); } else { if (!schema.additionalPropertiesSchema().equals(Void.class)) { - schemaObject.additionalProperties(resolveSchemaFromType(schema.additionalPropertiesSchema(), components, jsonViewAnnotation)); + schemaObject.additionalProperties(resolveSchemaFromType(schema.additionalPropertiesSchema(), components, jsonViewAnnotation, openapi31)); } } @@ -762,13 +784,22 @@ public static Optional getSchemaFromAnnotation(io.swagger.v3.oas.annotat } public static Schema resolveSchemaFromType(Class schemaImplementation, Components components, JsonView jsonViewAnnotation) { + return resolveSchemaFromType(schemaImplementation, components, jsonViewAnnotation, false); + } + + public static Schema resolveSchemaFromType(Class schemaImplementation, Components components, JsonView jsonViewAnnotation, boolean openapi31) { Schema schemaObject; PrimitiveType primitiveType = PrimitiveType.fromType(schemaImplementation); if (primitiveType != null) { schemaObject = primitiveType.createProperty(); } else { schemaObject = new Schema(); - ResolvedSchema resolvedSchema = ModelConverters.getInstance().readAllAsResolvedSchema(new AnnotatedType().type(schemaImplementation).jsonViewAnnotation(jsonViewAnnotation)); + ResolvedSchema resolvedSchema; + if (openapi31) { + resolvedSchema = new ModelConverters(true).readAllAsResolvedSchema(new AnnotatedType().type(schemaImplementation).jsonViewAnnotation(jsonViewAnnotation)); + } else { + resolvedSchema = ModelConverters.getInstance().readAllAsResolvedSchema(new AnnotatedType().type(schemaImplementation).jsonViewAnnotation(jsonViewAnnotation)); + } Map schemaMap; if (resolvedSchema != null) { schemaMap = resolvedSchema.referencedSchemas; @@ -898,6 +929,10 @@ public static Optional getServer(io.swagger.v3.oas.annotations.servers.S } public static Optional getExternalDocumentation(io.swagger.v3.oas.annotations.ExternalDocumentation externalDocumentation) { + return getExternalDocumentation(externalDocumentation, false); + } + + public static Optional getExternalDocumentation(io.swagger.v3.oas.annotations.ExternalDocumentation externalDocumentation, boolean openapi31) { if (externalDocumentation == null) { return Optional.empty(); } @@ -912,9 +947,13 @@ public static Optional getExternalDocumentation(io.swagge external.setUrl(externalDocumentation.url()); } if (externalDocumentation.extensions() != null && externalDocumentation.extensions().length > 0) { - Map extensions = AnnotationsUtils.getExtensions(externalDocumentation.extensions()); + Map extensions = AnnotationsUtils.getExtensions(openapi31, externalDocumentation.extensions()); if (extensions != null) { - extensions.forEach(external::addExtension); + if (openapi31) { + extensions.forEach(external::addExtension31); + } else { + extensions.forEach(external::addExtension); + } isEmpty = false; } } @@ -926,6 +965,10 @@ public static Optional getExternalDocumentation(io.swagge } public static Optional getInfo(io.swagger.v3.oas.annotations.info.Info info) { + return getInfo(info, false); + } + + public static Optional getInfo(io.swagger.v3.oas.annotations.info.Info info, boolean openapi31) { if (info == null) { return Optional.empty(); } @@ -952,9 +995,13 @@ public static Optional getInfo(io.swagger.v3.oas.annotations.info.Info inf isEmpty = false; } if (info.extensions() != null && info.extensions().length > 0) { - Map extensions = AnnotationsUtils.getExtensions(info.extensions()); + Map extensions = AnnotationsUtils.getExtensions(openapi31, info.extensions()); if (extensions != null) { - extensions.forEach(infoObject::addExtension); + if (openapi31) { + extensions.forEach(infoObject::addExtension31); + } else { + extensions.forEach(infoObject::addExtension); + } isEmpty = false; } } @@ -968,6 +1015,10 @@ public static Optional getInfo(io.swagger.v3.oas.annotations.info.Info inf } public static Optional getContact(io.swagger.v3.oas.annotations.info.Contact contact) { + return getContact(contact, false); + } + + public static Optional getContact(io.swagger.v3.oas.annotations.info.Contact contact, boolean openapi31) { if (contact == null) { return Optional.empty(); } @@ -986,9 +1037,13 @@ public static Optional getContact(io.swagger.v3.oas.annotations.info.Co isEmpty = false; } if (contact.extensions() != null && contact.extensions().length > 0) { - Map extensions = AnnotationsUtils.getExtensions(contact.extensions()); + Map extensions = AnnotationsUtils.getExtensions(openapi31, contact.extensions()); if (extensions != null) { - extensions.forEach(contactObject::addExtension); + if(openapi31) { + extensions.forEach(contactObject::addExtension31); + } else { + extensions.forEach(contactObject::addExtension); + } isEmpty = false; } } @@ -1000,6 +1055,10 @@ public static Optional getContact(io.swagger.v3.oas.annotations.info.Co } public static Optional getLicense(io.swagger.v3.oas.annotations.info.License license) { + return getLicense(license, false); + } + + public static Optional getLicense(io.swagger.v3.oas.annotations.info.License license, boolean openapi31) { if (license == null) { return Optional.empty(); } @@ -1018,9 +1077,13 @@ public static Optional getLicense(io.swagger.v3.oas.annotations.info.Li isEmpty = false; } if (license.extensions() != null && license.extensions().length > 0) { - Map extensions = AnnotationsUtils.getExtensions(license.extensions()); + Map extensions = AnnotationsUtils.getExtensions(openapi31, license.extensions()); if (extensions != null) { - extensions.forEach(licenseObject::addExtension); + if (openapi31) { + extensions.forEach(licenseObject::addExtension31); + } else { + extensions.forEach(licenseObject::addExtension); + } isEmpty = false; } } @@ -1031,17 +1094,25 @@ public static Optional getLicense(io.swagger.v3.oas.annotations.info.Li } public static Map getLinks(io.swagger.v3.oas.annotations.links.Link[] links) { + return getLinks(links, false); + } + + public static Map getLinks(io.swagger.v3.oas.annotations.links.Link[] links, boolean openapi31) { Map linkMap = new HashMap<>(); if (links == null) { return linkMap; } for (io.swagger.v3.oas.annotations.links.Link link : links) { - getLink(link).ifPresent(linkResult -> linkMap.put(link.name(), linkResult)); + getLink(link, openapi31).ifPresent(linkResult -> linkMap.put(link.name(), linkResult)); } return linkMap; } public static Optional getLink(io.swagger.v3.oas.annotations.links.Link link) { + return getLink(link, false); + } + + public static Optional getLink(io.swagger.v3.oas.annotations.links.Link link, boolean openapi31) { if (link == null) { return Optional.empty(); } @@ -1068,9 +1139,13 @@ public static Optional getLink(io.swagger.v3.oas.annotations.links.Link li isEmpty = false; } if (link.extensions() != null && link.extensions().length > 0) { - Map extensions = AnnotationsUtils.getExtensions(link.extensions()); + Map extensions = AnnotationsUtils.getExtensions(openapi31, link.extensions()); if (extensions != null) { - extensions.forEach(linkObject::addExtension); + if (openapi31) { + extensions.forEach(linkObject::addExtension31); + } else { + extensions.forEach(linkObject::addExtension); + } isEmpty = false; } } @@ -1085,7 +1160,11 @@ public static Optional getLink(io.swagger.v3.oas.annotations.links.Link li if (StringUtils.isNotBlank(link.requestBody())) { JsonNode processedValue = null; try { - processedValue = Json.mapper().readTree(link.requestBody()); + if (openapi31) { + processedValue = Json31.mapper().readTree(link.requestBody()); + } else { + processedValue = Json.mapper().readTree(link.requestBody()); + } } catch (Exception e) { // not a json string } @@ -1098,8 +1177,7 @@ public static Optional getLink(io.swagger.v3.oas.annotations.links.Link li return Optional.of(linkObject); } - public static Map getLinkParameters(LinkParameter[] - linkParameter) { + public static Map getLinkParameters(LinkParameter[] linkParameter) { Map linkParametersMap = new HashMap<>(); if (linkParameter == null) { return linkParametersMap; @@ -1114,6 +1192,10 @@ public static Map getLinkParameters(LinkParameter[] } public static Optional> getHeaders(io.swagger.v3.oas.annotations.headers.Header[] annotationHeaders, JsonView jsonViewAnnotation) { + return getHeaders(annotationHeaders, jsonViewAnnotation, false); + } + + public static Optional> getHeaders(io.swagger.v3.oas.annotations.headers.Header[] annotationHeaders, JsonView jsonViewAnnotation, boolean openapi31) { if (annotationHeaders == null) { return Optional.empty(); } @@ -1130,6 +1212,10 @@ public static Optional> getHeaders(io.swagger.v3.oas.annotat } public static Optional
getHeader(io.swagger.v3.oas.annotations.headers.Header header, JsonView jsonViewAnnotation) { + return getHeader(header, jsonViewAnnotation, false); + } + + public static Optional
getHeader(io.swagger.v3.oas.annotations.headers.Header header, JsonView jsonViewAnnotation, boolean openapi31) { if (header == null) { return Optional.empty(); @@ -1156,7 +1242,7 @@ public static Optional
getHeader(io.swagger.v3.oas.annotations.headers.H if (header.schema() != null) { if (header.schema().implementation().equals(Void.class)) { - AnnotationsUtils.getSchemaFromAnnotation(header.schema(), jsonViewAnnotation).ifPresent( + AnnotationsUtils.getSchemaFromAnnotation(header.schema(), jsonViewAnnotation, openapi31).ifPresent( headerObject::setSchema); } } @@ -1169,6 +1255,10 @@ public static Optional
getHeader(io.swagger.v3.oas.annotations.headers.H } public static void addEncodingToMediaType(MediaType mediaType, io.swagger.v3.oas.annotations.media.Encoding encoding, JsonView jsonViewAnnotation) { + addEncodingToMediaType(mediaType, encoding, jsonViewAnnotation, false); + } + + public static void addEncodingToMediaType(MediaType mediaType, io.swagger.v3.oas.annotations.media.Encoding encoding, JsonView jsonViewAnnotation, boolean openapi31) { if (encoding == null) { return; } @@ -1190,12 +1280,16 @@ public static void addEncodingToMediaType(MediaType mediaType, io.swagger.v3.oas } if (encoding.headers() != null) { - getHeaders(encoding.headers(), jsonViewAnnotation).ifPresent(encodingObject::headers); + getHeaders(encoding.headers(), jsonViewAnnotation, openapi31).ifPresent(encodingObject::headers); } if (encoding.extensions() != null && encoding.extensions().length > 0) { - Map extensions = AnnotationsUtils.getExtensions(encoding.extensions()); + Map extensions = AnnotationsUtils.getExtensions(openapi31, encoding.extensions()); if (extensions != null) { - extensions.forEach(encodingObject::addExtension); + if (openapi31) { + extensions.forEach(encodingObject::addExtension31); + } else { + extensions.forEach(encodingObject::addExtension); + } } } @@ -1255,6 +1349,10 @@ public static Type getSchemaType(io.swagger.v3.oas.annotations.media.Schema sche } public static Optional getContent(io.swagger.v3.oas.annotations.media.Content[] annotationContents, String[] classTypes, String[] methodTypes, Schema schema, Components components, JsonView jsonViewAnnotation) { + return getContent(annotationContents, classTypes, methodTypes, schema, components, jsonViewAnnotation, false); + } + + public static Optional getContent(io.swagger.v3.oas.annotations.media.Content[] annotationContents, String[] classTypes, String[] methodTypes, Schema schema, Components components, JsonView jsonViewAnnotation, boolean openapi31) { if (annotationContents == null || annotationContents.length == 0) { return Optional.empty(); } @@ -1265,7 +1363,7 @@ public static Optional getContent(io.swagger.v3.oas.annotations.media.C for (io.swagger.v3.oas.annotations.media.Content annotationContent : annotationContents) { MediaType mediaType = new MediaType(); if (components != null) { - getSchema(annotationContent, components, jsonViewAnnotation).ifPresent(mediaType::setSchema); + getSchema(annotationContent, components, jsonViewAnnotation, openapi31).ifPresent(mediaType::setSchema); if (annotationContent.schemaProperties().length > 0) { if (mediaType.getSchema() == null) { mediaType.schema(new Schema().type("object")); @@ -1280,7 +1378,7 @@ public static Optional getContent(io.swagger.v3.oas.annotations.media.C isArray = true; } } - getSchema(sp.schema(), sp.array(), isArray, schemaImplementation, components, jsonViewAnnotation) + getSchema(sp.schema(), sp.array(), isArray, schemaImplementation, components, jsonViewAnnotation, openapi31) .ifPresent(s -> { if ("array".equals(oSchema.getType())) { oSchema.getItems().addProperty(sp.name(), s); @@ -1296,7 +1394,7 @@ public static Optional getContent(io.swagger.v3.oas.annotations.media.C mediaType.getSchema() != null && !Boolean.TRUE.equals(mediaType.getSchema().getAdditionalProperties()) && !Boolean.FALSE.equals(mediaType.getSchema().getAdditionalProperties())) { - getSchemaFromAnnotation(annotationContent.additionalPropertiesSchema(), components, jsonViewAnnotation) + getSchemaFromAnnotation(annotationContent.additionalPropertiesSchema(), components, jsonViewAnnotation, openapi31) .ifPresent(s -> { if ("array".equals(mediaType.getSchema().getType())) { mediaType.getSchema().getItems().additionalProperties(s); @@ -1319,15 +1417,19 @@ public static Optional getContent(io.swagger.v3.oas.annotations.media.C } } if (annotationContent.extensions() != null && annotationContent.extensions().length > 0) { - Map extensions = AnnotationsUtils.getExtensions(annotationContent.extensions()); + Map extensions = AnnotationsUtils.getExtensions(openapi31, annotationContent.extensions()); if (extensions != null) { - extensions.forEach(mediaType::addExtension); + if (openapi31) { + extensions.forEach(mediaType::addExtension31); + } else { + extensions.forEach(mediaType::addExtension); + } } } io.swagger.v3.oas.annotations.media.Encoding[] encodings = annotationContent.encoding(); for (io.swagger.v3.oas.annotations.media.Encoding encoding : encodings) { - addEncodingToMediaType(mediaType, encoding, jsonViewAnnotation); + addEncodingToMediaType(mediaType, encoding, jsonViewAnnotation, openapi31); } if (StringUtils.isNotBlank(annotationContent.mediaType())) { content.addMediaType(annotationContent.mediaType(), mediaType); @@ -1340,20 +1442,20 @@ public static Optional getContent(io.swagger.v3.oas.annotations.media.C final Map dependentSchemaMap = new LinkedHashMap<>(); for (DependentSchema dependentSchema : dependentSchemas) { if ("array".equals(mediaType.getSchema().getType())) { - getArraySchema(dependentSchema.array(), components, jsonViewAnnotation).ifPresent(arraySchema -> dependentSchemaMap.put(dependentSchema.name(), arraySchema)); + getArraySchema(dependentSchema.array(), components, jsonViewAnnotation, openapi31).ifPresent(arraySchema -> dependentSchemaMap.put(dependentSchema.name(), arraySchema)); } else { - getSchemaFromAnnotation(dependentSchema.schema(), components, jsonViewAnnotation).ifPresent(schema1 -> dependentSchemaMap.put(dependentSchema.name(), schema1)); + getSchemaFromAnnotation(dependentSchema.schema(), components, jsonViewAnnotation, openapi31).ifPresent(schema1 -> dependentSchemaMap.put(dependentSchema.name(), schema1)); } } mediaType.getSchema().setDependentSchemas(dependentSchemaMap); } if (mediaType.getSchema() != null) { - getSchemaFromAnnotation(annotationContent.contentSchema(), components, jsonViewAnnotation).ifPresent(mediaType.getSchema()::setContentSchema); - getSchemaFromAnnotation(annotationContent.propertyNames(), components, jsonViewAnnotation).ifPresent(mediaType.getSchema()::setPropertyNames); - getSchemaFromAnnotation(annotationContent._if(), components, jsonViewAnnotation).ifPresent(mediaType.getSchema()::setIf); - getSchemaFromAnnotation(annotationContent._then(), components, jsonViewAnnotation).ifPresent(mediaType.getSchema()::setThen); - getSchemaFromAnnotation(annotationContent._else(), components, jsonViewAnnotation).ifPresent(mediaType.getSchema()::setElse); - getSchemaFromAnnotation(annotationContent.not(), components, jsonViewAnnotation).ifPresent(mediaType.getSchema()::setNot); + getSchemaFromAnnotation(annotationContent.contentSchema(), components, jsonViewAnnotation, openapi31).ifPresent(mediaType.getSchema()::setContentSchema); + getSchemaFromAnnotation(annotationContent.propertyNames(), components, jsonViewAnnotation, openapi31).ifPresent(mediaType.getSchema()::setPropertyNames); + getSchemaFromAnnotation(annotationContent._if(), components, jsonViewAnnotation, openapi31).ifPresent(mediaType.getSchema()::setIf); + getSchemaFromAnnotation(annotationContent._then(), components, jsonViewAnnotation, openapi31).ifPresent(mediaType.getSchema()::setThen); + getSchemaFromAnnotation(annotationContent._else(), components, jsonViewAnnotation, openapi31).ifPresent(mediaType.getSchema()::setElse); + getSchemaFromAnnotation(annotationContent.not(), components, jsonViewAnnotation, openapi31).ifPresent(mediaType.getSchema()::setNot); } if (annotationContent.oneOf().length > 0) { for (io.swagger.v3.oas.annotations.media.Schema oneOfSchema : annotationContent.oneOf()) { @@ -1379,6 +1481,10 @@ public static Optional getContent(io.swagger.v3.oas.annotations.media.C } public static Optional getSchema(io.swagger.v3.oas.annotations.media.Content annotationContent, Components components, JsonView jsonViewAnnotation) { + return getSchema(annotationContent, components, jsonViewAnnotation, false); + } + + public static Optional getSchema(io.swagger.v3.oas.annotations.media.Content annotationContent, Components components, JsonView jsonViewAnnotation, boolean openapi31) { Class schemaImplementation = annotationContent.schema().implementation(); boolean isArray = false; if (schemaImplementation == Void.class) { @@ -1387,7 +1493,7 @@ public static Optional getSchema(io.swagger.v3.oas.annotations isArray = true; } } - return getSchema(annotationContent.schema(), annotationContent.array(), isArray, schemaImplementation, components, jsonViewAnnotation); + return getSchema(annotationContent.schema(), annotationContent.array(), isArray, schemaImplementation, components, jsonViewAnnotation, openapi31); } public static Optional getSchema(io.swagger.v3.oas.annotations.media.Schema schemaAnnotation, @@ -1396,13 +1502,24 @@ public static Optional getSchema(io.swagger.v3.oas.annotations Class schemaImplementation, Components components, JsonView jsonViewAnnotation) { + return getSchema(schemaAnnotation, arrayAnnotation, isArray, schemaImplementation, components, jsonViewAnnotation, false); + + } + + public static Optional getSchema(io.swagger.v3.oas.annotations.media.Schema schemaAnnotation, + io.swagger.v3.oas.annotations.media.ArraySchema arrayAnnotation, + boolean isArray, + Class schemaImplementation, + Components components, + JsonView jsonViewAnnotation, + boolean openapi31) { if (schemaImplementation != Void.class) { - Schema schemaObject = resolveSchemaFromType(schemaImplementation, components, jsonViewAnnotation); + Schema schemaObject = resolveSchemaFromType(schemaImplementation, components, jsonViewAnnotation, openapi31); if (StringUtils.isNotBlank(schemaAnnotation.format())) { schemaObject.setFormat(schemaAnnotation.format()); } if (isArray) { - Optional arraySchema = AnnotationsUtils.getArraySchema(arrayAnnotation, components, jsonViewAnnotation); + Optional arraySchema = AnnotationsUtils.getArraySchema(arrayAnnotation, components, jsonViewAnnotation, openapi31); if (arraySchema.isPresent()) { arraySchema.get().setItems(schemaObject); return arraySchema; @@ -1414,7 +1531,7 @@ public static Optional getSchema(io.swagger.v3.oas.annotations } } else { - Optional schemaFromAnnotation = AnnotationsUtils.getSchemaFromAnnotation(schemaAnnotation, components, jsonViewAnnotation); + Optional schemaFromAnnotation = AnnotationsUtils.getSchemaFromAnnotation(schemaAnnotation, components, jsonViewAnnotation, openapi31); if (schemaFromAnnotation.isPresent()) { if (StringUtils.isBlank(schemaFromAnnotation.get().get$ref()) && StringUtils.isBlank(schemaFromAnnotation.get().getType()) && !(schemaFromAnnotation.get() instanceof ComposedSchema)) { // default to string @@ -1422,7 +1539,7 @@ public static Optional getSchema(io.swagger.v3.oas.annotations } return Optional.of(schemaFromAnnotation.get()); } else { - Optional arraySchemaFromAnnotation = AnnotationsUtils.getArraySchema(arrayAnnotation, components, jsonViewAnnotation); + Optional arraySchemaFromAnnotation = AnnotationsUtils.getArraySchema(arrayAnnotation, components, jsonViewAnnotation, openapi31); if (arraySchemaFromAnnotation.isPresent()) { if (arraySchemaFromAnnotation.get().getItems() != null && StringUtils.isBlank(arraySchemaFromAnnotation.get().getItems().get$ref()) && StringUtils.isBlank(arraySchemaFromAnnotation.get().getItems().getType())) { // default to string @@ -1504,6 +1621,10 @@ public static io.swagger.v3.oas.annotations.media.Schema getSchemaDeclaredAnnota } public static Map getExtensions(Extension... extensions) { + return getExtensions(false, extensions); + } + + public static Map getExtensions(boolean openapi31, Extension... extensions) { final Map map = new HashMap<>(); for (Extension extension : extensions) { final String name = extension.name(); @@ -1518,7 +1639,11 @@ public static Map getExtensions(Extension... extensions) { if (key.isEmpty()) { if (propertyAsJson) { try { - processedValue = Json.mapper().readTree(propertyValue); + if (openapi31) { + processedValue = Json31.mapper().readTree(propertyValue); + } else { + processedValue = Json.mapper().readTree(propertyValue); + } map.put(StringUtils.prependIfMissing(propertyName, "x-"), processedValue); } catch (Exception e) { map.put(StringUtils.prependIfMissing(propertyName, "x-"), propertyValue); @@ -1535,7 +1660,11 @@ public static Map getExtensions(Extension... extensions) { @SuppressWarnings("unchecked") final Map mapValue = (Map) value; if (propertyAsJson) { try { - processedValue = Json.mapper().readTree(propertyValue); + if (openapi31) { + processedValue = Json31.mapper().readTree(propertyValue); + } else { + processedValue = Json.mapper().readTree(propertyValue); + } mapValue.put(propertyName, processedValue); } catch (Exception e) { mapValue.put(propertyName, propertyValue); From 8ab75e889d0051a21b807d5de5748547d8408af0 Mon Sep 17 00:00:00 2001 From: Hugo Mercado Date: Sun, 22 Jan 2023 15:54:06 -0500 Subject: [PATCH 034/131] OAS 3.1 - updated parameter processor class to work with openapi 3.1 --- .../v3/core/util/ParameterProcessor.java | 15 +- .../v3/jaxrs2/DefaultParameterExtension.java | 2 +- .../io/swagger/v3/jaxrs2/OperationParser.java | 11 +- .../java/io/swagger/v3/jaxrs2/Reader.java | 2 + .../jaxrs2/ext/AbstractOpenAPIExtension.java | 7 + .../v3/jaxrs2/ext/OpenAPIExtension.java | 4 + .../parameter/Parameters31Resource.java | 128 ++++++++++++++++++ 7 files changed, 164 insertions(+), 5 deletions(-) create mode 100644 modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore/parameter/Parameters31Resource.java diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/ParameterProcessor.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/ParameterProcessor.java index 43e722bc86..9aa07ce9d8 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/ParameterProcessor.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/ParameterProcessor.java @@ -29,6 +29,10 @@ public class ParameterProcessor { static Logger LOGGER = LoggerFactory.getLogger(ParameterProcessor.class); + public static Parameter applyAnnotations(Parameter parameter, Type type, List annotations, Components components, String[] classTypes, String[] methodTypes, JsonView jsonViewAnnotation) { + return applyAnnotations(parameter, type, annotations, components, classTypes, methodTypes, jsonViewAnnotation, false); + } + public static Parameter applyAnnotations( Parameter parameter, Type type, @@ -36,7 +40,8 @@ public static Parameter applyAnnotations( Components components, String[] classTypes, String[] methodTypes, - JsonView jsonViewAnnotation) { + JsonView jsonViewAnnotation, + boolean openapi31) { final AnnotationsHelper helper = new AnnotationsHelper(annotations, type); if (helper.isContext()) { @@ -60,7 +65,13 @@ public static Parameter applyAnnotations( .skipOverride(true) .jsonViewAnnotation(jsonViewAnnotation) .ctxAnnotations(reworkedAnnotations.toArray(new Annotation[reworkedAnnotations.size()])); - ResolvedSchema resolvedSchema = ModelConverters.getInstance().resolveAsResolvedSchema(annotatedType); + + final ResolvedSchema resolvedSchema; + if (openapi31) { + resolvedSchema = new ModelConverters(true).readAllAsResolvedSchema(annotatedType); + } else { + resolvedSchema = ModelConverters.getInstance().resolveAsResolvedSchema(annotatedType); + } if (resolvedSchema.schema != null) { parameter.setSchema(resolvedSchema.schema); diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/DefaultParameterExtension.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/DefaultParameterExtension.java index f6493581c8..e4f8b6795e 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/DefaultParameterExtension.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/DefaultParameterExtension.java @@ -120,7 +120,7 @@ public ResolvedParameter extractParameters(List annotations, annotations, components, classConsumes == null ? new String[0] : classConsumes.value(), - methodConsumes == null ? new String[0] : methodConsumes.value(), jsonViewAnnotation); + methodConsumes == null ? new String[0] : methodConsumes.value(), jsonViewAnnotation, openapi31); if (unknownParameter != null) { if (StringUtils.isNotBlank(unknownParameter.getIn()) && !"form".equals(unknownParameter.getIn())) { extractParametersResult.parameters.add(unknownParameter); diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/OperationParser.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/OperationParser.java index 303240609e..6ac39cea69 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/OperationParser.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/OperationParser.java @@ -19,6 +19,9 @@ public class OperationParser { public static final String COMPONENTS_REF = Components.COMPONENTS_SCHEMAS_REF; public static Optional getRequestBody(io.swagger.v3.oas.annotations.parameters.RequestBody requestBody, Consumes classConsumes, Consumes methodConsumes, Components components, JsonView jsonViewAnnotation) { + return getRequestBody(requestBody, classConsumes, methodConsumes, components, jsonViewAnnotation, false); + } + public static Optional getRequestBody(io.swagger.v3.oas.annotations.parameters.RequestBody requestBody, Consumes classConsumes, Consumes methodConsumes, Components components, JsonView jsonViewAnnotation, boolean openapi31) { if (requestBody == null) { return Optional.empty(); } @@ -54,11 +57,15 @@ public static Optional getRequestBody(io.swagger.v3.oas.annotations return Optional.empty(); } AnnotationsUtils.getContent(requestBody.content(), classConsumes == null ? new String[0] : classConsumes.value(), - methodConsumes == null ? new String[0] : methodConsumes.value(), null, components, jsonViewAnnotation).ifPresent(requestBodyObject::setContent); + methodConsumes == null ? new String[0] : methodConsumes.value(), null, components, jsonViewAnnotation, openapi31).ifPresent(requestBodyObject::setContent); return Optional.of(requestBodyObject); } public static Optional getApiResponses(final io.swagger.v3.oas.annotations.responses.ApiResponse[] responses, Produces classProduces, Produces methodProduces, Components components, JsonView jsonViewAnnotation) { + return getApiResponses(responses, classProduces, methodProduces, components, jsonViewAnnotation, false); + } + + public static Optional getApiResponses(final io.swagger.v3.oas.annotations.responses.ApiResponse[] responses, Produces classProduces, Produces methodProduces, Components components, JsonView jsonViewAnnotation, boolean openapi31) { if (responses == null) { return Optional.empty(); } @@ -85,7 +92,7 @@ public static Optional getApiResponses(final io.swagger.v3.oas.ann } AnnotationsUtils.getContent(response.content(), classProduces == null ? new String[0] : classProduces.value(), - methodProduces == null ? new String[0] : methodProduces.value(), null, components, jsonViewAnnotation).ifPresent(apiResponseObject::content); + methodProduces == null ? new String[0] : methodProduces.value(), null, components, jsonViewAnnotation, openapi31).ifPresent(apiResponseObject::content); AnnotationsUtils.getHeaders(response.headers(), jsonViewAnnotation).ifPresent(apiResponseObject::headers); if (StringUtils.isNotBlank(apiResponseObject.getDescription()) || apiResponseObject.getContent() != null || apiResponseObject.getHeaders() != null) { diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java index 3cc3b9b900..79aaa40138 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java @@ -1418,6 +1418,8 @@ protected ResolvedParameter getParameters(Type type, List annotation final OpenAPIExtension extension = chain.next(); LOGGER.debug("trying extension {}", extension); + extension.setOpenAPI31(Boolean.TRUE.equals(config.isOpenAPI31())); + return extension.extractParameters(annotations, type, typesToSkip, components, classConsumes, methodConsumes, true, jsonViewAnnotation, chain); } diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/ext/AbstractOpenAPIExtension.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/ext/AbstractOpenAPIExtension.java index 4add272faa..a8792d4e2a 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/ext/AbstractOpenAPIExtension.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/ext/AbstractOpenAPIExtension.java @@ -16,6 +16,8 @@ public abstract class AbstractOpenAPIExtension implements OpenAPIExtension { + protected boolean openapi31; + @Override public String extractOperationMethod(Method method, Iterator chain) { if (chain.hasNext()) { @@ -61,4 +63,9 @@ protected boolean shouldIgnoreType(Type type, Set typesToSkip) { protected JavaType constructType(Type type) { return TypeFactory.defaultInstance().constructType(type); } + + @Override + public void setOpenAPI31(boolean openapi31) { + this.openapi31 = openapi31; + } } diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/ext/OpenAPIExtension.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/ext/OpenAPIExtension.java index 311c8d5ac4..d966120a0d 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/ext/OpenAPIExtension.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/ext/OpenAPIExtension.java @@ -27,4 +27,8 @@ ResolvedParameter extractParameters(List annotations, Type type, Set * @param chain the chain with swagger extensions to process */ void decorateOperation(Operation operation, Method method, Iterator chain); + + default void setOpenAPI31(boolean openapi31) { + //todo: override me! + } } diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore/parameter/Parameters31Resource.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore/parameter/Parameters31Resource.java new file mode 100644 index 0000000000..10574db924 --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore/parameter/Parameters31Resource.java @@ -0,0 +1,128 @@ +package io.swagger.v3.jaxrs2.petstore.parameter; + +import io.swagger.v3.jaxrs2.resources.model.Pet; +import io.swagger.v3.jaxrs2.resources.model.User; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.StringToClassMapItem; +import io.swagger.v3.oas.annotations.enums.Explode; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.enums.ParameterStyle; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; + +import javax.ws.rs.Consumes; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.QueryParam; + +/** + * Resource with some Parameters examples + */ +public class Parameters31Resource { + @Path("/parameters") + @POST + @Operation( + operationId = "subscribe", + description = "subscribes a client to updates relevant to the requestor's account, as " + + "identified by the input token. The supplied url will be used as the delivery address for response payloads", + parameters = { + @Parameter(in = ParameterIn.PATH, name = "subscriptionId", + required = true, + schema = @Schema( + $id = "http://yourdomain.com/schemas/myschema.json", + $comment = "schema $comment", + type = "string" + ), + style = ParameterStyle.SIMPLE), + @Parameter(in = ParameterIn.QUERY, name = "explodeFalse", + required = true, + explode = Explode.FALSE, + schema = @Schema( + types = { "string", "number" }, + exclusiveMaximumValue = 100, + $schema = "parameter $schema", + $anchor = "parameter $anchor", + _if = Parameters31Resource.SubscriptionResponse.class, + _else = Parameters31Resource.SubscriptionResponse.class, + then = Parameters31Resource.SubscriptionResponse.class + )), + @Parameter(in = ParameterIn.QUERY, name = "explodeAvoiding", required = true, explode = Explode.TRUE, + schema = @Schema( + type = "int", + format = "id", + exclusiveMaximumValue = 1000, + exclusiveMinimumValue = 10, + description = "the generated id", + accessMode = Schema.AccessMode.READ_ONLY + )), + @Parameter(in = ParameterIn.QUERY, name = "arrayParameter", required = true, explode = Explode.TRUE, + array = @ArraySchema(maxItems = 10, minItems = 1, + schema = @Schema(implementation = Parameters31Resource.SubscriptionResponse.class), + uniqueItems = true + ) + , + schema = @Schema( + type = "int", + format = "id", + description = "the generated id", + accessMode = Schema.AccessMode.READ_ONLY), + content = @Content(schema = @Schema(type = "number", + description = "the generated id", + accessMode = Schema.AccessMode.READ_ONLY)) + ), + @Parameter(in = ParameterIn.QUERY, name = "arrayParameterImplementation", required = true, explode = Explode.TRUE, + array = @ArraySchema( + maxItems = 10, + minItems = 1, + maxContains = 50, + minContains = 1, + contains = @Schema(implementation = Parameters31Resource.SubscriptionResponse.class), + unevaluatedItems = @Schema(implementation = Parameters31Resource.SubscriptionResponse.class), + schema = @Schema(implementation = Parameters31Resource.SubscriptionResponse.class), + uniqueItems = true + ) + ), + @Parameter(in = ParameterIn.QUERY, name = "arrayParameterImplementation2", required = true, explode = Explode.TRUE, + schema = @Schema(implementation = Parameters31Resource.SubscriptionResponse.class)) + + }, + responses = { + @ApiResponse( + description = "test description", content = @Content( + mediaType = "*/*", + schema = @Schema( + $id = "http://yourdomain.com/schemas/myschema.json", + dependentSchemas = { + @StringToClassMapItem( + key = "pet", + value = Pet.class + ) + }, + patternProperties = { + @StringToClassMapItem( + key = "user", + value = User.class + ) + }, + properties = { + @StringToClassMapItem( + key = "extraObject", + value = Object.class + ) + } + ) + )) + }) + @Consumes({"application/json", "application/xml"}) + public Parameters31Resource.SubscriptionResponse subscribe(@Parameter(description = "idParam") + @QueryParam("id") final String id) { + return null; + } + + static class SubscriptionResponse { + public String subscriptionId; + } +} From 05e230123a44f309abfce2a8b2c4fafffcf5e6ff Mon Sep 17 00:00:00 2001 From: Hugo Mercado Date: Sun, 22 Jan 2023 20:23:48 -0500 Subject: [PATCH 035/131] OAS 3.1 - added tests to verify parameters read process --- .../io/swagger/v3/jaxrs2/PetResourceTest.java | 5 + .../parameters/Parameters31Resource.yaml | 187 ++++++++++++++++++ 2 files changed, 192 insertions(+) create mode 100644 modules/swagger-jaxrs2/src/test/resources/petstore/parameters/Parameters31Resource.yaml diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/PetResourceTest.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/PetResourceTest.java index 44f140b98f..c1b9a843a5 100644 --- a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/PetResourceTest.java +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/PetResourceTest.java @@ -274,6 +274,11 @@ public void testOpenAPI31DefinitionResource() { compare(OpenAPI31DefinitionResource.class, PETSTORE_SOURCE, true); } + @Test(description = "Test Parameters resources)") + public void testParameters31Resource() { + compare(Parameters31Resource.class, PARAMETERS_SOURCE, true); + } + /** * Compare a class that were read and parsed to a yaml against a yaml file. * diff --git a/modules/swagger-jaxrs2/src/test/resources/petstore/parameters/Parameters31Resource.yaml b/modules/swagger-jaxrs2/src/test/resources/petstore/parameters/Parameters31Resource.yaml new file mode 100644 index 0000000000..339d8bc64c --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/resources/petstore/parameters/Parameters31Resource.yaml @@ -0,0 +1,187 @@ +openapi: 3.1.0 +paths: + /parameters: + post: + description: "subscribes a client to updates relevant to the requestor's account,\ + \ as identified by the input token. The supplied url will be used as the\ + \ delivery address for response payloads" + operationId: subscribe + parameters: + - name: subscriptionId + in: path + required: true + style: simple + schema: + type: string + $comment: schema $comment + $id: http://yourdomain.com/schemas/myschema.json + - name: explodeFalse + in: query + required: true + schema: + type: + - string + - number + if: + properties: + subscriptionId: + type: string + then: + properties: + subscriptionId: + type: string + else: + properties: + subscriptionId: + type: string + $anchor: parameter $anchor + $schema: parameter $schema + exclusiveMaximum: 100 + - name: explodeAvoiding + in: query + required: true + schema: + type: string + format: id + description: the generated id + exclusiveMaximum: 1000 + exclusiveMinimum: 10 + readOnly: true + - name: arrayParameter + in: query + required: true + content: + application/json: + schema: + type: number + description: the generated id + readOnly: true + application/xml: + schema: + type: number + description: the generated id + readOnly: true + - name: arrayParameterImplementation + in: query + required: true + schema: + type: array + contains: {} + items: + $ref: '#/components/schemas/SubscriptionResponse' + maxContains: 50 + maxItems: 10 + minContains: 1 + minItems: 1 + unevaluatedItems: {} + uniqueItems: true + - name: arrayParameterImplementation2 + in: query + required: true + explode: true + schema: + $ref: '#/components/schemas/SubscriptionResponse' + - name: id + in: query + description: idParam + schema: + type: string + responses: + default: + description: test description + content: + '*/*': + schema: + $id: http://yourdomain.com/schemas/myschema.json + dependentSchemas: + pet: + $ref: '#/components/schemas/Pet' + patternProperties: + user: + $ref: '#/components/schemas/User' + properties: + extraObject: {} +components: + schemas: + Category: + properties: + id: + type: integer + format: int64 + name: + type: string + xml: + name: Category + Pet: + properties: + id: + type: integer + format: int64 + category: + properties: + id: + type: integer + format: int64 + name: + type: string + xml: + name: Category + name: + type: string + photoUrls: + type: array + items: + type: string + xml: + name: photoUrl + xml: + wrapped: true + tags: + type: array + items: + $ref: '#/components/schemas/Tag' + xml: + wrapped: true + status: + type: string + description: pet status in the store + enum: + - "available,pending,sold" + xml: + name: Pet + Tag: + properties: + id: + type: integer + format: int64 + name: + type: string + xml: + name: Tag + User: + properties: + id: + type: integer + format: int64 + username: + type: string + firstName: + type: string + lastName: + type: string + email: + type: string + password: + type: string + phone: + type: string + userStatus: + type: integer + format: int32 + description: User Status + xml: + name: User + SubscriptionResponse: + properties: + subscriptionId: + type: string From 6fa3aa1212850539e485629a4e8be4b663a7e89c Mon Sep 17 00:00:00 2001 From: Hugo Mercado Date: Sun, 22 Jan 2023 20:31:17 -0500 Subject: [PATCH 036/131] OAS 3.1 - added test for callback --- .../io/swagger/v3/jaxrs2/PetResourceTest.java | 6 ++ .../callback/ComplexCallback31Resource.java | 77 +++++++++++++++++++ .../callbacks/ComplexCallback31Resource.yaml | 74 ++++++++++++++++++ 3 files changed, 157 insertions(+) create mode 100644 modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore/callback/ComplexCallback31Resource.java create mode 100644 modules/swagger-jaxrs2/src/test/resources/petstore/callbacks/ComplexCallback31Resource.yaml diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/PetResourceTest.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/PetResourceTest.java index c1b9a843a5..6e3e3fe609 100644 --- a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/PetResourceTest.java +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/PetResourceTest.java @@ -5,6 +5,7 @@ import io.swagger.v3.jaxrs2.annotations.AbstractAnnotationTest; import io.swagger.v3.jaxrs2.matchers.SerializationMatchers; import io.swagger.v3.jaxrs2.petstore.EmptyPetResource; +import io.swagger.v3.jaxrs2.petstore.callback.ComplexCallback31Resource; import io.swagger.v3.jaxrs2.petstore.callback.ComplexCallbackResource; import io.swagger.v3.jaxrs2.petstore.callback.MultipleCallbacksTestWithOperationResource; import io.swagger.v3.jaxrs2.petstore.callback.RepeatableCallbackResource; @@ -279,6 +280,11 @@ public void testParameters31Resource() { compare(Parameters31Resource.class, PARAMETERS_SOURCE, true); } + @Test(description = "Test some resources with Callbacks)") + public void testCallBacks31Resources() { + compare(ComplexCallback31Resource.class, CALLBACKS_SOURCE, true); + } + /** * Compare a class that were read and parsed to a yaml against a yaml file. * diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore/callback/ComplexCallback31Resource.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore/callback/ComplexCallback31Resource.java new file mode 100644 index 0000000000..693833d8de --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore/callback/ComplexCallback31Resource.java @@ -0,0 +1,77 @@ +package io.swagger.v3.jaxrs2.petstore.callback; + +import io.swagger.v3.jaxrs2.resources.model.User; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.StringToClassMapItem; +import io.swagger.v3.oas.annotations.callbacks.Callback; +import io.swagger.v3.oas.annotations.callbacks.Callbacks; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.QueryParam; + +public class ComplexCallback31Resource { + @Callbacks({ + @Callback( + name = "testCallback1", + operation = @Operation( + operationId = "getAllReviews", + summary = "get all the reviews", + method = "get", + responses = @ApiResponse( + responseCode = "200", + description = "successful operation", + content = @Content( + mediaType = "application/json", + schema = @Schema( + $id = "http://yourdomain.com/schemas/myschema.json", + $comment = "random comment", + types = { "integer", "number" }, + dependentSchemas = { + @StringToClassMapItem( + key = "pet", + value = Object.class + ) + }, + patternProperties = { + @StringToClassMapItem( + key = "user", + value = Object.class + ) + }, + format = "int32")))), + callbackUrlExpression = "http://www.url.com"), + @Callback( + name = "testCallback2", + operation = @Operation( + operationId = "getAnSpecificReviews", + summary = "get a review", + method = "get", + responses = @ApiResponse( + responseCode = "200", + description = "successful operation", + content = @Content( + mediaType = "application/json", + schema = @Schema( + implementation = User.class)))), + callbackUrlExpression = "http://www.url2.com") + }) + @Operation( + summary = "Simple get operation", + operationId = "getWithNoParameters", + responses = { + @ApiResponse( + responseCode = "200", + description = "voila!") + }) + @GET + @Path("/complexcallback") + public String simpleGet(@Parameter(description = "idParam", schema = @Schema(implementation = User.class)) + @QueryParam("id") final String id) { + return null; + } +} diff --git a/modules/swagger-jaxrs2/src/test/resources/petstore/callbacks/ComplexCallback31Resource.yaml b/modules/swagger-jaxrs2/src/test/resources/petstore/callbacks/ComplexCallback31Resource.yaml new file mode 100644 index 0000000000..3fe539678e --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/resources/petstore/callbacks/ComplexCallback31Resource.yaml @@ -0,0 +1,74 @@ +openapi: 3.1.0 +paths: + /complexcallback: + get: + summary: Simple get operation + operationId: getWithNoParameters + parameters: + - name: id + in: query + description: idParam + schema: + $ref: '#/components/schemas/User' + responses: + "200": + description: voila! + callbacks: + testCallback1: + http://www.url.com: + get: + summary: get all the reviews + operationId: getAllReviews + responses: + "200": + description: successful operation + content: + application/json: + schema: + type: + - integer + - number + format: int32 + $comment: random comment + $id: http://yourdomain.com/schemas/myschema.json + dependentSchemas: + pet: { } + patternProperties: + user: { } + testCallback2: + http://www.url2.com: + get: + summary: get a review + operationId: getAnSpecificReviews + responses: + "200": + description: successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/User' +components: + schemas: + User: + properties: + id: + type: integer + format: int64 + username: + type: string + firstName: + type: string + lastName: + type: string + email: + type: string + password: + type: string + phone: + type: string + userStatus: + type: integer + format: int32 + description: User Status + xml: + name: User From c131179487a340fe33f15d02535299053a1d3f52 Mon Sep 17 00:00:00 2001 From: Hugo Mercado Date: Sun, 22 Jan 2023 21:26:25 -0500 Subject: [PATCH 037/131] OAS 3.1 - added tests for request body --- .../io/swagger/v3/jaxrs2/PetResourceTest.java | 8 +- .../requestbody/RequestBody31Resource.java | 57 +++++++++++++ .../requestbody/RequestBody31Resource.yaml | 83 +++++++++++++++++++ 3 files changed, 146 insertions(+), 2 deletions(-) create mode 100644 modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore/requestbody/RequestBody31Resource.java create mode 100644 modules/swagger-jaxrs2/src/test/resources/petstore/requestbody/RequestBody31Resource.yaml diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/PetResourceTest.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/PetResourceTest.java index 6e3e3fe609..74ef5d3b89 100644 --- a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/PetResourceTest.java +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/PetResourceTest.java @@ -1,7 +1,5 @@ package io.swagger.v3.jaxrs2; -import io.swagger.v3.core.util.Yaml; -import io.swagger.v3.core.util.Yaml31; import io.swagger.v3.jaxrs2.annotations.AbstractAnnotationTest; import io.swagger.v3.jaxrs2.matchers.SerializationMatchers; import io.swagger.v3.jaxrs2.petstore.EmptyPetResource; @@ -36,6 +34,7 @@ import io.swagger.v3.jaxrs2.petstore.parameter.RepeatableParametersResource; import io.swagger.v3.jaxrs2.petstore.parameter.SingleJaxRSAnnotatedParameter; import io.swagger.v3.jaxrs2.petstore.parameter.SingleNotAnnotatedParameter; +import io.swagger.v3.jaxrs2.petstore.requestbody.RequestBody31Resource; import io.swagger.v3.jaxrs2.petstore.requestbody.RequestBodyMethodPriorityResource; import io.swagger.v3.jaxrs2.petstore.requestbody.RequestBodyParameterPriorityResource; import io.swagger.v3.jaxrs2.petstore.requestbody.RequestBodyResource; @@ -285,6 +284,11 @@ public void testCallBacks31Resources() { compare(ComplexCallback31Resource.class, CALLBACKS_SOURCE, true); } + @Test(description = "Test some resources with Callbacks)") + public void testRequestBody31Resources() { + compare(RequestBody31Resource.class, REQUEST_BODIES_SOURCE, true); + } + /** * Compare a class that were read and parsed to a yaml against a yaml file. * diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore/requestbody/RequestBody31Resource.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore/requestbody/RequestBody31Resource.java new file mode 100644 index 0000000000..046f492e5d --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore/requestbody/RequestBody31Resource.java @@ -0,0 +1,57 @@ +package io.swagger.v3.jaxrs2.petstore.requestbody; + +import io.swagger.v3.jaxrs2.petstore.parameter.Parameters31Resource; +import io.swagger.v3.jaxrs2.resources.model.User; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.parameters.RequestBody; + +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.Response; + +/** + * Resource with RequestBody examples + */ +public class RequestBody31Resource { + + @GET + @Path("/methodWithRequestBodyWithoutContentWithoutImplementation") + @Operation(summary = "Create user", + description = "This can only be done by the logged in user.") + public Response methodWithRequestBodyWithoutContentWithoutImplementation( + @RequestBody(description = "Created user object", required = true, + content = @Content( + schema = @Schema(name = "User", + description = "User description", + example = "User Description", + required = true, + types = { "string", "number", "object" }, + exclusiveMaximumValue = 100, + exclusiveMinimumValue = 1, + $schema = "parameter $schema", + $anchor = "parameter $anchor", + _if = Object.class, + _else = Object.class, + then = Object.class, + unevaluatedProperties = Object.class + ))) + final User user) { + return Response.ok().entity("").build(); + } + + @POST + @Path("/methodWithRequestBodyAndTwoParameters") + @Operation(summary = "Create user", + description = "This can only be done by the logged in user.") + public Response methodWithRequestBodyAndTwoParameters( + @RequestBody(description = "Created user object", required = true, + content = @Content( + schema = @Schema(implementation = User.class))) final User user, + @QueryParam("name") final String name, @QueryParam("code") final String code) { + return Response.ok().entity("").build(); + } +} diff --git a/modules/swagger-jaxrs2/src/test/resources/petstore/requestbody/RequestBody31Resource.yaml b/modules/swagger-jaxrs2/src/test/resources/petstore/requestbody/RequestBody31Resource.yaml new file mode 100644 index 0000000000..3229ea10b2 --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/resources/petstore/requestbody/RequestBody31Resource.yaml @@ -0,0 +1,83 @@ +openapi: 3.1.0 +paths: + /methodWithRequestBodyAndTwoParameters: + post: + summary: Create user + description: This can only be done by the logged in user. + operationId: methodWithRequestBodyAndTwoParameters + parameters: + - name: name + in: query + schema: + type: string + - name: code + in: query + schema: + type: string + requestBody: + description: Created user object + content: + '*/*': + schema: + $ref: '#/components/schemas/User' + required: true + responses: + default: + description: default response + content: + '*/*': {} + /methodWithRequestBodyWithoutContentWithoutImplementation: + get: + summary: Create user + description: This can only be done by the logged in user. + operationId: methodWithRequestBodyWithoutContentWithoutImplementation + requestBody: + description: Created user object + content: + '*/*': + schema: + type: + - string + - number + - object + if: {} + then: {} + else: {} + $anchor: parameter $anchor + $schema: parameter $schema + description: User description + example: User Description + exclusiveMaximum: 100 + exclusiveMinimum: 1 + unevaluatedProperties: {} + required: true + responses: + default: + description: default response + content: + '*/*': {} +components: + schemas: + User: + properties: + id: + type: integer + format: int64 + username: + type: string + firstName: + type: string + lastName: + type: string + email: + type: string + password: + type: string + phone: + type: string + userStatus: + type: integer + format: int32 + description: User Status + xml: + name: User From 5c11f730bdd532be97ccbde25bb0d37ec15de875 Mon Sep 17 00:00:00 2001 From: Hugo Mercado Date: Tue, 24 Jan 2023 23:38:06 -0500 Subject: [PATCH 038/131] OAS 3.1 - added support for webhooks. --- .../swagger/v3/oas/annotations/Webhooks.java | 29 +++++++ .../java/io/swagger/v3/jaxrs2/Reader.java | 22 +++++ .../io/swagger/v3/jaxrs2/PetResourceTest.java | 9 +- .../v3/jaxrs2/petstore/WebHookResource.java | 84 +++++++++++++++++++ .../parameter/Parameters31Resource.java | 2 +- .../resources/petstore/WebHookResource.yaml | 65 ++++++++++++++ 6 files changed, 209 insertions(+), 2 deletions(-) create mode 100644 modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/Webhooks.java create mode 100644 modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore/WebHookResource.java create mode 100644 modules/swagger-jaxrs2/src/test/resources/petstore/WebHookResource.yaml diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/Webhooks.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/Webhooks.java new file mode 100644 index 0000000000..1d7d744112 --- /dev/null +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/Webhooks.java @@ -0,0 +1,29 @@ +package io.swagger.v3.oas.annotations; + +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.ANNOTATION_TYPE; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.TYPE; + +/** + * Container for repeatable {@link Webhook} annotation + * + * @see Webhook + */ +@Target({TYPE, ANNOTATION_TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Inherited +@OpenAPI31 +public @interface Webhooks { + + /** + * An array of Webhook annotations + * + * @return the array of the Webhook + **/ + Webhook[] value() default {}; +} diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java index 79aaa40138..9b624a7fad 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java @@ -284,6 +284,8 @@ public OpenAPI read(Class cls, List apiSecurityScheme = ReflectionUtils.getRepeatableAnnotations(cls, io.swagger.v3.oas.annotations.security.SecurityScheme.class); List apiSecurityRequirements = ReflectionUtils.getRepeatableAnnotations(cls, io.swagger.v3.oas.annotations.security.SecurityRequirement.class); + io.swagger.v3.oas.annotations.Webhooks webhooksAnnotation = ReflectionUtils.getAnnotation(cls, io.swagger.v3.oas.annotations.Webhooks.class); + ExternalDocumentation apiExternalDocs = ReflectionUtils.getAnnotation(cls, ExternalDocumentation.class); io.swagger.v3.oas.annotations.tags.Tag[] apiTags = ReflectionUtils.getRepeatableAnnotationsArray(cls, io.swagger.v3.oas.annotations.tags.Tag.class); io.swagger.v3.oas.annotations.servers.Server[] apiServers = ReflectionUtils.getRepeatableAnnotationsArray(cls, io.swagger.v3.oas.annotations.servers.Server.class); @@ -661,6 +663,23 @@ public OpenAPI read(Class cls, } } + if (webhooksAnnotation != null && webhooksAnnotation.value().length > 0) { + Map webhooks = new HashMap<>(); + for (io.swagger.v3.oas.annotations.Webhook webhookAnnotation : webhooksAnnotation.value()) { + io.swagger.v3.oas.annotations.Operation apiOperation = webhookAnnotation.operation(); + PathItem pathItemObject = new PathItem(); + Operation operation = new Operation(); + + setOperationObjectFromApiOperationAnnotation(operation, apiOperation, null, classProduces, null, classConsumes, null); + + pathItemObject.post(operation); + webhooks.put(webhookAnnotation.name(), pathItemObject); + } + if (!webhooks.isEmpty()) { + openAPI.setWebhooks(webhooks); + } + } + // if no components object is defined in openApi instance passed by client, set openAPI.components to resolved components (if not empty) if (!isEmptyComponents(components) && openAPI.getComponents() == null) { openAPI.setComponents(components); @@ -1483,6 +1502,9 @@ private boolean isEmptyComponents(Components components) { if (components.getResponses() != null && components.getResponses().size() > 0) { return false; } + if (components.getPathItems() != null && components.getPathItems().size() > 0) { + return false; + } return true; } diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/PetResourceTest.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/PetResourceTest.java index 74ef5d3b89..6496b1072d 100644 --- a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/PetResourceTest.java +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/PetResourceTest.java @@ -1,8 +1,10 @@ package io.swagger.v3.jaxrs2; +import io.swagger.v3.core.util.Yaml31; import io.swagger.v3.jaxrs2.annotations.AbstractAnnotationTest; import io.swagger.v3.jaxrs2.matchers.SerializationMatchers; import io.swagger.v3.jaxrs2.petstore.EmptyPetResource; +import io.swagger.v3.jaxrs2.petstore.WebHookResource; import io.swagger.v3.jaxrs2.petstore.callback.ComplexCallback31Resource; import io.swagger.v3.jaxrs2.petstore.callback.ComplexCallbackResource; import io.swagger.v3.jaxrs2.petstore.callback.MultipleCallbacksTestWithOperationResource; @@ -284,11 +286,16 @@ public void testCallBacks31Resources() { compare(ComplexCallback31Resource.class, CALLBACKS_SOURCE, true); } - @Test(description = "Test some resources with Callbacks)") + @Test(description = "Test some resources with Request Body)") public void testRequestBody31Resources() { compare(RequestBody31Resource.class, REQUEST_BODIES_SOURCE, true); } + @Test(description = "Test webhook resources") + public void testWebhooksResource() { + compare(WebHookResource.class, PETSTORE_SOURCE, true); + } + /** * Compare a class that were read and parsed to a yaml against a yaml file. * diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore/WebHookResource.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore/WebHookResource.java new file mode 100644 index 0000000000..6cee505fe5 --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore/WebHookResource.java @@ -0,0 +1,84 @@ +package io.swagger.v3.jaxrs2.petstore; + +import io.swagger.v3.jaxrs2.petstore.parameter.Parameters31Resource; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.StringToClassMapItem; +import io.swagger.v3.oas.annotations.Webhook; +import io.swagger.v3.oas.annotations.Webhooks; +import io.swagger.v3.oas.annotations.enums.Explode; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.enums.ParameterStyle; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; + +@Webhooks({ + @Webhook( + name = "webhook1", + operation = @Operation(operationId = "subscribe", + description = "subscribes a client to updates relevant to the requestor's account, as " + + "identified by the input token. The supplied url will be used as the delivery address for response payloads", + parameters = { + @Parameter(in = ParameterIn.PATH, name = "subscriptionId", + required = true, + schema = @Schema( + $id = "http://yourdomain.com/schemas/myschema.json", + $comment = "schema $comment", + type = "string" + ), + style = ParameterStyle.SIMPLE), + @Parameter(in = ParameterIn.QUERY, name = "explodeFalse", + required = true, + explode = Explode.FALSE, + schema = @Schema( + types = {"string", "number"}, + exclusiveMaximumValue = 100, + $schema = "parameter $schema", + $anchor = "parameter $anchor", + _if = Parameters31Resource.SubscriptionResponse.class, + _else = Parameters31Resource.SubscriptionResponse.class, + then = Parameters31Resource.SubscriptionResponse.class + ) + ) + } + ) + ), + @Webhook( + name = "webhook2", + operation = @Operation( + operationId = "getAllReviews", + summary = "get all the reviews", + method = "get", + responses = @ApiResponse( + responseCode = "200", + description = "successful operation", + content = @Content( + mediaType = "application/json", + schema = @Schema( + $id = "http://yourdomain.com/schemas/myschema.json", + $comment = "random comment", + types = { "integer", "number" }, + dependentSchemas = { + @StringToClassMapItem( + key = "pet", + value = Object.class + ) + }, + patternProperties = { + @StringToClassMapItem( + key = "user", + value = Object.class + ) + }, + format = "int32" + ) + ) + ) + ) + ) + +}) + +public class WebHookResource { +} diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore/parameter/Parameters31Resource.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore/parameter/Parameters31Resource.java index 10574db924..d6e6d0f945 100644 --- a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore/parameter/Parameters31Resource.java +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore/parameter/Parameters31Resource.java @@ -122,7 +122,7 @@ public Parameters31Resource.SubscriptionResponse subscribe(@Parameter(descriptio return null; } - static class SubscriptionResponse { + public static class SubscriptionResponse { public String subscriptionId; } } diff --git a/modules/swagger-jaxrs2/src/test/resources/petstore/WebHookResource.yaml b/modules/swagger-jaxrs2/src/test/resources/petstore/WebHookResource.yaml new file mode 100644 index 0000000000..fee1c0928a --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/resources/petstore/WebHookResource.yaml @@ -0,0 +1,65 @@ +openapi: 3.1.0 +components: + schemas: + SubscriptionResponse: + properties: + subscriptionId: + type: string +webhooks: + webhook2: + post: + summary: get all the reviews + operationId: getAllReviews + responses: + "200": + description: successful operation + content: + application/json: + schema: + type: + - integer + - number + format: int32 + $comment: random comment + $id: http://yourdomain.com/schemas/myschema.json + dependentSchemas: + pet: {} + patternProperties: + user: {} + webhook1: + post: + description: "subscribes a client to updates relevant to the requestor's account,\ + \ as identified by the input token. The supplied url will be used as the\ + \ delivery address for response payloads" + operationId: subscribe + parameters: + - name: subscriptionId + in: path + required: true + style: simple + schema: + type: string + $comment: schema $comment + $id: http://yourdomain.com/schemas/myschema.json + - name: explodeFalse + in: query + required: true + schema: + type: + - string + - number + if: + properties: + subscriptionId: + type: string + then: + properties: + subscriptionId: + type: string + else: + properties: + subscriptionId: + type: string + $anchor: parameter $anchor + $schema: parameter $schema + exclusiveMaximum: 100 From d052c1ababdcabb2d85e4645ebbbb7dab08f9326 Mon Sep 17 00:00:00 2001 From: Hugo Mercado Date: Wed, 25 Jan 2023 00:41:40 -0500 Subject: [PATCH 039/131] OAS 3.1 - check _const value in schema annotation validation --- .../src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java index 3f08a28349..8608fe1b4c 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java @@ -123,6 +123,7 @@ public static boolean hasSchemaAnnotation(io.swagger.v3.oas.annotations.media.Sc && schema.dependentRequiredMap().length == 0 && schema.patternProperties().length == 0 && schema.properties().length == 0 + && StringUtils.isBlank(schema._const()) && schema.additionalProperties().equals(io.swagger.v3.oas.annotations.media.Schema.AdditionalPropertiesValue.USE_ADDITIONAL_PROPERTIES_ANNOTATION) From 356f1f212f454b1b1dc40ad8dceac55dfa81cdc2 Mon Sep 17 00:00:00 2001 From: Hugo Mercado Date: Wed, 25 Jan 2023 00:51:53 -0500 Subject: [PATCH 040/131] OAS 3.1 - use right method to resolve schema --- .../main/java/io/swagger/v3/core/util/ParameterProcessor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/ParameterProcessor.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/ParameterProcessor.java index 9aa07ce9d8..007d99c0a7 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/ParameterProcessor.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/ParameterProcessor.java @@ -68,7 +68,7 @@ public static Parameter applyAnnotations( final ResolvedSchema resolvedSchema; if (openapi31) { - resolvedSchema = new ModelConverters(true).readAllAsResolvedSchema(annotatedType); + resolvedSchema = new ModelConverters(true).resolveAsResolvedSchema(annotatedType); } else { resolvedSchema = ModelConverters.getInstance().resolveAsResolvedSchema(annotatedType); } From 03b9c03de84f114cc99033f8b9e2f24fd37009e2 Mon Sep 17 00:00:00 2001 From: Hugo Mercado Date: Wed, 25 Jan 2023 00:57:08 -0500 Subject: [PATCH 041/131] OAS 3.1 - updated test --- .../resources/petstore/FullPetResource.yaml | 386 +++++++++--------- 1 file changed, 193 insertions(+), 193 deletions(-) diff --git a/modules/swagger-jaxrs2/src/test/resources/petstore/FullPetResource.yaml b/modules/swagger-jaxrs2/src/test/resources/petstore/FullPetResource.yaml index dae5c87847..1d3db51612 100644 --- a/modules/swagger-jaxrs2/src/test/resources/petstore/FullPetResource.yaml +++ b/modules/swagger-jaxrs2/src/test/resources/petstore/FullPetResource.yaml @@ -46,34 +46,6 @@ tags: externalDocs: description: docs desc class paths: - /pet/{petId}: - get: - summary: Find pet by ID - description: Returns a pet when 0 < ID <= 10. ID > 10 or nonintegers will simulate - API error conditions - operationId: getPetById - parameters: - - name: petId - in: path - description: ID of pet that needs to be fetched - required: true - schema: - type: integer - format: int64 - responses: - default: - description: The pet - content: - application/json: - schema: - $ref: '#/components/schemas/Pet' - application/xml: - schema: - $ref: '#/components/schemas/Pet' - "400": - description: Invalid ID supplied - "404": - description: Pet not found /pet: put: summary: Update an existing pet @@ -108,21 +80,6 @@ paths: responses: "405": description: Invalid input - /pet/bodynoannotation: - post: - summary: Add a new pet to the store no annotation - operationId: addPetNoAnnotation - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/Pet' - application/xml: - schema: - $ref: '#/components/schemas/Pet' - responses: - "405": - description: Invalid input /pet/bodyid: post: summary: Add a new pet to the store passing an integer with generic parameter @@ -160,6 +117,21 @@ paths: responses: "405": description: Invalid input + /pet/bodynoannotation: + post: + summary: Add a new pet to the store no annotation + operationId: addPetNoAnnotation + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Pet' + application/xml: + schema: + $ref: '#/components/schemas/Pet' + responses: + "405": + description: Invalid input /pet/findByStatus: get: summary: Finds Pets by status @@ -193,8 +165,8 @@ paths: /pet/findByTags: get: summary: Finds Pets by tags - description: Multiple tags can be provided with comma separated strings. Use - tag1, tag2, tag3 for testing. + description: "Multiple tags can be provided with comma separated strings. Use\ + \ tag1, tag2, tag3 for testing." operationId: findPetsByTags parameters: - name: tags @@ -213,10 +185,38 @@ paths: "400": description: Invalid tag value deprecated: true + /pet/{petId}: + get: + summary: Find pet by ID + description: Returns a pet when 0 < ID <= 10. ID > 10 or nonintegers will simulate + API error conditions + operationId: getPetById + parameters: + - name: petId + in: path + description: ID of pet that needs to be fetched + required: true + schema: + type: integer + format: int64 + responses: + default: + description: The pet + content: + application/json: + schema: + $ref: '#/components/schemas/Pet' + application/xml: + schema: + $ref: '#/components/schemas/Pet' + "400": + description: Invalid ID supplied + "404": + description: Pet not found /complexcallback: get: summary: Simple get operation - operationId: getWithNoParameters + operationId: getWithNoParameters_1 parameters: - name: id in: query @@ -255,7 +255,7 @@ paths: /multiplecallback: get: summary: Simple get operation - operationId: getWithNoParameters_1 + operationId: getWithNoParameters responses: "200": description: voila! @@ -335,16 +335,16 @@ paths: description: Schema example: Subscription example examples: - subscriptionId_2: - summary: Subscription number 54321 - description: subscriptionId_2 - value: 54321 - externalValue: Subscription external value 2 subscriptionId_1: summary: Subscription number 12345 description: subscriptionId_1 value: 12345 externalValue: Subscription external value 1 + subscriptionId_2: + summary: Subscription number 54321 + description: subscriptionId_2 + value: 54321 + externalValue: Subscription external value 2 example: example requestBody: description: Created user object @@ -382,7 +382,7 @@ paths: externalValue: Subscription Response value 1 /links: get: - operationId: getUserWithAddress + operationId: getUserWithAddress_1 parameters: - name: userId in: query @@ -520,20 +520,10 @@ paths: '*/*': schema: type: string - /operationsresource2: - get: - operationId: getUser_4 - responses: - default: - description: default response - content: - '*/*': - schema: - type: string /operationsresource: get: summary: Find pet by ID - description: combinatedfullyannotatedoperation/{petId} + description: "combinatedfullyannotatedoperation/{petId}" operationId: petId_2 parameters: - name: petId @@ -598,6 +588,16 @@ paths: '*/*': schema: type: string + /operationsresource2: + get: + operationId: getUser_4 + responses: + default: + description: default response + content: + '*/*': + schema: + type: string /operationwithouannotation: get: operationId: getUser_6 @@ -625,9 +625,9 @@ paths: variables: {} /arrayschema: post: - description: subscribes a client to updates relevant to the requestor's account, - as identified by the input token. The supplied url will be used as the delivery - address for response payloads + description: "subscribes a client to updates relevant to the requestor's account,\ + \ as identified by the input token. The supplied url will be used as the\ + \ delivery address for response payloads" operationId: subscribe_1 parameters: - name: arrayParameter @@ -749,10 +749,10 @@ paths: $ref: '#/components/schemas/User' /parameters: post: - description: subscribes a client to updates relevant to the requestor's account, - as identified by the input token. The supplied url will be used as the delivery - address for response payloads - operationId: subscribe_2 + description: "subscribes a client to updates relevant to the requestor's account,\ + \ as identified by the input token. The supplied url will be used as the\ + \ delivery address for response payloads" + operationId: subscribe_3 parameters: - name: subscriptionId in: path @@ -830,10 +830,10 @@ paths: $ref: '#/components/schemas/SubscriptionResponse' /repeatableparameter: post: - description: subscribes a client to updates relevant to the requestor's account, - as identified by the input token. The supplied url will be used as the delivery - address for response payloads - operationId: subscribe_3 + description: "subscribes a client to updates relevant to the requestor's account,\ + \ as identified by the input token. The supplied url will be used as the\ + \ delivery address for response payloads" + operationId: subscribe_2 parameters: - name: subscriptionId in: path @@ -934,13 +934,22 @@ paths: '*/*': schema: $ref: '#/components/schemas/User' - /requestbodymethodpriority: + /methodWithRequestBodyAndTwoParameters: post: summary: Create user description: This can only be done by the logged in user. - operationId: methodWithRequestBodyAndTwoParameters + operationId: methodWithRequestBodyAndTwoParameters_3 + parameters: + - name: name + in: query + schema: + type: string + - name: code + in: query + schema: + type: string requestBody: - description: Created user object on Method + description: Created user object content: '*/*': schema: @@ -951,39 +960,32 @@ paths: description: default response content: '*/*': {} - /requestbodyparameterpriority: - post: + /methodWithRequestBodyWithoutContentWithoutImplementation: + get: summary: Create user description: This can only be done by the logged in user. - operationId: methodWithRequestBodyAndTwoParameters_1 + operationId: methodWithRequestBodyWithoutContentWithoutImplementation_1 requestBody: - description: Created user object inside Parameter + description: Created user object content: '*/*': schema: - $ref: '#/components/schemas/User' + type: string + description: User description + example: User Description required: true responses: default: description: default response content: '*/*': {} - /methodWithRequestBodyAndTwoParameters: + /requestbodymethodpriority: post: summary: Create user description: This can only be done by the logged in user. - operationId: methodWithRequestBodyAndTwoParameters_2 - parameters: - - name: name - in: query - schema: - type: string - - name: code - in: query - schema: - type: string + operationId: methodWithRequestBodyAndTwoParameters_1 requestBody: - description: Created user object + description: Created user object on Method content: '*/*': schema: @@ -994,13 +996,13 @@ paths: description: default response content: '*/*': {} - /methodWithRequestBodyWithoutContent: - get: + /requestbodyparameterpriority: + post: summary: Create user description: This can only be done by the logged in user. - operationId: methodWithRequestBodyWithoutContent + operationId: methodWithRequestBodyAndTwoParameters_2 requestBody: - description: Created user object + description: Created user object inside Parameter content: '*/*': schema: @@ -1011,20 +1013,21 @@ paths: description: default response content: '*/*': {} - /methodWithRequestBodyWithoutContentWithoutImplementation: - get: - summary: Create user - description: This can only be done by the logged in user. - operationId: methodWithRequestBodyWithoutContentWithoutImplementation + /methodWithOneSimpleRequestBody: + delete: + summary: Delete pet + description: Deleting pet. + operationId: methodWithOneSimpleRequestBody requestBody: - description: Created user object content: - '*/*': + application/json: schema: - type: string - description: User description - example: User Description - required: true + type: integer + format: int32 + application/xml: + schema: + type: integer + format: int32 responses: default: description: default response @@ -1045,25 +1048,6 @@ paths: description: default response content: '*/*': {} - /methodWithoutRequestBodyAndTwoParameters: - delete: - summary: Delete user - description: This can only be done by the logged in user. - operationId: methodWithoutRequestBodyAndTwoParameters - parameters: - - name: name - in: query - schema: - type: string - - name: code - in: query - schema: - type: string - responses: - default: - description: default response - content: - '*/*': {} /methodWithRequestBodyWithoutAnnotationAndTwoConsumes: put: summary: Modify pet @@ -1082,19 +1066,18 @@ paths: description: default response content: '*/*': {} - /methodWithTwoRequestBodyWithoutAnnotationAndTwoConsumes: - post: - summary: Create pet - description: Creating pet. - operationId: methodWithTwoRequestBodyWithoutAnnotationAndTwoConsumes + /methodWithRequestBodyWithoutContent: + get: + summary: Create user + description: This can only be done by the logged in user. + operationId: methodWithRequestBodyWithoutContent requestBody: + description: Created user object content: - application/json: - schema: - $ref: '#/components/schemas/Pet' - application/xml: + '*/*': schema: - $ref: '#/components/schemas/Pet' + $ref: '#/components/schemas/User' + required: true responses: default: description: default response @@ -1119,21 +1102,38 @@ paths: description: default response content: '*/*': {} - /methodWithOneSimpleRequestBody: - delete: - summary: Delete pet - description: Deleting pet. - operationId: methodWithOneSimpleRequestBody + /methodWithTwoRequestBodyWithoutAnnotationAndTwoConsumes: + post: + summary: Create pet + description: Creating pet. + operationId: methodWithTwoRequestBodyWithoutAnnotationAndTwoConsumes requestBody: content: application/json: schema: - type: integer - format: int32 + $ref: '#/components/schemas/Pet' application/xml: schema: - type: integer - format: int32 + $ref: '#/components/schemas/Pet' + responses: + default: + description: default response + content: + '*/*': {} + /methodWithoutRequestBodyAndTwoParameters: + delete: + summary: Delete user + description: This can only be done by the logged in user. + operationId: methodWithoutRequestBodyAndTwoParameters + parameters: + - name: name + in: query + schema: + type: string + - name: code + in: query + schema: + type: string responses: default: description: default response @@ -1334,10 +1334,6 @@ paths: '*/*': {} components: schemas: - SecondSampleResponseSchema: - type: object - GenericError: - type: object Category: type: object properties: @@ -1348,6 +1344,47 @@ components: type: string xml: name: Category + Pet: + type: object + properties: + id: + type: integer + format: int64 + category: + $ref: '#/components/schemas/Category' + name: + type: string + photoUrls: + type: array + xml: + wrapped: true + items: + type: string + xml: + name: photoUrl + tags: + type: array + xml: + wrapped: true + items: + $ref: '#/components/schemas/Tag' + status: + type: string + description: pet status in the store + enum: + - "available,pending,sold" + xml: + name: Pet + Tag: + type: object + properties: + id: + type: integer + format: int64 + name: + type: string + xml: + name: Tag User: type: object properties: @@ -1372,54 +1409,17 @@ components: format: int32 xml: name: User - SampleResponseSchema: - type: object SubscriptionResponse: type: object properties: subscriptionId: type: string - Tag: + SampleResponseSchema: type: object - properties: - id: - type: integer - format: int64 - name: - type: string - xml: - name: Tag - Pet: + SecondSampleResponseSchema: + type: object + GenericError: type: object - properties: - id: - type: integer - format: int64 - category: - $ref: '#/components/schemas/Category' - name: - type: string - photoUrls: - type: array - xml: - wrapped: true - items: - type: string - xml: - name: photoUrl - tags: - type: array - xml: - wrapped: true - items: - $ref: '#/components/schemas/Tag' - status: - type: string - description: pet status in the store - enum: - - available,pending,sold - xml: - name: Pet securitySchemes: myOauth2Security: type: oauth2 From f1ec88387316c823978250756bc80565da012d81 Mon Sep 17 00:00:00 2001 From: frantuma Date: Mon, 12 Jun 2023 11:57:30 +0200 Subject: [PATCH 042/131] OAS 3.1 - minor tweaks and tests --- .../swagger/v3/oas/annotations/info/Info.java | 2 +- .../v3/oas/annotations/info/License.java | 2 +- .../v3/oas/annotations/media/ArraySchema.java | 12 +- .../v3/oas/annotations/media/Content.java | 20 +- .../annotations/media/DependentRequired.java | 2 +- .../media/DependentRequiredMap.java | 2 +- .../annotations/media/DependentSchema.java | 2 +- .../media/DiscriminatorMapping.java | 2 +- .../v3/oas/annotations/media/Schema.java | 40 +-- .../v3/core/jackson/ModelResolver.java | 1 - .../v3/core/util/AnnotationsUtils.java | 56 ++++ .../v3/plugins/gradle/tasks/ResolveTask.java | 2 +- .../integration/GenericOpenApiContext.java | 6 +- .../oas/integration/SwaggerConfiguration.java | 6 +- .../integration/api/OpenAPIConfiguration.java | 4 +- .../v3/jaxrs2/integration/SwaggerLoader.java | 2 +- .../io/swagger/v3/jaxrs2/PetResourceTest.java | 1 - .../java/io/swagger/v3/jaxrs2/ReaderTest.java | 265 ++++++++++++++++++ .../v3/jaxrs2/petstore31/Category.java | 35 +++ .../io/swagger/v3/jaxrs2/petstore31/Pet.java | 91 ++++++ .../swagger/v3/jaxrs2/petstore31/PetData.java | 131 +++++++++ .../v3/jaxrs2/petstore31/PetResource.java | 147 ++++++++++ .../io/swagger/v3/jaxrs2/petstore31/Tag.java | 28 ++ .../io/swagger/v3/jaxrs2/petstore31/User.java | 91 ++++++ .../swagger/v3/plugin/maven/SwaggerMojo.java | 2 +- .../swagger/v3/oas/models/media/Schema.java | 2 +- 26 files changed, 898 insertions(+), 56 deletions(-) create mode 100644 modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore31/Category.java create mode 100644 modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore31/Pet.java create mode 100644 modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore31/PetData.java create mode 100644 modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore31/PetResource.java create mode 100644 modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore31/Tag.java create mode 100644 modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore31/User.java diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/Info.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/Info.java index 8daa5f441f..4fd9abb706 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/Info.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/Info.java @@ -72,7 +72,7 @@ /** * A short API summary. * - * @since 2.2.4 / OpenAPI 3.1 + * @since 2.2.12 / OpenAPI 3.1 * @return API summary **/ @OpenAPI31 diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/License.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/License.java index 35f821e0ea..8beb07362e 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/License.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/info/License.java @@ -42,7 +42,7 @@ /** * An identifier for a License instance. * - * @since 2.2.4 / OpenAPI 3.1 + * @since 2.2.12 / OpenAPI 3.1 * @return the identifier of the license **/ @OpenAPI31 diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/ArraySchema.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/ArraySchema.java index 9b1248c02e..186ade23f7 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/ArraySchema.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/ArraySchema.java @@ -37,7 +37,7 @@ /** * The schemas of the items in the array * - * @since 2.2.4 + * @since 2.2.12 * * @return items */ @@ -92,7 +92,7 @@ /** * Specifies contains constrictions expressions. * - * @since 2.2.4 / OpenAPI 3.1 + * @since 2.2.12 / OpenAPI 3.1 * @return contains expression. */ @OpenAPI31 @@ -101,7 +101,7 @@ /** * Provides max contains related to this schema * - * @since 2.2.4 / OpenAPI 3.1 + * @since 2.2.12 / OpenAPI 3.1 * @return max contains */ @OpenAPI31 @@ -110,7 +110,7 @@ /** * Provides min contains related to this schema * - * @since 2.2.4 / OpenAPI 3.1 + * @since 2.2.12 / OpenAPI 3.1 * @return min contains */ @OpenAPI31 @@ -119,7 +119,7 @@ /** * Provides unevaluted items to this schema * - * @since 2.2.4 / OpenAPI 3.1 + * @since 2.2.12 / OpenAPI 3.1 * @return unevaluated items */ @OpenAPI31 @@ -128,7 +128,7 @@ /** * Provides prefix items to this schema * - * @since 2.2.4 / OpenAPI 3.1 + * @since 2.2.12 / OpenAPI 3.1 * @return prefixItems */ @OpenAPI31 diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Content.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Content.java index 0b09736be6..da4032e8ee 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Content.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Content.java @@ -88,7 +88,7 @@ /** * Subschemas to be applied for a given condition. * - * @since 2.2.4 / OpenAPI 3.1 + * @since 2.2.12 / OpenAPI 3.1 * @return list of dependent schemas. */ @OpenAPI31 @@ -97,7 +97,7 @@ /** * Provides the content schema related to this schema * - * @since 2.2.4 / OpenAPI 3.1 + * @since 2.2.12 / OpenAPI 3.1 * @return content schema */ @OpenAPI31 @@ -106,7 +106,7 @@ /** * Provides property names related to this schema * - * @since 2.2.4 / OpenAPI 3.1 + * @since 2.2.12 / OpenAPI 3.1 * @return proeprty names */ @OpenAPI31 @@ -115,7 +115,7 @@ /** * Provides the if sub schema related to this schema * - * @since 2.2.4 / OpenAPI 3.1 + * @since 2.2.12 / OpenAPI 3.1 * @return if schema */ @OpenAPI31 @@ -124,7 +124,7 @@ /** * Provides the then sub schema related to this schema * - * @since 2.2.4 / OpenAPI 3.1 + * @since 2.2.12 / OpenAPI 3.1 * @return then schema */ @OpenAPI31 @@ -133,7 +133,7 @@ /** * Provides the else sub schema related to this schema * - * @since 2.2.4 / OpenAPI 3.1 + * @since 2.2.12 / OpenAPI 3.1 * @return else schema */ @OpenAPI31 @@ -142,7 +142,7 @@ /** * Set schemas to validate according a given condition. * - * @since 2.2.4 / OpenAPI 3.1 + * @since 2.2.12 / OpenAPI 3.1 * @return not schema to be validated **/ Schema not() default @Schema(); @@ -150,7 +150,7 @@ /** * Provides the oneOf sub schemas related to this schema. * - * @since 2.2.4 / OpenAPI 3.1 + * @since 2.2.12 / OpenAPI 3.1 * @return oneOf sub schemas **/ Schema[] oneOf() default {}; @@ -158,7 +158,7 @@ /** * Provides the anyOf sub schemas related to this schema. * - * @since 2.2.4 / OpenAPI 3.1 + * @since 2.2.12 / OpenAPI 3.1 * @return anyOf sub schemas **/ Schema[] anyOf() default {}; @@ -166,7 +166,7 @@ /** * Provides the allOf sub schemas related to this schema.. * - * @since 2.2.4 / OpenAPI 3.1 + * @since 2.2.12 / OpenAPI 3.1 * @return allOf sub schemas **/ Schema[] allOf() default {}; diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentRequired.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentRequired.java index a6c2bf11d6..260b9d8bdb 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentRequired.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentRequired.java @@ -19,7 +19,7 @@ * * @see Schema * - * @since 2.2.4 / OpenAPI 3.1 + * @since 2.2.12 / OpenAPI 3.1 **/ @Target({FIELD, METHOD, PARAMETER, TYPE, ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentRequiredMap.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentRequiredMap.java index 9edc855331..e70fd1e5b6 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentRequiredMap.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentRequiredMap.java @@ -16,7 +16,7 @@ /** * Container for repeatable {@link DependentRequired} annotation * - * @since 2.2.4 / OpenAPI 3.1 + * @since 2.2.12 / OpenAPI 3.1 * @see DependentRequired */ @Target({FIELD, METHOD, PARAMETER, TYPE, ANNOTATION_TYPE}) diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentSchema.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentSchema.java index ffa479b3f9..240bfb7237 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentSchema.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DependentSchema.java @@ -19,7 +19,7 @@ * * @see Schema * - * @since 2.2.4 / OpenAPI 3.1 + * @since 2.2.12 / OpenAPI 3.1 **/ @Target({FIELD, METHOD, PARAMETER, TYPE, ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DiscriminatorMapping.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DiscriminatorMapping.java index 89e662fe6f..42b875a642 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DiscriminatorMapping.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/DiscriminatorMapping.java @@ -41,7 +41,7 @@ /** * The list of optional extensions * - * @since 2.2.4 / OpenAPI 3.1 + * @since 2.2.12 / OpenAPI 3.1 * @return an optional array of extensions */ @OpenAPI31 diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Schema.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Schema.java index 345f4c0441..776d2f9f54 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Schema.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Schema.java @@ -340,14 +340,14 @@ /** * List of schema types * - * @since 2.2.4 / OpenAPI 3.1 + * @since 2.2.12 / OpenAPI 3.1 * @return array of types */ @OpenAPI31 String[] types() default {}; /** - * @since 2.2.4 / OpenAPI 3.1 + * @since 2.2.12 / OpenAPI 3.1 * * OAS 3.1 version of `exclusiveMaximum`, accepting a numeric value * @@ -359,7 +359,7 @@ /** * Provides an exclusive minimum for a expressing exclusive range. * - * @since 2.2.4 / OpenAPI 3.1 + * @since 2.2.12 / OpenAPI 3.1 * @return an exclusive minimum. */ @OpenAPI31 @@ -375,7 +375,7 @@ /** * Provides the $id related to this schema. * - * @since 2.2.4 / OpenAPI 3.1 + * @since 2.2.12 / OpenAPI 3.1 * @return the $id of schema */ @OpenAPI31 @@ -384,7 +384,7 @@ /** * Provides Json Schema dialect where the schema is valid. * - * @since 2.2.4 / OpenAPI 3.1 + * @since 2.2.12 / OpenAPI 3.1 * @return json schema dialect */ @OpenAPI31 @@ -393,7 +393,7 @@ /** * Provides the $anchor related to schema * - * @since 2.2.4 / OpenAPI 3.1 + * @since 2.2.12 / OpenAPI 3.1 * @return $anchor schema */ @OpenAPI31 @@ -402,7 +402,7 @@ /** * Provides the content encoding related to this schema * - * @since 2.2.4 / OpenAPI 3.1 + * @since 2.2.12 / OpenAPI 3.1 * @return content encoding */ @OpenAPI31 @@ -411,7 +411,7 @@ /** * Provides the content media type related to this schema * - * @since 2.2.4 / OpenAPI 3.1 + * @since 2.2.12 / OpenAPI 3.1 * @return content media type */ @OpenAPI31 @@ -420,7 +420,7 @@ /** * Provides the content schema related to this schema * - * @since 2.2.4 / OpenAPI 3.1 + * @since 2.2.12 / OpenAPI 3.1 * @return content schema */ @OpenAPI31 @@ -429,7 +429,7 @@ /** * Provides property names related to this schema * - * @since 2.2.4 / OpenAPI 3.1 + * @since 2.2.12 / OpenAPI 3.1 * @return property names */ @OpenAPI31 @@ -464,7 +464,7 @@ /** * Provides the if sub schema related to this schema * - * @since 2.2.4 / OpenAPI 3.1 + * @since 2.2.12 / OpenAPI 3.1 * @return if sub schema */ @OpenAPI31 @@ -473,7 +473,7 @@ /** * Provides the else sub schema related to this schema * - * @since 2.2.4 / OpenAPI 3.1 + * @since 2.2.12 / OpenAPI 3.1 * @return else sub schema */ @OpenAPI31 @@ -482,7 +482,7 @@ /** * Provides the then sub schema related to this schema * - * @since 2.2.4 / OpenAPI 3.1 + * @since 2.2.12 / OpenAPI 3.1 * @return then sub schema */ @OpenAPI31 @@ -491,7 +491,7 @@ /** * Provides $comment related to this schema * - * @since 2.2.4 / OpenAPI 3.1 + * @since 2.2.12 / OpenAPI 3.1 * @return $comment related to schema */ @OpenAPI31 @@ -501,7 +501,7 @@ * Provides a list of examples related to this schema * @return list of examples */ - Class[] examples() default {}; + Class[] exampleClasses() default {}; /** * Allows to specify the additionalProperties value @@ -539,7 +539,7 @@ enum RequiredMode { /** * Allows to specify the dependentRequired value ** - * @since 2.2.4 / OpenAPI 3.1 + * @since 2.2.12 / OpenAPI 3.1 * @return the list of DependentRequire annotations * */ @@ -549,7 +549,7 @@ enum RequiredMode { /** * Allows to specify the dependentSchemas value providing a Class to be resolved into a Schema * - * @since 2.2.4 / OpenAPI 3.1 + * @since 2.2.12 / OpenAPI 3.1 * @return the list of dependentSchemas annotations * */ @@ -559,7 +559,7 @@ enum RequiredMode { /** * Provides pattern properties to this schema * - * @since 2.2.4 / OpenAPI 3.1 + * @since 2.2.12 / OpenAPI 3.1 * @return pattern properties */ @OpenAPI31 @@ -575,7 +575,7 @@ enum RequiredMode { /** * Provides unevaluated properties to this schema * - * @since 2.2.4 / OpenAPI 3.1 + * @since 2.2.12 / OpenAPI 3.1 * @return unevaluated properties */ @OpenAPI31 @@ -593,7 +593,7 @@ enum RequiredMode { /** * Provides value restricted to this schema. * - * @since 2.2.4 / OpenAPI 3.1 + * @since 2.2.12 / OpenAPI 3.1 * @return const value */ @OpenAPI31 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 b946a64c2e..8550e83500 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 @@ -39,7 +39,6 @@ import io.swagger.v3.core.util.ReferenceTypeUtils; import io.swagger.v3.core.util.PrimitiveType; import io.swagger.v3.core.util.ReflectionUtils; -import io.swagger.v3.core.util.Yaml31; import io.swagger.v3.oas.annotations.Hidden; import io.swagger.v3.oas.annotations.StringToClassMapItem; import io.swagger.v3.oas.annotations.media.DependentRequired; diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java index 8608fe1b4c..133ad88a6d 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java @@ -2157,6 +2157,14 @@ public Extension[] extensions() { return patch.extensions(); } + @Override + public Class[] prefixItems() { + if (master.prefixItems().length > 0 || patch.prefixItems().length == 0) { + return master.prefixItems(); + } + return patch.prefixItems(); + } + @Override public String[] types() { if (master.types().length > 0 || patch.types().length == 0) { @@ -2181,6 +2189,14 @@ public int exclusiveMinimumValue() { return patch.exclusiveMinimumValue(); } + @Override + public Class contains() { + if (!master.contains().equals(Void.class) || patch.contains().equals(Void.class)) { + return master.contains(); + } + return patch.contains(); + } + @Override public String $id() { if (StringUtils.isNotBlank(master.$id()) || StringUtils.isBlank(patch.$id())) { @@ -2237,6 +2253,38 @@ public Class propertyNames() { return patch.propertyNames(); } + @Override + public int maxContains() { + if (master.maxContains() != 0 || patch.maxContains() == 0) { + return master.maxContains(); + } + return patch.maxContains(); + } + + @Override + public int minContains() { + if (master.minContains() != 0 || patch.minContains() == 0) { + return master.minContains(); + } + return patch.minContains(); + } + + @Override + public Class additionalItems() { + if (!master.additionalItems().equals(Void.class) || patch.additionalItems().equals(Void.class)) { + return master.additionalItems(); + } + return patch.additionalItems(); + } + + @Override + public Class unevaluatedItems() { + if (!master.unevaluatedItems().equals(Void.class) || patch.unevaluatedItems().equals(Void.class)) { + return master.unevaluatedItems(); + } + return patch.unevaluatedItems(); + } + @Override public Class _if() { if (!master._if().equals(Void.class) || patch._if().equals(Void.class)) { @@ -2277,6 +2325,14 @@ public String[] examples() { return patch.examples(); } + @Override + public Class[] exampleClasses() { + if (master.exampleClasses().length > 0 || patch.exampleClasses().length == 0) { + return master.exampleClasses(); + } + return patch.exampleClasses(); + } + @Override public String _const() { if (!master._const().equals(Void.class) || patch._const().equals(Void.class)) { diff --git a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/tasks/ResolveTask.java b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/tasks/ResolveTask.java index 9a64f11b0f..b1ba974c50 100644 --- a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/tasks/ResolveTask.java +++ b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/tasks/ResolveTask.java @@ -336,7 +336,7 @@ public void setOpenAPI31(Boolean openAPI31) { } /** - * @since 2.2.4 + * @since 2.2.12 */ @Input @Optional diff --git a/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/GenericOpenApiContext.java b/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/GenericOpenApiContext.java index 2156eba7af..d16ef22849 100644 --- a/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/GenericOpenApiContext.java +++ b/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/GenericOpenApiContext.java @@ -305,14 +305,14 @@ public T openAPI31(Boolean openAPI31) { } /** - * @since 2.2.4 + * @since 2.2.12 */ public Boolean isConvertToOpenAPI31() { return convertToOpenAPI31; } /** - * @since 2.2.4 + * @since 2.2.12 */ public void setConvertToOpenAPI31(Boolean convertToOpenAPI31) { this.convertToOpenAPI31 = convertToOpenAPI31; @@ -322,7 +322,7 @@ public void setConvertToOpenAPI31(Boolean convertToOpenAPI31) { } /** - * @since 2.2.4 + * @since 2.2.12 */ public T convertToOpenAPI31(Boolean convertToOpenAPI31) { this.setConvertToOpenAPI31(convertToOpenAPI31); diff --git a/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/SwaggerConfiguration.java b/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/SwaggerConfiguration.java index 65d1ce6904..c3ebd46080 100644 --- a/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/SwaggerConfiguration.java +++ b/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/SwaggerConfiguration.java @@ -309,14 +309,14 @@ public SwaggerConfiguration openAPI31(Boolean openAPI31) { } /** - * @since 2.2.4 + * @since 2.2.12 */ public Boolean isConvertToOpenAPI31() { return convertToOpenAPI31; } /** - * @since 2.2.4 + * @since 2.2.12 */ public void setConvertToOpenAPI31(Boolean convertToOpenAPI31) { this.convertToOpenAPI31 = convertToOpenAPI31; @@ -326,7 +326,7 @@ public void setConvertToOpenAPI31(Boolean convertToOpenAPI31) { } /** - * @since 2.2.4 + * @since 2.2.12 */ public SwaggerConfiguration convertToOpenAPI31(Boolean convertToOpenAPI31) { this.setConvertToOpenAPI31(convertToOpenAPI31); diff --git a/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/api/OpenAPIConfiguration.java b/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/api/OpenAPIConfiguration.java index f849241c6b..be6ece526a 100644 --- a/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/api/OpenAPIConfiguration.java +++ b/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/api/OpenAPIConfiguration.java @@ -50,12 +50,12 @@ public interface OpenAPIConfiguration { Boolean isAlwaysResolveAppPath(); /** - * @since 2.2.4 + * @since 2.2.12 */ Boolean isOpenAPI31(); /** - * @since 2.2.4 + * @since 2.2.12 */ Boolean isConvertToOpenAPI31(); } diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/SwaggerLoader.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/SwaggerLoader.java index 98df764c6d..d54429c39e 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/SwaggerLoader.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/SwaggerLoader.java @@ -213,7 +213,7 @@ public void setOpenAPI31(Boolean openAPI31) { } /** - * @since 2.2.4 + * @since 2.2.12 */ public void setConvertToOpenAPI31(Boolean convertToOpenAPI31) { this.convertToOpenAPI31 = convertToOpenAPI31; diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/PetResourceTest.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/PetResourceTest.java index 6496b1072d..7d003965dc 100644 --- a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/PetResourceTest.java +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/PetResourceTest.java @@ -1,6 +1,5 @@ package io.swagger.v3.jaxrs2; -import io.swagger.v3.core.util.Yaml31; import io.swagger.v3.jaxrs2.annotations.AbstractAnnotationTest; import io.swagger.v3.jaxrs2.matchers.SerializationMatchers; import io.swagger.v3.jaxrs2.petstore.EmptyPetResource; diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java index cded1b807f..2caca607a1 100644 --- a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java @@ -13,6 +13,7 @@ import io.swagger.v3.core.model.ApiDescription; import io.swagger.v3.core.util.PrimitiveType; import io.swagger.v3.jaxrs2.matchers.SerializationMatchers; +import io.swagger.v3.jaxrs2.petstore31.PetResource; import io.swagger.v3.jaxrs2.resources.ResponseReturnTypeResource; import io.swagger.v3.jaxrs2.resources.SchemaPropertiesResource; import io.swagger.v3.jaxrs2.resources.SingleExampleResource; @@ -84,6 +85,7 @@ import io.swagger.v3.jaxrs2.resources.rs.ProcessTokenRestService; import io.swagger.v3.jaxrs2.resources.ticket3624.Service; import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.integration.SwaggerConfiguration; import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.ExternalDocumentation; import io.swagger.v3.oas.models.OpenAPI; @@ -3093,4 +3095,267 @@ public void test4412PathWildcards() { " type: string"; SerializationMatchers.assertEqualsToYaml(openAPI, yaml); } + + @Test + public void testOas31Petstore() { + SwaggerConfiguration config = new SwaggerConfiguration().openAPI31(true).openAPI(new OpenAPI()); + Reader reader = new Reader(config); + + OpenAPI openAPI = reader.read(PetResource.class); + String yaml = "openapi: 3.1.0\n" + + "paths:\n" + + " /pet:\n" + + " put:\n" + + " summary: Update an existing pet\n" + + " operationId: updatePet\n" + + " requestBody:\n" + + " description: Pet object that needs to be added to the store\n" + + " content:\n" + + " application/json:\n" + + " schema:\n" + + " $ref: '#/components/schemas/Pet'\n" + + " required: true\n" + + " responses:\n" + + " \"400\":\n" + + " description: Invalid ID supplied\n" + + " \"404\":\n" + + " description: Pet not found\n" + + " \"405\":\n" + + " description: Validation exception\n" + + " post:\n" + + " summary: Add a new pet to the store\n" + + " operationId: addPet\n" + + " requestBody:\n" + + " description: Pet object that needs to be added to the store\n" + + " content:\n" + + " application/json:\n" + + " schema:\n" + + " $ref: '#/components/schemas/Pet'\n" + + " application/xml:\n" + + " schema:\n" + + " $ref: '#/components/schemas/Pet'\n" + + " required: true\n" + + " responses:\n" + + " \"405\":\n" + + " description: Invalid input\n" + + " /pet/bodyid:\n" + + " post:\n" + + " summary: Add a new pet to the store passing an integer with generic parameter\n" + + " annotation\n" + + " operationId: addPetByInteger\n" + + " requestBody:\n" + + " description: Pet object that needs to be added to the store\n" + + " content:\n" + + " application/json:\n" + + " schema:\n" + + " type: integer\n" + + " format: int32\n" + + " application/xml:\n" + + " schema:\n" + + " type: integer\n" + + " format: int32\n" + + " required: true\n" + + " responses:\n" + + " \"405\":\n" + + " description: Invalid input\n" + + " /pet/bodyidnoannotation:\n" + + " post:\n" + + " summary: Add a new pet to the store passing an integer without parameter annotation\n" + + " operationId: addPetByIntegerNoAnnotation\n" + + " requestBody:\n" + + " content:\n" + + " application/json:\n" + + " schema:\n" + + " type: integer\n" + + " format: int32\n" + + " application/xml:\n" + + " schema:\n" + + " type: integer\n" + + " format: int32\n" + + " responses:\n" + + " \"405\":\n" + + " description: Invalid input\n" + + " /pet/bodynoannotation:\n" + + " post:\n" + + " summary: Add a new pet to the store no annotation\n" + + " operationId: addPetNoAnnotation\n" + + " requestBody:\n" + + " content:\n" + + " application/json:\n" + + " schema:\n" + + " $ref: '#/components/schemas/Pet'\n" + + " application/xml:\n" + + " schema:\n" + + " $ref: '#/components/schemas/Pet'\n" + + " responses:\n" + + " \"405\":\n" + + " description: Invalid input\n" + + " /pet/findByStatus:\n" + + " get:\n" + + " summary: Finds Pets by status\n" + + " description: Multiple status values can be provided with comma separated strings\n" + + " operationId: findPetsByStatus\n" + + " parameters:\n" + + " - name: status\n" + + " in: query\n" + + " description: Status values that need to be considered for filter\n" + + " required: true\n" + + " schema:\n" + + " type: string\n" + + " - name: skip\n" + + " in: query\n" + + " schema:\n" + + " type: integer\n" + + " format: int32\n" + + " - name: limit\n" + + " in: query\n" + + " schema:\n" + + " type: integer\n" + + " format: int32\n" + + " responses:\n" + + " default:\n" + + " content:\n" + + " application/json:\n" + + " schema:\n" + + " $ref: '#/components/schemas/Pet'\n" + + " \"400\":\n" + + " description: Invalid status value\n" + + " /pet/findByTags:\n" + + " get:\n" + + " summary: Finds Pets by tags\n" + + " description: \"Multiple tags can be provided with comma separated strings. Use\\\n" + + " \\ tag1, tag2, tag3 for testing.\"\n" + + " operationId: findPetsByTags\n" + + " parameters:\n" + + " - name: tags\n" + + " in: query\n" + + " description: Tags to filter by\n" + + " required: true\n" + + " schema:\n" + + " type: string\n" + + " responses:\n" + + " default:\n" + + " description: Pets matching criteria\n" + + " content:\n" + + " application/json:\n" + + " schema:\n" + + " $ref: '#/components/schemas/Pet'\n" + + " \"400\":\n" + + " description: Invalid tag value\n" + + " deprecated: true\n" + + " /pet/{petId}:\n" + + " get:\n" + + " summary: Find pet by ID\n" + + " description: Returns a pet when 0 < ID <= 10. ID > 10 or nonintegers will simulate\n" + + " API error conditions\n" + + " operationId: getPetById\n" + + " parameters:\n" + + " - name: petId\n" + + " in: path\n" + + " description: ID of pet that needs to be fetched\n" + + " required: true\n" + + " schema:\n" + + " type: integer\n" + + " format: int64\n" + + " responses:\n" + + " default:\n" + + " description: The pet\n" + + " content:\n" + + " application/json:\n" + + " schema:\n" + + " $ref: '#/components/schemas/Pet'\n" + + " application/xml:\n" + + " schema:\n" + + " $ref: '#/components/schemas/Pet'\n" + + " \"400\":\n" + + " description: Invalid ID supplied\n" + + " \"404\":\n" + + " description: Pet not found\n" + + "components:\n" + + " schemas:\n" + + " Category:\n" + + " properties:\n" + + " id:\n" + + " type: integer\n" + + " format: int64\n" + + " name:\n" + + " type: string\n" + + " xml:\n" + + " name: Category\n" + + " IfSchema:\n" + + " deprecated: true\n" + + " description: if schema\n" + + " properties:\n" + + " foo:\n" + + " type: string\n" + + " const: foo\n" + + " bar:\n" + + " type: integer\n" + + " format: int32\n" + + " exclusiveMaximum: 2\n" + + " foobar:\n" + + " type:\n" + + " - integer\n" + + " - string\n" + + " - object\n" + + " format: int32\n" + + " Pet:\n" + + " properties:\n" + + " id:\n" + + " type: integer\n" + + " format: int64\n" + + " category:\n" + + " $ref: '#/components/schemas/Category'\n" + + " name:\n" + + " type: string\n" + + " photoUrls:\n" + + " type: array\n" + + " items:\n" + + " type: string\n" + + " xml:\n" + + " name: photoUrl\n" + + " xml:\n" + + " wrapped: true\n" + + " tags:\n" + + " type: array\n" + + " items:\n" + + " $ref: '#/components/schemas/Tag'\n" + + " xml:\n" + + " wrapped: true\n" + + " status:\n" + + " type: string\n" + + " if:\n" + + " deprecated: true\n" + + " description: if schema\n" + + " properties:\n" + + " foo:\n" + + " type: string\n" + + " const: foo\n" + + " bar:\n" + + " type: integer\n" + + " format: int32\n" + + " exclusiveMaximum: 2\n" + + " foobar:\n" + + " type:\n" + + " - integer\n" + + " - string\n" + + " - object\n" + + " format: int32\n" + + " $id: idtest\n" + + " description: pet status in the store\n" + + " enum:\n" + + " - \"available,pending,sold\"\n" + + " xml:\n" + + " name: Pet\n" + + " Tag:\n" + + " properties:\n" + + " id:\n" + + " type: integer\n" + + " format: int64\n" + + " name:\n" + + " type: string\n" + + " xml:\n" + + " name: Tag\n"; + SerializationMatchers.assertEqualsToYaml31(openAPI, yaml); + } } diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore31/Category.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore31/Category.java new file mode 100644 index 0000000000..33431f5446 --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore31/Category.java @@ -0,0 +1,35 @@ +package io.swagger.v3.jaxrs2.petstore31; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement(name = "Category") +public class Category { + private long id; + private String name; + + @XmlElement(name = "id") + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + @XmlElement(name = "name") + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Category() { + } + + public Category(String name) { + this.name = name; + } +} diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore31/Pet.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore31/Pet.java new file mode 100644 index 0000000000..cb553fe51b --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore31/Pet.java @@ -0,0 +1,91 @@ +package io.swagger.v3.jaxrs2.petstore31; + +import io.swagger.v3.oas.annotations.media.Schema; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; +import javax.xml.bind.annotation.XmlRootElement; +import java.util.ArrayList; +import java.util.List; + +@XmlRootElement(name = "Pet") +public class Pet { + private long id; + private Category category; + private String name; + private List photoUrls = new ArrayList(); + private List tags = new ArrayList(); + private String status; + + @XmlElement(name = "id") + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + @XmlElement(name = "category") + public Category getCategory() { + return category; + } + + public void setCategory(Category category) { + this.category = category; + } + + @XmlElement(name = "name") + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @XmlElementWrapper(name = "photoUrls") + @XmlElement(name = "photoUrl") + public List getPhotoUrls() { + return photoUrls; + } + + public void setPhotoUrls(List photoUrls) { + this.photoUrls = photoUrls; + } + + @XmlElementWrapper(name = "tags") + @XmlElement(name = "tag") + public List getTags() { + return tags; + } + + public void setTags(List tags) { + this.tags = tags; + } + + @XmlElement(name = "status") + @Schema( + description = "pet status in the store", + allowableValues = "available,pending,sold", + $id = "idtest", + _if = IfSchema.class) + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + @Schema(description = "if schema", deprecated = true) + static class IfSchema { + @Schema(_const = "foo") + public String foo; + @Schema(exclusiveMaximumValue = 2) + public int bar; + + @Schema(types = {"string", "object"}) + public int foobar; + } +} diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore31/PetData.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore31/PetData.java new file mode 100644 index 0000000000..cd03637c58 --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore31/PetData.java @@ -0,0 +1,131 @@ +package io.swagger.v3.jaxrs2.petstore31; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +public class PetData { + static List pets = new ArrayList(); + static List categories = new ArrayList(); + + static { + categories.add(createCategory(1, "Dogs")); + categories.add(createCategory(2, "Cats")); + categories.add(createCategory(3, "Rabbits")); + categories.add(createCategory(4, "Lions")); + + pets.add(createPet(1, categories.get(1), "Cat 1", new String[]{ + "url1", "url2"}, new String[]{"tag1", "tag2"}, "available")); + pets.add(createPet(2, categories.get(1), "Cat 2", new String[]{ + "url1", "url2"}, new String[]{"tag2", "tag3"}, "available")); + pets.add(createPet(3, categories.get(1), "Cat 3", new String[]{ + "url1", "url2"}, new String[]{"tag3", "tag4"}, "pending")); + + pets.add(createPet(4, categories.get(0), "Dog 1", new String[]{ + "url1", "url2"}, new String[]{"tag1", "tag2"}, "available")); + pets.add(createPet(5, categories.get(0), "Dog 2", new String[]{ + "url1", "url2"}, new String[]{"tag2", "tag3"}, "sold")); + pets.add(createPet(6, categories.get(0), "Dog 3", new String[]{ + "url1", "url2"}, new String[]{"tag3", "tag4"}, "pending")); + + pets.add(createPet(7, categories.get(3), "Lion 1", new String[]{ + "url1", "url2"}, new String[]{"tag1", "tag2"}, "available")); + pets.add(createPet(8, categories.get(3), "Lion 2", new String[]{ + "url1", "url2"}, new String[]{"tag2", "tag3"}, "available")); + pets.add(createPet(9, categories.get(3), "Lion 3", new String[]{ + "url1", "url2"}, new String[]{"tag3", "tag4"}, "available")); + + pets.add(createPet(10, categories.get(2), "Rabbit 1", new String[]{ + "url1", "url2"}, new String[]{"tag3", "tag4"}, "available")); + } + + public Pet getPetById(long petId) { + for (Pet pet : pets) { + if (pet.getId() == petId) { + return pet; + } + } + return null; + } + + public List findPetByStatus(String status) { + String[] statues = status.split(","); + List result = new ArrayList(); + for (Pet pet : pets) { + for (String s : statues) { + if (s.equals(pet.getStatus())) { + result.add(pet); + } + } + } + return result; + } + + public List findPetByCategory(Category category) { + return pets.stream().filter(pet -> category.equals(pet.getCategory())).collect(Collectors.toList()); + } + + public List findPetByTags(String tags) { + String[] tagList = tags.split(","); + List result = new ArrayList(); + for (Pet pet : pets) { + if (null != pet.getTags()) { + for (Tag tag : pet.getTags()) { + for (String tagListString : tagList) { + if (tagListString.equals(tag.getName())) { + result.add(pet); + } + } + } + } + } + return result; + } + + public void addPet(Pet pet) { + if (pets.size() > 0) { + for (int i = pets.size() - 1; i >= 0; i--) { + if (pets.get(i).getId() == pet.getId()) { + pets.remove(i); + } + } + } + pets.add(pet); + } + + static Pet createPet(long id, Category cat, String name, String[] urls, + String[] tags, String status) { + Pet pet = new Pet(); + pet.setId(id); + pet.setCategory(cat); + pet.setName(name); + if (null != urls) { + List urlObjs = new ArrayList(); + for (String urlString : urls) { + urlObjs.add(urlString); + } + pet.setPhotoUrls(urlObjs); + } + List tagObjs = new ArrayList(); + int i = 0; + if (null != tags) { + for (String tagString : tags) { + i = i + 1; + Tag tag = new Tag(); + tag.setId(i); + tag.setName(tagString); + tagObjs.add(tag); + } + } + pet.setTags(tagObjs); + pet.setStatus(status); + return pet; + } + + static Category createCategory(long id, String name) { + Category category = new Category(); + category.setId(id); + category.setName(name); + return category; + } +} diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore31/PetResource.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore31/PetResource.java new file mode 100644 index 0000000000..5e51e9de27 --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore31/PetResource.java @@ -0,0 +1,147 @@ +package io.swagger.v3.jaxrs2.petstore31; + +import io.swagger.v3.jaxrs2.resources.QueryResultBean; +import io.swagger.v3.jaxrs2.resources.exception.NotFoundException; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; + +import javax.ws.rs.BeanParam; +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.Response; + +@Consumes("application/json") +@Path("/pet") +@Produces({"application/json", "application/xml"}) +public class PetResource { + static PetData petData = new PetData(); + + @GET + @Path("/{petId}") + @Operation(summary = "Find pet by ID", + description = "Returns a pet when 0 < ID <= 10. ID > 10 or nonintegers will simulate API error conditions", + responses = { + @ApiResponse( + description = "The pet", content = @Content( + schema = @Schema(implementation = Pet.class) + )), + @ApiResponse(responseCode = "400", description = "Invalid ID supplied"), + @ApiResponse(responseCode = "404", description = "Pet not found") + }) + public Response getPetById( + @Parameter(description = "ID of pet that needs to be fetched"/*, _enum = "range[1,10]"*/, required = true) + @PathParam("petId") final Long petId) throws NotFoundException { + Pet pet = petData.getPetById(petId); + if (null != pet) { + return Response.ok().entity(pet).build(); + } else { + throw new NotFoundException(404, "Pet not found"); + } + } + + @POST + @Consumes({"application/json", "application/xml"}) + @Operation(summary = "Add a new pet to the store", + responses = { + @ApiResponse(responseCode = "405", description = "Invalid input") + }) + public Response addPet( + @Parameter(description = "Pet object that needs to be added to the store", required = true) final Pet pet) { + petData.addPet(pet); + return Response.ok().entity("SUCCESS").build(); + } + + @POST + @Path("/bodynoannotation") + @Consumes({"application/json", "application/xml"}) + @Produces({"application/json", "application/xml"}) + @Operation(summary = "Add a new pet to the store no annotation", + responses = { + @ApiResponse(responseCode = "405", description = "Invalid input") + }) + public Response addPetNoAnnotation(final Pet pet) { + petData.addPet(pet); + return Response.ok().entity("SUCCESS").build(); + } + + @POST + @Path("/bodyid") + @Consumes({"application/json", "application/xml"}) + @Operation(summary = "Add a new pet to the store passing an integer with generic parameter annotation", + responses = { + @ApiResponse(responseCode = "405", description = "Invalid input") + }) + public Response addPetByInteger( + @Parameter(description = "Pet object that needs to be added to the store", required = true) final int petId) { + return Response.ok().entity("SUCCESS").build(); + } + + @POST + @Path("/bodyidnoannotation") + @Consumes({"application/json", "application/xml"}) + @Operation(summary = "Add a new pet to the store passing an integer without parameter annotation", + responses = { + @ApiResponse(responseCode = "405", description = "Invalid input") + }) + public Response addPetByIntegerNoAnnotation(final int petId) { + return Response.ok().entity("SUCCESS").build(); + } + + @PUT + @Operation(summary = "Update an existing pet", + responses = { + @ApiResponse(responseCode = "400", description = "Invalid ID supplied"), + @ApiResponse(responseCode = "404", description = "Pet not found"), + @ApiResponse(responseCode = "405", description = "Validation exception")}) + public Response updatePet( + @Parameter(description = "Pet object that needs to be added to the store", required = true) final Pet pet) { + petData.addPet(pet); + return Response.ok().entity("SUCCESS").build(); + } + + @GET + @Path("/findByStatus") + @Produces("application/xml") + @Operation(summary = "Finds Pets by status", + description = "Multiple status values can be provided with comma separated strings", + responses = { + @ApiResponse( + content = @Content(mediaType = "application/json", + schema = @Schema(implementation = Pet.class))), + @ApiResponse( + responseCode = "400", description = "Invalid status value" + )} + ) + public Response findPetsByStatus( + @Parameter(description = "Status values that need to be considered for filter", required = true) @QueryParam("status") final String status, + @BeanParam final QueryResultBean qr + ) { + return Response.ok(petData.findPetByStatus(status)).build(); + } + + @GET + @Path("/findByTags") + @Produces("application/json") + @Operation(summary = "Finds Pets by tags", + description = "Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.", + responses = { + @ApiResponse(description = "Pets matching criteria", + content = @Content(schema = @Schema(implementation = Pet.class)) + ), + @ApiResponse(description = "Invalid tag value", responseCode = "400") + }) + @Deprecated + public Response findPetsByTags( + @Parameter(description = "Tags to filter by", required = true) @QueryParam("tags") final String tags) { + return Response.ok(petData.findPetByTags(tags)).build(); + } +} diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore31/Tag.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore31/Tag.java new file mode 100644 index 0000000000..38e7dc66b4 --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore31/Tag.java @@ -0,0 +1,28 @@ +package io.swagger.v3.jaxrs2.petstore31; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement(name = "Tag") +public class Tag { + private long id; + private String name; + + @XmlElement(name = "id") + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + @XmlElement(name = "name") + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore31/User.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore31/User.java new file mode 100644 index 0000000000..aadb37fc00 --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore31/User.java @@ -0,0 +1,91 @@ +package io.swagger.v3.jaxrs2.petstore31; + +import io.swagger.v3.oas.annotations.media.Schema; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement(name = "User") +public class User { + private long id; + private String username; + private String firstName; + private String lastName; + private String email; + private String password; + private String phone; + private int userStatus; + + @XmlElement(name = "id") + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + @XmlElement(name = "firstName") + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + @XmlElement(name = "username") + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + @XmlElement(name = "lastName") + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + @XmlElement(name = "email") + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + @XmlElement(name = "password") + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + @XmlElement(name = "phone") + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + @XmlElement(name = "userStatus") + @Schema(description = "User Status") //, allowableValues = {"1","2","3"}) + public int getUserStatus() { + return userStatus; + } + + public void setUserStatus(int userStatus) { + this.userStatus = userStatus; + } +} diff --git a/modules/swagger-maven-plugin/src/main/java/io/swagger/v3/plugin/maven/SwaggerMojo.java b/modules/swagger-maven-plugin/src/main/java/io/swagger/v3/plugin/maven/SwaggerMojo.java index 72370a77dd..77935ef614 100644 --- a/modules/swagger-maven-plugin/src/main/java/io/swagger/v3/plugin/maven/SwaggerMojo.java +++ b/modules/swagger-maven-plugin/src/main/java/io/swagger/v3/plugin/maven/SwaggerMojo.java @@ -422,7 +422,7 @@ private boolean isCollectionNotBlank(Collection collection) { private Boolean openapi31; /** - * @since 2.2.4 + * @since 2.2.12 */ @Parameter(property = "resolve.convertToOpenAPI31") private Boolean convertToOpenAPI31; diff --git a/modules/swagger-models/src/main/java/io/swagger/v3/oas/models/media/Schema.java b/modules/swagger-models/src/main/java/io/swagger/v3/oas/models/media/Schema.java index 8073c5f66c..42f3242bd8 100644 --- a/modules/swagger-models/src/main/java/io/swagger/v3/oas/models/media/Schema.java +++ b/modules/swagger-models/src/main/java/io/swagger/v3/oas/models/media/Schema.java @@ -1454,7 +1454,7 @@ public Schema prefixItems(List prefixItems) { /** * - * @since 2.2.4 (OpenAPI 3.1.0) + * @since 2.2.12 (OpenAPI 3.1.0) */ @OpenAPI31 public Schema addPrefixItem(Schema prefixItem) { From 70b17d946624b6a39cfba7299e84b837d5bf8c0e Mon Sep 17 00:00:00 2001 From: SimY4 Date: Fri, 14 Apr 2023 15:52:58 +1000 Subject: [PATCH 043/131] fix 3581: recognize Hidden annotation on enum values. --- .../swagger/v3/core/jackson/ModelResolver.java | 5 +++++ .../swagger/v3/core/util/ReflectionUtils.java | 18 ++++++++++++++++++ .../oas/models/JacksonNumberValueEnum.java | 4 +++- .../models/JacksonNumberValueFieldEnum.java | 4 +++- .../core/oas/models/JacksonPropertyEnum.java | 4 +++- .../v3/core/oas/models/JacksonValueEnum.java | 4 +++- .../core/oas/models/JacksonValueFieldEnum.java | 4 +++- .../oas/models/JacksonValuePrivateEnum.java | 4 +++- 8 files changed, 41 insertions(+), 6 deletions(-) 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 8550e83500..bd3140cb2f 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 @@ -1064,6 +1064,11 @@ protected void _addEnumProps(Class propClass, Schema property) { for (Enum en : enumConstants) { String n; + Field enumField = ReflectionUtils.findField(en.name(), enumClass); + if (null != enumField && enumField.isAnnotationPresent(Hidden.class)) { + continue; + } + String enumValue = enumValues[en.ordinal()]; String methodValue = jsonValueMethod.flatMap(m -> ReflectionUtils.safeInvoke(m, en)).map(Object::toString).orElse(null); String fieldValue = jsonValueField.flatMap(f -> ReflectionUtils.safeGet(f, en)).map(Object::toString).orElse(null); diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/ReflectionUtils.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/ReflectionUtils.java index 559bc326a2..a1bb422ee9 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/ReflectionUtils.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/ReflectionUtils.java @@ -160,6 +160,24 @@ public static Method getOverriddenMethod(Method method) { return result; } + /** + * Searches the field name in given class cls. If the field is found returns it, else return null. + * + * @param name is the field to search + * @param cls is the class or interface where to search + * @return field if it is found + */ + public static Field findField(String name, Class cls) { + if (cls == null) { + return null; + } + try { + return cls.getField(name); + } catch (NoSuchFieldException nsfe) { + return null; + } + } + /** * Searches the method methodToFind in given class cls. If the method is found returns it, else return null. * diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/oas/models/JacksonNumberValueEnum.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/oas/models/JacksonNumberValueEnum.java index 9d2f7ba4ea..a5c29b9ff8 100644 --- a/modules/swagger-core/src/test/java/io/swagger/v3/core/oas/models/JacksonNumberValueEnum.java +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/oas/models/JacksonNumberValueEnum.java @@ -1,6 +1,7 @@ package io.swagger.v3.core.oas.models; import com.fasterxml.jackson.annotation.JsonValue; +import io.swagger.v3.oas.annotations.Hidden; /** * Enum holds values different from names. Schema model will derive Integer value from jackson annotation JsonValue on public method. @@ -8,7 +9,8 @@ public enum JacksonNumberValueEnum { FIRST(2), SECOND(4), - THIRD(6); + THIRD(6), + @Hidden HIDDEN(-1); private final int value; diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/oas/models/JacksonNumberValueFieldEnum.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/oas/models/JacksonNumberValueFieldEnum.java index 5f7a5992e7..6e94628953 100644 --- a/modules/swagger-core/src/test/java/io/swagger/v3/core/oas/models/JacksonNumberValueFieldEnum.java +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/oas/models/JacksonNumberValueFieldEnum.java @@ -1,6 +1,7 @@ package io.swagger.v3.core.oas.models; import com.fasterxml.jackson.annotation.JsonValue; +import io.swagger.v3.oas.annotations.Hidden; /** * Enum holds values different from names. Schema model will derive Integer value from jackson annotation JsonValue on private field. @@ -8,7 +9,8 @@ public enum JacksonNumberValueFieldEnum { FIRST(2), SECOND(4), - THIRD(6); + THIRD(6), + @Hidden HIDDEN(-1); @JsonValue private final int value; diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/oas/models/JacksonPropertyEnum.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/oas/models/JacksonPropertyEnum.java index 265506f1f8..a13d0b765e 100644 --- a/modules/swagger-core/src/test/java/io/swagger/v3/core/oas/models/JacksonPropertyEnum.java +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/oas/models/JacksonPropertyEnum.java @@ -1,10 +1,12 @@ package io.swagger.v3.core.oas.models; import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.v3.oas.annotations.Hidden; public enum JacksonPropertyEnum { @JsonProperty("p1") PRIVATE, @JsonProperty("p2") PUBLIC, SYSTEM, - INVITE_ONLY + INVITE_ONLY, + @Hidden HIDDEN } diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/oas/models/JacksonValueEnum.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/oas/models/JacksonValueEnum.java index 056524a3c8..329eb32b75 100644 --- a/modules/swagger-core/src/test/java/io/swagger/v3/core/oas/models/JacksonValueEnum.java +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/oas/models/JacksonValueEnum.java @@ -1,6 +1,7 @@ package io.swagger.v3.core.oas.models; import com.fasterxml.jackson.annotation.JsonValue; +import io.swagger.v3.oas.annotations.Hidden; /** * Enum holds values different from names. Schema model will derive String value from jackson annotation JsonValue on public method. @@ -8,7 +9,8 @@ public enum JacksonValueEnum { FIRST("one"), SECOND("two"), - THIRD("three"); + THIRD("three"), + @Hidden HIDDEN("hidden"); private final String value; diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/oas/models/JacksonValueFieldEnum.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/oas/models/JacksonValueFieldEnum.java index a64cb2407d..a96abb2bce 100644 --- a/modules/swagger-core/src/test/java/io/swagger/v3/core/oas/models/JacksonValueFieldEnum.java +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/oas/models/JacksonValueFieldEnum.java @@ -1,6 +1,7 @@ package io.swagger.v3.core.oas.models; import com.fasterxml.jackson.annotation.JsonValue; +import io.swagger.v3.oas.annotations.Hidden; /** * Enum holds values different from names. Schema model will derive String value from jackson annotation JsonValue on private field. @@ -8,7 +9,8 @@ public enum JacksonValueFieldEnum { FIRST("one"), SECOND("two"), - THIRD("three"); + THIRD("three"), + @Hidden HIDDEN("hidden"); @JsonValue private final String value; diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/oas/models/JacksonValuePrivateEnum.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/oas/models/JacksonValuePrivateEnum.java index 8fc40431d5..ec356efce2 100644 --- a/modules/swagger-core/src/test/java/io/swagger/v3/core/oas/models/JacksonValuePrivateEnum.java +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/oas/models/JacksonValuePrivateEnum.java @@ -1,6 +1,7 @@ package io.swagger.v3.core.oas.models; import com.fasterxml.jackson.annotation.JsonValue; +import io.swagger.v3.oas.annotations.Hidden; /** * Enum holds values different from names. Schema model will derive String value from jackson annotation JsonValue on private method. @@ -8,7 +9,8 @@ public enum JacksonValuePrivateEnum { FIRST("one"), SECOND("two"), - THIRD("three"); + THIRD("three"), + @Hidden HIDDEN("hidden"); private final String value; From 402b996e2c85a94094bb0dc8afbacbe46593bd44 Mon Sep 17 00:00:00 2001 From: frantuma Date: Tue, 13 Jun 2023 21:24:32 +0200 Subject: [PATCH 044/131] OAS 3.1 - fix webhooks class scanning --- .../io/swagger/v3/oas/integration/GenericOpenApiScanner.java | 2 ++ .../jaxrs2/integration/servlet/SwaggerServletInitializer.java | 3 ++- .../v3/jaxrs2/integration/SwaggerServletInitializer.java | 3 ++- .../swagger/v3/jaxrs2/integration/JaxrsAnnotationScanner.java | 2 ++ 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/GenericOpenApiScanner.java b/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/GenericOpenApiScanner.java index f82fc555f7..c4db1f3a8f 100644 --- a/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/GenericOpenApiScanner.java +++ b/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/GenericOpenApiScanner.java @@ -3,6 +3,7 @@ import io.github.classgraph.ClassGraph; import io.github.classgraph.ScanResult; import io.swagger.v3.oas.annotations.OpenAPIDefinition; +import io.swagger.v3.oas.annotations.Webhooks; import io.swagger.v3.oas.integration.api.OpenAPIConfiguration; import io.swagger.v3.oas.integration.api.OpenApiScanner; import org.apache.commons.lang3.StringUtils; @@ -70,6 +71,7 @@ public Set> classes() { final Set> classes; try (ScanResult scanResult = graph.scan()) { classes = new HashSet<>(scanResult.getClassesWithAnnotation(OpenAPIDefinition.class.getName()).loadClasses()); + classes.addAll(new HashSet<>(scanResult.getClassesWithAnnotation(Webhooks.class.getName()).loadClasses())); } diff --git a/modules/swagger-jaxrs2-servlet-initializer-v2/src/main/java/io/swagger/v3/jaxrs2/integration/servlet/SwaggerServletInitializer.java b/modules/swagger-jaxrs2-servlet-initializer-v2/src/main/java/io/swagger/v3/jaxrs2/integration/servlet/SwaggerServletInitializer.java index 95d41a2a58..ad7a0349fe 100644 --- a/modules/swagger-jaxrs2-servlet-initializer-v2/src/main/java/io/swagger/v3/jaxrs2/integration/servlet/SwaggerServletInitializer.java +++ b/modules/swagger-jaxrs2-servlet-initializer-v2/src/main/java/io/swagger/v3/jaxrs2/integration/servlet/SwaggerServletInitializer.java @@ -2,6 +2,7 @@ import io.swagger.v3.jaxrs2.integration.JaxrsOpenApiContextBuilder; import io.swagger.v3.oas.annotations.OpenAPIDefinition; +import io.swagger.v3.oas.annotations.Webhooks; import io.swagger.v3.oas.integration.IgnoredPackages; import io.swagger.v3.oas.integration.OpenApiConfigurationException; import io.swagger.v3.oas.integration.SwaggerConfiguration; @@ -21,7 +22,7 @@ * * @since 2.1.2 */ -@HandlesTypes({Path.class, OpenAPIDefinition.class, ApplicationPath.class}) +@HandlesTypes({Path.class, OpenAPIDefinition.class, ApplicationPath.class, Webhooks.class}) public class SwaggerServletInitializer implements ServletContainerInitializer { static final Set ignored = new HashSet(); diff --git a/modules/swagger-jaxrs2-servlet-initializer/src/main/java/io/swagger/v3/jaxrs2/integration/SwaggerServletInitializer.java b/modules/swagger-jaxrs2-servlet-initializer/src/main/java/io/swagger/v3/jaxrs2/integration/SwaggerServletInitializer.java index 9a8146dca3..3f269cfe6a 100644 --- a/modules/swagger-jaxrs2-servlet-initializer/src/main/java/io/swagger/v3/jaxrs2/integration/SwaggerServletInitializer.java +++ b/modules/swagger-jaxrs2-servlet-initializer/src/main/java/io/swagger/v3/jaxrs2/integration/SwaggerServletInitializer.java @@ -1,6 +1,7 @@ package io.swagger.v3.jaxrs2.integration; import io.swagger.v3.oas.annotations.OpenAPIDefinition; +import io.swagger.v3.oas.annotations.Webhooks; import io.swagger.v3.oas.integration.IgnoredPackages; import io.swagger.v3.oas.integration.OpenApiConfigurationException; import io.swagger.v3.oas.integration.SwaggerConfiguration; @@ -21,7 +22,7 @@ * swagger-jaxrs2-servlet-initializer-v2 */ @Deprecated -@HandlesTypes({Path.class, OpenAPIDefinition.class, ApplicationPath.class}) +@HandlesTypes({Path.class, OpenAPIDefinition.class, ApplicationPath.class, Webhooks.class}) public class SwaggerServletInitializer implements ServletContainerInitializer { static final Set ignored = new HashSet(); diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/JaxrsAnnotationScanner.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/JaxrsAnnotationScanner.java index b4e99bdbc2..155ec649ae 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/JaxrsAnnotationScanner.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/JaxrsAnnotationScanner.java @@ -4,6 +4,7 @@ import io.github.classgraph.ScanResult; import io.swagger.v3.jaxrs2.integration.api.JaxrsOpenApiScanner; import io.swagger.v3.oas.annotations.OpenAPIDefinition; +import io.swagger.v3.oas.annotations.Webhooks; import io.swagger.v3.oas.integration.IgnoredPackages; import io.swagger.v3.oas.integration.SwaggerConfiguration; import io.swagger.v3.oas.integration.api.OpenAPIConfiguration; @@ -93,6 +94,7 @@ public Set> classes() { try (ScanResult scanResult = graph.scan()) { classes = new HashSet<>(scanResult.getClassesWithAnnotation(javax.ws.rs.Path.class.getName()).loadClasses()); classes.addAll(new HashSet<>(scanResult.getClassesWithAnnotation(OpenAPIDefinition.class.getName()).loadClasses())); + classes.addAll(new HashSet<>(scanResult.getClassesWithAnnotation(Webhooks.class.getName()).loadClasses())); if (Boolean.TRUE.equals(openApiConfiguration.isAlwaysResolveAppPath())) { classes.addAll(new HashSet<>(scanResult.getClassesWithAnnotation(ApplicationPath.class.getName()).loadClasses())); } From f0170ca16ea72115085dd1a5e20f7adefb2252af Mon Sep 17 00:00:00 2001 From: frantuma Date: Tue, 13 Jun 2023 19:56:39 +0000 Subject: [PATCH 045/131] prepare release 2.2.12 --- README.md | 5 +++-- modules/swagger-annotations/pom.xml | 2 +- modules/swagger-core/pom.xml | 2 +- .../swagger-eclipse-transformer-maven-plugin/pom.xml | 2 +- modules/swagger-gradle-plugin/README.md | 4 ++-- modules/swagger-gradle-plugin/gradle.properties | 2 +- .../io/swagger/v3/plugins/gradle/SwaggerPlugin.java | 2 +- .../v3/plugins/gradle/SwaggerResolveTest.java | 4 ++-- modules/swagger-integration/pom.xml | 2 +- .../swagger-jaxrs2-servlet-initializer-v2/pom.xml | 2 +- modules/swagger-jaxrs2-servlet-initializer/pom.xml | 2 +- modules/swagger-jaxrs2/pom.xml | 2 +- modules/swagger-maven-plugin/README.md | 12 ++++++------ modules/swagger-maven-plugin/pom.xml | 2 +- modules/swagger-models/pom.xml | 2 +- .../modules/swagger-annotations-jakarta/pom.xml | 2 +- .../modules/swagger-core-jakarta/pom.xml | 2 +- .../modules/swagger-integration-jakarta/pom.xml | 2 +- .../modules/swagger-jaxrs2-jakarta/pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../modules/swagger-maven-plugin-jakarta/pom.xml | 2 +- .../modules/swagger-models-jakarta/pom.xml | 2 +- modules/swagger-project-jakarta/pom.xml | 2 +- pom.xml | 2 +- 25 files changed, 34 insertions(+), 33 deletions(-) diff --git a/README.md b/README.md index 46d7853b88..2b8a09d4de 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,8 @@ The OpenAPI Specification has undergone several revisions since initial creation Swagger core Version | Release Date | OpenAPI Spec compatibility | Notes | Status ------------------------- | ------------ | -------------------------- | ----- | ---- -2.2.11 (**current stable**)| 2023-06-01 | 3.x | [tag v2.2.11](https://github.com/swagger-api/swagger-core/tree/v2.2.11) | Supported +2.2.12 (**current stable**)| 2023-06-13 | 3.x | [tag v2.2.12](https://github.com/swagger-api/swagger-core/tree/v2.2.12) | Supported +2.2.11 | 2023-06-01 | 3.x | [tag v2.2.11](https://github.com/swagger-api/swagger-core/tree/v2.2.11) | Supported 2.2.10 | 2023-05-15 | 3.x | [tag v2.2.10](https://github.com/swagger-api/swagger-core/tree/v2.2.10) | Supported 2.2.9 | 2023-03-20 | 3.x | [tag v2.2.9](https://github.com/swagger-api/swagger-core/tree/v2.2.9) | Supported 2.2.8 | 2023-01-06 | 3.x | [tag v2.2.8](https://github.com/swagger-api/swagger-core/tree/v2.2.8) | Supported @@ -97,7 +98,7 @@ You need the following installed and available in your $PATH: * Jackson 2.4.5 or greater -### To build from source (currently 2.2.12-SNAPSHOT) +### To build from source (currently 2.2.13-SNAPSHOT) ``` # first time building locally mvn -N diff --git a/modules/swagger-annotations/pom.xml b/modules/swagger-annotations/pom.xml index dcf25221c4..56789dc269 100644 --- a/modules/swagger-annotations/pom.xml +++ b/modules/swagger-annotations/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.12-SNAPSHOT + 2.2.12 ../.. 4.0.0 diff --git a/modules/swagger-core/pom.xml b/modules/swagger-core/pom.xml index 6e0db6bdc0..8007f6d757 100644 --- a/modules/swagger-core/pom.xml +++ b/modules/swagger-core/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.12-SNAPSHOT + 2.2.12 ../.. 4.0.0 diff --git a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml index ce44b78528..c97bcd1ae1 100644 --- a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml +++ b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.12-SNAPSHOT + 2.2.12 ../.. 4.0.0 diff --git a/modules/swagger-gradle-plugin/README.md b/modules/swagger-gradle-plugin/README.md index baa5deadad..0d12f1be59 100644 --- a/modules/swagger-gradle-plugin/README.md +++ b/modules/swagger-gradle-plugin/README.md @@ -26,7 +26,7 @@ Alternatively provide as value a classpath with the following dependencies (repl ``` plugins { - id "io.swagger.core.v3.swagger-gradle-plugin" version "2.2.11" + id "io.swagger.core.v3.swagger-gradle-plugin" version "2.2.12" } ``` ### Gradle 1.x and 2.0 @@ -43,7 +43,7 @@ buildscript { } } dependencies { - classpath "io.swagger.core.v3:swagger-gradle-plugin:2.2.11" + classpath "io.swagger.core.v3:swagger-gradle-plugin:2.2.12" } } diff --git a/modules/swagger-gradle-plugin/gradle.properties b/modules/swagger-gradle-plugin/gradle.properties index 00da148865..052335fe8a 100644 --- a/modules/swagger-gradle-plugin/gradle.properties +++ b/modules/swagger-gradle-plugin/gradle.properties @@ -1,2 +1,2 @@ -version=2.2.12-SNAPSHOT +version=2.2.12 jettyVersion=9.4.49.v20220914 diff --git a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java index 08340c6ab4..b2b7a0c872 100644 --- a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java +++ b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java @@ -16,7 +16,7 @@ public void apply(Project project) { config.defaultDependencies(new Action() { public void execute(DependencySet dependencies) { dependencies.add(project.getDependencies().create("org.apache.commons:commons-lang3:3.12.0")); - dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.12-SNAPSHOT")); + dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.12")); dependencies.add(project.getDependencies().create("javax.ws.rs:javax.ws.rs-api:2.1")); dependencies.add(project.getDependencies().create("javax.servlet:javax.servlet-api:3.1.0")); } diff --git a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java index a42689f510..076c74485d 100644 --- a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java +++ b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java @@ -81,7 +81,7 @@ public void testSwaggerResolveTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.12-SNAPSHOT'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.12'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + @@ -154,7 +154,7 @@ public void testSwaggerResolveWithOAS31OptionTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.12-SNAPSHOT'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.12'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + diff --git a/modules/swagger-integration/pom.xml b/modules/swagger-integration/pom.xml index c1ec9d8af6..c000cf2332 100644 --- a/modules/swagger-integration/pom.xml +++ b/modules/swagger-integration/pom.xml @@ -6,7 +6,7 @@ io.swagger.core.v3 swagger-project - 2.2.12-SNAPSHOT + 2.2.12 ../.. swagger-integration diff --git a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml index cf8ad475ed..9840b64c89 100644 --- a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.12-SNAPSHOT + 2.2.12 ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2-servlet-initializer/pom.xml b/modules/swagger-jaxrs2-servlet-initializer/pom.xml index ce612e582a..8f7b88a1a0 100644 --- a/modules/swagger-jaxrs2-servlet-initializer/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.12-SNAPSHOT + 2.2.12 ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2/pom.xml b/modules/swagger-jaxrs2/pom.xml index bcfe69c22a..15ee11c165 100644 --- a/modules/swagger-jaxrs2/pom.xml +++ b/modules/swagger-jaxrs2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.12-SNAPSHOT + 2.2.12 ../../ 4.0.0 diff --git a/modules/swagger-maven-plugin/README.md b/modules/swagger-maven-plugin/README.md index c3d714ca9b..a6198c4892 100644 --- a/modules/swagger-maven-plugin/README.md +++ b/modules/swagger-maven-plugin/README.md @@ -22,7 +22,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin - 2.2.11 + 2.2.12 openapi ${project.build.directory}/generatedtest @@ -47,7 +47,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-jaxrs2 - 2.2.11 + 2.2.12 @@ -73,7 +73,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin-jakarta - 2.2.11 + 2.2.12 openapi ${project.build.directory}/generatedtest @@ -98,7 +98,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-jaxrs2-jakarta - 2.2.11 + 2.2.12 @@ -126,7 +126,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin - 2.2.11 + 2.2.12 openapi ${project.build.directory}/generatedtest @@ -155,7 +155,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin-jakarta - 2.2.11 + 2.2.12 openapi ${project.build.directory}/generatedtest diff --git a/modules/swagger-maven-plugin/pom.xml b/modules/swagger-maven-plugin/pom.xml index da8f26a3f2..0410a1731d 100644 --- a/modules/swagger-maven-plugin/pom.xml +++ b/modules/swagger-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.12-SNAPSHOT + 2.2.12 ../.. 4.0.0 diff --git a/modules/swagger-models/pom.xml b/modules/swagger-models/pom.xml index 45fa09c9d7..53f19196c6 100644 --- a/modules/swagger-models/pom.xml +++ b/modules/swagger-models/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.12-SNAPSHOT + 2.2.12 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml index 82e01597fa..ec31a44ec3 100644 --- a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.12-SNAPSHOT + 2.2.12 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml index 37b3387e3c..4f89f6b884 100644 --- a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.12-SNAPSHOT + 2.2.12 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml index cac70017c0..eda9fa87d5 100644 --- a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.12-SNAPSHOT + 2.2.12 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml index 1cfd479230..5e3b86882f 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.12-SNAPSHOT + 2.2.12 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml index 9afc3f7bbb..34eab2fc60 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.12-SNAPSHOT + 2.2.12 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml index 3ef3be2696..f668dca97b 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.12-SNAPSHOT + 2.2.12 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml index 6d70425fdc..2ab41ccd6b 100644 --- a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.12-SNAPSHOT + 2.2.12 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml index 335cce1a0a..55c56be27c 100644 --- a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.12-SNAPSHOT + 2.2.12 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/pom.xml b/modules/swagger-project-jakarta/pom.xml index 0879c5b277..0a4d64b550 100644 --- a/modules/swagger-project-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/pom.xml @@ -6,7 +6,7 @@ pom swagger-project-jakarta swagger-project-jakarta - 2.2.12-SNAPSHOT + 2.2.12 https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git diff --git a/pom.xml b/pom.xml index 2e985887d8..32cefc7c94 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ pom swagger-project swagger-project - 2.2.12-SNAPSHOT + 2.2.12 https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git From c6b104de0bab1f0c852b8fe78e1ff48dabd43455 Mon Sep 17 00:00:00 2001 From: frantuma Date: Tue, 13 Jun 2023 20:14:44 +0000 Subject: [PATCH 046/131] bump snapshot 2.2.13-SNAPSHOT --- modules/swagger-annotations/pom.xml | 2 +- modules/swagger-core/pom.xml | 2 +- modules/swagger-eclipse-transformer-maven-plugin/pom.xml | 2 +- modules/swagger-gradle-plugin/gradle.properties | 2 +- .../main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java | 2 +- .../java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java | 4 ++-- modules/swagger-integration/pom.xml | 2 +- modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml | 2 +- modules/swagger-jaxrs2-servlet-initializer/pom.xml | 2 +- modules/swagger-jaxrs2/pom.xml | 2 +- modules/swagger-maven-plugin/pom.xml | 2 +- modules/swagger-models/pom.xml | 2 +- .../modules/swagger-annotations-jakarta/pom.xml | 2 +- .../modules/swagger-core-jakarta/pom.xml | 2 +- .../modules/swagger-integration-jakarta/pom.xml | 2 +- .../modules/swagger-jaxrs2-jakarta/pom.xml | 2 +- .../swagger-jaxrs2-servlet-initializer-jakarta/pom.xml | 2 +- .../swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml | 2 +- .../modules/swagger-maven-plugin-jakarta/pom.xml | 2 +- .../modules/swagger-models-jakarta/pom.xml | 2 +- modules/swagger-project-jakarta/pom.xml | 2 +- pom.xml | 2 +- 22 files changed, 23 insertions(+), 23 deletions(-) diff --git a/modules/swagger-annotations/pom.xml b/modules/swagger-annotations/pom.xml index 56789dc269..8b8e3a131a 100644 --- a/modules/swagger-annotations/pom.xml +++ b/modules/swagger-annotations/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.12 + 2.2.13-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-core/pom.xml b/modules/swagger-core/pom.xml index 8007f6d757..e24a0d2879 100644 --- a/modules/swagger-core/pom.xml +++ b/modules/swagger-core/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.12 + 2.2.13-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml index c97bcd1ae1..b56156b20d 100644 --- a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml +++ b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.12 + 2.2.13-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-gradle-plugin/gradle.properties b/modules/swagger-gradle-plugin/gradle.properties index 052335fe8a..2f675ff750 100644 --- a/modules/swagger-gradle-plugin/gradle.properties +++ b/modules/swagger-gradle-plugin/gradle.properties @@ -1,2 +1,2 @@ -version=2.2.12 +version=2.2.13-SNAPSHOT jettyVersion=9.4.49.v20220914 diff --git a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java index b2b7a0c872..5d93a835ac 100644 --- a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java +++ b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java @@ -16,7 +16,7 @@ public void apply(Project project) { config.defaultDependencies(new Action() { public void execute(DependencySet dependencies) { dependencies.add(project.getDependencies().create("org.apache.commons:commons-lang3:3.12.0")); - dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.12")); + dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.13-SNAPSHOT")); dependencies.add(project.getDependencies().create("javax.ws.rs:javax.ws.rs-api:2.1")); dependencies.add(project.getDependencies().create("javax.servlet:javax.servlet-api:3.1.0")); } diff --git a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java index 076c74485d..bf10d9c343 100644 --- a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java +++ b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java @@ -81,7 +81,7 @@ public void testSwaggerResolveTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.12'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.13-SNAPSHOT'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + @@ -154,7 +154,7 @@ public void testSwaggerResolveWithOAS31OptionTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.12'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.13-SNAPSHOT'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + diff --git a/modules/swagger-integration/pom.xml b/modules/swagger-integration/pom.xml index c000cf2332..6918f8d822 100644 --- a/modules/swagger-integration/pom.xml +++ b/modules/swagger-integration/pom.xml @@ -6,7 +6,7 @@ io.swagger.core.v3 swagger-project - 2.2.12 + 2.2.13-SNAPSHOT ../.. swagger-integration diff --git a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml index 9840b64c89..66356ca13b 100644 --- a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.12 + 2.2.13-SNAPSHOT ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2-servlet-initializer/pom.xml b/modules/swagger-jaxrs2-servlet-initializer/pom.xml index 8f7b88a1a0..0ddab39611 100644 --- a/modules/swagger-jaxrs2-servlet-initializer/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.12 + 2.2.13-SNAPSHOT ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2/pom.xml b/modules/swagger-jaxrs2/pom.xml index 15ee11c165..3b85dc57d2 100644 --- a/modules/swagger-jaxrs2/pom.xml +++ b/modules/swagger-jaxrs2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.12 + 2.2.13-SNAPSHOT ../../ 4.0.0 diff --git a/modules/swagger-maven-plugin/pom.xml b/modules/swagger-maven-plugin/pom.xml index 0410a1731d..28ec832dfd 100644 --- a/modules/swagger-maven-plugin/pom.xml +++ b/modules/swagger-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.12 + 2.2.13-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-models/pom.xml b/modules/swagger-models/pom.xml index 53f19196c6..dafa89548b 100644 --- a/modules/swagger-models/pom.xml +++ b/modules/swagger-models/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.12 + 2.2.13-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml index ec31a44ec3..39848454ae 100644 --- a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.12 + 2.2.13-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml index 4f89f6b884..c3a36305ef 100644 --- a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.12 + 2.2.13-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml index eda9fa87d5..b03cfdec07 100644 --- a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.12 + 2.2.13-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml index 5e3b86882f..f2541682b3 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.12 + 2.2.13-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml index 34eab2fc60..9e200683bb 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.12 + 2.2.13-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml index f668dca97b..b7d203fc0b 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.12 + 2.2.13-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml index 2ab41ccd6b..5e5e15e1e9 100644 --- a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.12 + 2.2.13-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml index 55c56be27c..ede9486773 100644 --- a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.12 + 2.2.13-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/pom.xml b/modules/swagger-project-jakarta/pom.xml index 0a4d64b550..6b3037e5b2 100644 --- a/modules/swagger-project-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/pom.xml @@ -6,7 +6,7 @@ pom swagger-project-jakarta swagger-project-jakarta - 2.2.12 + 2.2.13-SNAPSHOT https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git diff --git a/pom.xml b/pom.xml index 32cefc7c94..85af0f4a8b 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ pom swagger-project swagger-project - 2.2.12 + 2.2.13-SNAPSHOT https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git From 2676db067cf89b262e73d6cb46700f036a54c309 Mon Sep 17 00:00:00 2001 From: frantuma Date: Fri, 16 Jun 2023 16:05:05 +0200 Subject: [PATCH 047/131] support custom annotation for containers --- .../v3/core/jackson/ModelResolver.java | 16 ++++++--- .../override/CustomAnnotationConverter.java | 34 +++++++++++++++++++ .../override/ModelPropertyOverrideTest.java | 27 +++++++++++++++ .../resources/BidimensionalArray.java | 31 +++++++++++++++++ 4 files changed, 104 insertions(+), 4 deletions(-) create mode 100644 modules/swagger-core/src/test/java/io/swagger/v3/core/converting/override/CustomAnnotationConverter.java create mode 100644 modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/resources/BidimensionalArray.java 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 bd3140cb2f..354a42e91e 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 @@ -411,10 +411,18 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context BeanDescription valueTypeBeanDesc = _mapper.getSerializationConfig().introspect(valueType); pName = _typeName(valueType, valueTypeBeanDesc); } - Annotation[] schemaAnnotations = null; + List strippedCtxAnnotations = new ArrayList<>(); if (resolvedSchemaAnnotation != null) { - schemaAnnotations = new Annotation[]{resolvedSchemaAnnotation}; + strippedCtxAnnotations.add(0, resolvedSchemaAnnotation); } + if (annotatedType.getCtxAnnotations() != null) { + strippedCtxAnnotations.addAll(Arrays.stream( + annotatedType.getCtxAnnotations()).filter( + ass -> !ass.annotationType().getName().startsWith("io.swagger") + ).collect(Collectors.toList())); + } + + if (keyType != null && valueType != null) { if (ReflectionUtils.isSystemType(type) && !annotatedType.isSchemaProperty() && !annotatedType.isResolveAsRef()) { context.resolve(new AnnotatedType().type(valueType).jsonViewAnnotation(annotatedType.getJsonViewAnnotation())); @@ -424,7 +432,7 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context new AnnotatedType() .type(valueType) .schemaProperty(annotatedType.isSchemaProperty()) - .ctxAnnotations(schemaAnnotations) + .ctxAnnotations(strippedCtxAnnotations.toArray(new Annotation[0])) .skipSchemaName(true) .resolveAsRef(annotatedType.isResolveAsRef()) .jsonViewAnnotation(annotatedType.getJsonViewAnnotation()) @@ -454,7 +462,7 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context Schema items = context.resolve(new AnnotatedType() .type(valueType) .schemaProperty(annotatedType.isSchemaProperty()) - .ctxAnnotations(schemaAnnotations) + .ctxAnnotations(strippedCtxAnnotations.toArray(new Annotation[0])) .skipSchemaName(true) .resolveAsRef(annotatedType.isResolveAsRef()) .propertyName(annotatedType.getPropertyName()) diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/converting/override/CustomAnnotationConverter.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/converting/override/CustomAnnotationConverter.java new file mode 100644 index 0000000000..4599a18647 --- /dev/null +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/converting/override/CustomAnnotationConverter.java @@ -0,0 +1,34 @@ +package io.swagger.v3.core.converting.override; + +import com.fasterxml.jackson.databind.ObjectMapper; +import io.swagger.v3.core.converter.AnnotatedType; +import io.swagger.v3.core.converter.ModelConverter; +import io.swagger.v3.core.converter.ModelConverterContext; +import io.swagger.v3.core.jackson.ModelResolver; +import io.swagger.v3.core.resolving.resources.BidimensionalArray; +import io.swagger.v3.core.util.AnnotationsUtils; +import io.swagger.v3.oas.models.media.Schema; + +import java.util.Iterator; + +public class CustomAnnotationConverter extends ModelResolver { + + public CustomAnnotationConverter(ObjectMapper mapper) { + super(mapper); + } + + @Override + public Schema resolve(AnnotatedType type, ModelConverterContext context, Iterator chain) { + Schema s = chain.next().resolve(type, context, chain); + if (s != null) { + if ("array".equals(s.getType()) && s.getItems() != null && "array".equals(s.getItems().getType())) { + BidimensionalArray.MySizeAnnotation size = AnnotationsUtils.getAnnotation(BidimensionalArray.MySizeAnnotation.class, type.getCtxAnnotations()); + if (size != null) { + s.getItems().maxItems(size.maxItems()); + } + } + return s; + } + return null; + } +} diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/converting/override/ModelPropertyOverrideTest.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/converting/override/ModelPropertyOverrideTest.java index 061e696f7e..638f51d0b6 100644 --- a/modules/swagger-core/src/test/java/io/swagger/v3/core/converting/override/ModelPropertyOverrideTest.java +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/converting/override/ModelPropertyOverrideTest.java @@ -3,6 +3,7 @@ import io.swagger.v3.core.converter.ModelConverters; import io.swagger.v3.core.converting.override.resources.MyCustomClass; import io.swagger.v3.core.matchers.SerializationMatchers; +import io.swagger.v3.core.resolving.resources.BidimensionalArray; import io.swagger.v3.core.util.Json; import io.swagger.v3.oas.models.media.Schema; import org.testng.annotations.Test; @@ -69,4 +70,30 @@ public MyCustomClass getMyCustomClass() { public void setMyCustomClass(MyCustomClass myCustomClass) { } } + + @Test + public void customAnnotationTest() throws Exception { + ModelConverters.getInstance().addConverter(new CustomAnnotationConverter(Json.mapper())); + final Map model = ModelConverters.getInstance().read(BidimensionalArray.class); + final String expected = "BidimensionalArray:\n" + + " type: object\n" + + " properties:\n" + + " withCustomAnnotation:\n" + + " maxItems: 3\n" + + " type: array\n" + + " items:\n" + + " maxItems: 2\n" + + " type: array\n" + + " items:\n" + + " type: string\n" + + " withHelperClass:\n" + + " maxItems: 3\n" + + " type: array\n" + + " items:\n" + + " maxItems: 2\n" + + " type: array\n" + + " items:\n" + + " type: string\n"; + SerializationMatchers.assertEqualsToYaml(model, expected); + } } diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/resources/BidimensionalArray.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/resources/BidimensionalArray.java new file mode 100644 index 0000000000..ccb18c8c8f --- /dev/null +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/resources/BidimensionalArray.java @@ -0,0 +1,31 @@ +package io.swagger.v3.core.resolving.resources; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import io.swagger.v3.oas.annotations.media.ArraySchema; + +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.util.List; + +public class BidimensionalArray { + @ArraySchema(maxItems = 3) + @MySizeAnnotation(maxItems = 2) + public List> withCustomAnnotation; + + @ArraySchema(maxItems = 3) + public List> withHelperClass; + + + @ArraySchema(maxItems = 2) + @JsonIgnoreProperties({"empty"}) + public static interface Foo extends List { + + } + + @Retention(RetentionPolicy.RUNTIME) + @Inherited + public static @interface MySizeAnnotation { + int maxItems() default Integer.MIN_VALUE; + } +} From b0ce133ec01529a65c9f8849b5d0dacfbd23db79 Mon Sep 17 00:00:00 2001 From: frantuma Date: Thu, 15 Jun 2023 13:34:44 +0200 Subject: [PATCH 048/131] OAS 3.1 - properties and ref as siblings --- .../v3/core/converter/ModelConverters.java | 53 ++++--- .../v3/core/jackson/ModelResolver.java | 26 +++- .../v3/core/util/AnnotationsUtils.java | 7 +- .../v3/core/util/ParameterProcessor.java | 7 +- .../integration/GenericOpenApiContext.java | 4 +- .../oas/integration/SwaggerConfiguration.java | 2 +- .../java/io/swagger/v3/jaxrs2/Reader.java | 5 +- .../java/io/swagger/v3/jaxrs2/ReaderTest.java | 136 ++++++++++++++++++ .../v3/jaxrs2/petstore31/SimpleCategory.java | 2 + .../v3/jaxrs2/petstore31/SimpleTag.java | 27 ++++ .../io/swagger/v3/jaxrs2/petstore31/Tag.java | 35 +++++ .../v3/jaxrs2/petstore31/TagResource.java | 15 ++ 12 files changed, 280 insertions(+), 39 deletions(-) create mode 100644 modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore31/SimpleCategory.java create mode 100644 modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore31/SimpleTag.java create mode 100644 modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore31/TagResource.java diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/converter/ModelConverters.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/converter/ModelConverters.java index 67ab75d647..5f6008648a 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/converter/ModelConverters.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/converter/ModelConverters.java @@ -21,7 +21,8 @@ import java.util.concurrent.CopyOnWriteArrayList; public class ModelConverters { - private static final ModelConverters SINGLETON = new ModelConverters(); + private static ModelConverters SINGLETON = null; + private static ModelConverters SINGLETON31 = null; static Logger LOGGER = LoggerFactory.getLogger(ModelConverters.class); private final List converters; private final Set skippedPackages = new HashSet<>(); @@ -41,10 +42,42 @@ public ModelConverters(boolean openapi31) { } } - public static ModelConverters getInstance() { + public static ModelConverters getInstance(boolean openapi31) { + if (openapi31) { + if (SINGLETON31 == null) { + SINGLETON31 = new ModelConverters(openapi31); + init(SINGLETON31); + } + return SINGLETON31; + } + if (SINGLETON == null) { + SINGLETON = new ModelConverters(openapi31); + init(SINGLETON); + } return SINGLETON; } + private static void init(ModelConverters converter) { + converter.skippedPackages.add("java.lang"); + + ServiceLoader loader = ServiceLoader.load(ModelConverter.class); + Iterator itr = loader.iterator(); + while (itr.hasNext()) { + ModelConverter ext = itr.next(); + if (ext == null) { + LOGGER.error("failed to load extension {}", ext); + } else { + converter.addConverter(ext); + LOGGER.debug("adding ModelConverter: {}", ext); + } + } + + } + public static ModelConverters getInstance() { + return getInstance(false); + } + + public void addConverter(ModelConverter converter) { converters.add(0, converter); } @@ -140,20 +173,4 @@ private boolean shouldProcess(Type type) { } return !skippedClasses.contains(className); } - - static { - SINGLETON.skippedPackages.add("java.lang"); - - ServiceLoader loader = ServiceLoader.load(ModelConverter.class); - Iterator itr = loader.iterator(); - while (itr.hasNext()) { - ModelConverter ext = itr.next(); - if (ext == null) { - LOGGER.error("failed to load extension {}", ext); - } else { - SINGLETON.addConverter(ext); - LOGGER.debug("adding ModelConverter: {}", ext); - } - } - } } 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 354a42e91e..40055b07b5 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 @@ -55,6 +55,7 @@ import io.swagger.v3.oas.models.media.ComposedSchema; import io.swagger.v3.oas.models.media.Discriminator; import io.swagger.v3.oas.models.media.IntegerSchema; +import io.swagger.v3.oas.models.media.JsonSchema; import io.swagger.v3.oas.models.media.MapSchema; import io.swagger.v3.oas.models.media.NumberSchema; import io.swagger.v3.oas.models.media.ObjectSchema; @@ -205,11 +206,15 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context name = decorateModelName(annotatedType, name); - // if we have a ref we don't consider anything else + // if we have a ref, for OAS 3.0 we don't consider anything else, while for OAS 3.1 we store the ref and add it later + String schemaRefFromAnnotation = null; if (resolvedSchemaAnnotation != null && StringUtils.isNotEmpty(resolvedSchemaAnnotation.ref())) { if (resolvedArrayAnnotation == null) { - return new Schema().$ref(resolvedSchemaAnnotation.ref()).name(name); + schemaRefFromAnnotation = resolvedSchemaAnnotation.ref(); + if (!openapi31) { + return new JsonSchema().$ref(resolvedSchemaAnnotation.ref()).name(name); + } } else { ArraySchema schema = new ArraySchema(); resolveArraySchema(annotatedType, schema, resolvedArrayAnnotation); @@ -336,7 +341,11 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context } if ("Object".equals(name)) { - return new Schema(); + Schema schema = new Schema(); + if (schemaRefFromAnnotation != null) { + schema.raw$ref(schemaRefFromAnnotation); + } + return schema; } List> composedSchemaReferencedClasses = getComposedSchemaReferencedClasses(type.getRawClass(), annotatedType.getCtxAnnotations(), resolvedSchemaAnnotation); @@ -362,6 +371,9 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context model = new Schema().$ref(Components.COMPONENTS_SCHEMAS_REF + name); } if (!isComposedSchema) { + if (schemaRefFromAnnotation != null && model != null) { + model.raw$ref(schemaRefFromAnnotation); + } return model; } } @@ -712,7 +724,13 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context property = new Schema().$ref(constructRef(pName)); } } else if (property.get$ref() != null) { - property = new Schema().$ref(StringUtils.isNotEmpty(property.get$ref()) ? property.get$ref() : property.getName()); + if (!openapi31) { + property = new Schema().$ref(StringUtils.isNotEmpty(property.get$ref()) ? property.get$ref() : property.getName()); + } else { + if (StringUtils.isEmpty(property.get$ref())) { + property.$ref(property.getName()); + } + } } } property.setName(propName); diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java index 133ad88a6d..2eb0e753e2 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java @@ -795,12 +795,7 @@ public static Schema resolveSchemaFromType(Class schemaImplementation, Compon schemaObject = primitiveType.createProperty(); } else { schemaObject = new Schema(); - ResolvedSchema resolvedSchema; - if (openapi31) { - resolvedSchema = new ModelConverters(true).readAllAsResolvedSchema(new AnnotatedType().type(schemaImplementation).jsonViewAnnotation(jsonViewAnnotation)); - } else { - resolvedSchema = ModelConverters.getInstance().readAllAsResolvedSchema(new AnnotatedType().type(schemaImplementation).jsonViewAnnotation(jsonViewAnnotation)); - } + ResolvedSchema resolvedSchema = ModelConverters.getInstance(openapi31).readAllAsResolvedSchema(new AnnotatedType().type(schemaImplementation).jsonViewAnnotation(jsonViewAnnotation)); Map schemaMap; if (resolvedSchema != null) { schemaMap = resolvedSchema.referencedSchemas; diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/ParameterProcessor.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/ParameterProcessor.java index 007d99c0a7..de969ff72c 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/ParameterProcessor.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/ParameterProcessor.java @@ -66,12 +66,7 @@ public static Parameter applyAnnotations( .jsonViewAnnotation(jsonViewAnnotation) .ctxAnnotations(reworkedAnnotations.toArray(new Annotation[reworkedAnnotations.size()])); - final ResolvedSchema resolvedSchema; - if (openapi31) { - resolvedSchema = new ModelConverters(true).resolveAsResolvedSchema(annotatedType); - } else { - resolvedSchema = ModelConverters.getInstance().resolveAsResolvedSchema(annotatedType); - } + final ResolvedSchema resolvedSchema = ModelConverters.getInstance(openapi31).resolveAsResolvedSchema(annotatedType); if (resolvedSchema.schema != null) { parameter.setSchema(resolvedSchema.schema); diff --git a/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/GenericOpenApiContext.java b/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/GenericOpenApiContext.java index d16ef22849..1784e04cbc 100644 --- a/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/GenericOpenApiContext.java +++ b/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/GenericOpenApiContext.java @@ -524,7 +524,7 @@ public T init() throws OpenApiConfigurationException { if (objectMapperProcessor != null) { ObjectMapper mapper = IntegrationObjectMapperFactory.createJson(); objectMapperProcessor.processJsonObjectMapper(mapper); - ModelConverters.getInstance().addConverter(new ModelResolver(mapper)); + ModelConverters.getInstance(Boolean.TRUE.equals(openApiConfiguration.isOpenAPI31())).addConverter(new ModelResolver(mapper)); objectMapperProcessor.processOutputJsonObjectMapper(outputJsonMapper); objectMapperProcessor.processOutputYamlObjectMapper(outputYamlMapper); @@ -537,7 +537,7 @@ public T init() throws OpenApiConfigurationException { try { if (modelConverters != null && !modelConverters.isEmpty()) { for (ModelConverter converter: modelConverters) { - ModelConverters.getInstance().addConverter(converter); + ModelConverters.getInstance(Boolean.TRUE.equals(openApiConfiguration.isOpenAPI31())).addConverter(converter); } } } catch (Exception e) { diff --git a/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/SwaggerConfiguration.java b/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/SwaggerConfiguration.java index c3ebd46080..0a348d1f76 100644 --- a/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/SwaggerConfiguration.java +++ b/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/SwaggerConfiguration.java @@ -34,7 +34,7 @@ public class SwaggerConfiguration implements OpenAPIConfiguration { private Boolean alwaysResolveAppPath; - private Boolean openAPI31; + private Boolean openAPI31 = false; private Boolean convertToOpenAPI31; diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java index 9b624a7fad..fe1b713186 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java @@ -101,6 +101,7 @@ public Reader() { paths = new Paths(); openApiTags = new LinkedHashSet<>(); components = new Components(); + setConfiguration(new SwaggerConfiguration().openAPI(openAPI)); } @@ -1120,7 +1121,7 @@ protected Operation parseMethod( final Class subResource = getSubResourceWithJaxRsSubresourceLocatorSpecs(method); Schema returnTypeSchema = null; if (!shouldIgnoreClass(returnType.getTypeName()) && !method.getGenericReturnType().equals(subResource)) { - ResolvedSchema resolvedSchema = ModelConverters.getInstance().resolveAsResolvedSchema(new AnnotatedType(returnType).resolveAsRef(true).jsonViewAnnotation(jsonViewAnnotation)); + ResolvedSchema resolvedSchema = ModelConverters.getInstance(config.isOpenAPI31()).resolveAsResolvedSchema(new AnnotatedType(returnType).resolveAsRef(true).jsonViewAnnotation(jsonViewAnnotation)); if (resolvedSchema.schema != null) { returnTypeSchema = resolvedSchema.schema; Content content = new Content(); @@ -1231,7 +1232,7 @@ private boolean shouldIgnoreClass(String className) { } ignore = rawClassName.startsWith("javax.ws.rs."); ignore = ignore || rawClassName.equalsIgnoreCase("void"); - ignore = ignore || ModelConverters.getInstance().isRegisteredAsSkippedClass(rawClassName); + ignore = ignore || ModelConverters.getInstance(config.isOpenAPI31()).isRegisteredAsSkippedClass(rawClassName); return ignore; } diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java index 2caca607a1..acd7b58694 100644 --- a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java @@ -12,8 +12,10 @@ import io.swagger.v3.core.jackson.ModelResolver; import io.swagger.v3.core.model.ApiDescription; import io.swagger.v3.core.util.PrimitiveType; +import io.swagger.v3.core.util.Yaml; import io.swagger.v3.jaxrs2.matchers.SerializationMatchers; import io.swagger.v3.jaxrs2.petstore31.PetResource; +import io.swagger.v3.jaxrs2.petstore31.TagResource; import io.swagger.v3.jaxrs2.resources.ResponseReturnTypeResource; import io.swagger.v3.jaxrs2.resources.SchemaPropertiesResource; import io.swagger.v3.jaxrs2.resources.SingleExampleResource; @@ -3273,6 +3275,22 @@ public void testOas31Petstore() { " description: Pet not found\n" + "components:\n" + " schemas:\n" + + " Bar:\n" + + " deprecated: true\n" + + " description: Bar\n" + + " properties:\n" + + " foo:\n" + + " type: string\n" + + " const: bar\n" + + " bar:\n" + + " type: integer\n" + + " format: int32\n" + + " exclusiveMaximum: 4\n" + + " foobar:\n" + + " type:\n" + + " - integer\n" + + " - string\n" + + " format: int32\n" + " Category:\n" + " properties:\n" + " id:\n" + @@ -3282,6 +3300,23 @@ public void testOas31Petstore() { " type: string\n" + " xml:\n" + " name: Category\n" + + " Foo:\n" + + " deprecated: true\n" + + " description: Foo\n" + + " properties:\n" + + " foo:\n" + + " type: string\n" + + " const: foo\n" + + " bar:\n" + + " type: integer\n" + + " format: int32\n" + + " exclusiveMaximum: 2\n" + + " foobar:\n" + + " type:\n" + + " - integer\n" + + " - string\n" + + " - object\n" + + " format: int32\n" + " IfSchema:\n" + " deprecated: true\n" + " description: if schema\n" + @@ -3354,8 +3389,109 @@ public void testOas31Petstore() { " format: int64\n" + " name:\n" + " type: string\n" + + " annotated:\n" + + " $ref: '#/components/schemas/Category'\n" + + " description: child description\n" + + " properties:\n" + + " bar:\n" + + " deprecated: true\n" + + " description: Bar\n" + + " properties:\n" + + " foo:\n" + + " type: string\n" + + " const: bar\n" + + " bar:\n" + + " type: integer\n" + + " format: int32\n" + + " exclusiveMaximum: 4\n" + + " foobar:\n" + + " type:\n" + + " - integer\n" + + " - string\n" + + " format: int32\n" + + " foo:\n" + + " deprecated: true\n" + + " description: Foo\n" + + " properties:\n" + + " foo:\n" + + " type: string\n" + + " const: foo\n" + + " bar:\n" + + " type: integer\n" + + " format: int32\n" + + " exclusiveMaximum: 2\n" + + " foobar:\n" + + " type:\n" + + " - integer\n" + + " - string\n" + + " - object\n" + + " format: int32\n" + " xml:\n" + " name: Tag\n"; SerializationMatchers.assertEqualsToYaml31(openAPI, yaml); } + + @Test + public void test31RefSiblings() { + SwaggerConfiguration config = new SwaggerConfiguration().openAPI31(true).openAPI(new OpenAPI()); + Reader reader = new Reader(config); + + OpenAPI openAPI = reader.read(TagResource.class); + String yaml = "openapi: 3.1.0\n" + + "paths:\n" + + " /tag/tag:\n" + + " get:\n" + + " operationId: getTag\n" + + " responses:\n" + + " default:\n" + + " description: default response\n" + + " content:\n" + + " '*/*':\n" + + " schema:\n" + + " $ref: '#/components/schemas/SimpleTag'\n" + + "components:\n" + + " schemas:\n" + + " Foo:\n" + + " deprecated: true\n" + + " description: Foo\n" + + " properties:\n" + + " foo:\n" + + " type: string\n" + + " const: foo\n" + + " bar:\n" + + " type: integer\n" + + " format: int32\n" + + " exclusiveMaximum: 2\n" + + " foobar:\n" + + " type:\n" + + " - integer\n" + + " - string\n" + + " - object\n" + + " format: int32\n" + + " SimpleTag:\n" + + " properties:\n" + + " annotated:\n" + + " $ref: '#/components/schemas/SimpleCategory'\n" + + " description: child description\n" + + " properties:\n" + + " foo:\n" + + " deprecated: true\n" + + " description: Foo\n" + + " properties:\n" + + " foo:\n" + + " type: string\n" + + " const: foo\n" + + " bar:\n" + + " type: integer\n" + + " format: int32\n" + + " exclusiveMaximum: 2\n" + + " foobar:\n" + + " type:\n" + + " - integer\n" + + " - string\n" + + " - object\n" + + " format: int32\n" + + " SimpleCategory: {}\n"; + SerializationMatchers.assertEqualsToYaml31(openAPI, yaml); + } } diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore31/SimpleCategory.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore31/SimpleCategory.java new file mode 100644 index 0000000000..93331be2b1 --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore31/SimpleCategory.java @@ -0,0 +1,2 @@ +package io.swagger.v3.jaxrs2.petstore31; +public class SimpleCategory {} diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore31/SimpleTag.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore31/SimpleTag.java new file mode 100644 index 0000000000..fb0cd43f67 --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore31/SimpleTag.java @@ -0,0 +1,27 @@ +package io.swagger.v3.jaxrs2.petstore31; + +import io.swagger.v3.oas.annotations.StringToClassMapItem; +import io.swagger.v3.oas.annotations.media.Schema; + +public class SimpleTag { + + @Schema( + properties = { + @StringToClassMapItem(key = "foo", value = Foo.class) + }, + ref = "#/components/schemas/SimpleCategory", + description = "child description" + ) + public Object annotated; + + @Schema(description = "Foo", deprecated = true) + static class Foo { + @Schema(_const = "foo") + public String foo; + @Schema(exclusiveMaximumValue = 2) + public int bar; + + @Schema(types = {"string", "object"}) + public int foobar; + } +} diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore31/Tag.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore31/Tag.java index 38e7dc66b4..3c5232af9e 100644 --- a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore31/Tag.java +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore31/Tag.java @@ -3,6 +3,9 @@ import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; +import io.swagger.v3.oas.annotations.StringToClassMapItem; +import io.swagger.v3.oas.annotations.media.Schema; + @XmlRootElement(name = "Tag") public class Tag { private long id; @@ -25,4 +28,36 @@ public String getName() { public void setName(String name) { this.name = name; } + + @Schema( + properties = { + @StringToClassMapItem(key = "foo", value = Foo.class), + @StringToClassMapItem(key = "bar", value = Bar.class) + }, + ref = "#/components/schemas/Category", + description = "child description" + ) + public Object annotated; + + @Schema(description = "Foo", deprecated = true) + static class Foo { + @Schema(_const = "foo") + public String foo; + @Schema(exclusiveMaximumValue = 2) + public int bar; + + @Schema(types = {"string", "object"}) + public int foobar; + } + + @Schema(description = "Bar", deprecated = true) + static class Bar { + @Schema(_const = "bar") + public String foo; + @Schema(exclusiveMaximumValue = 4) + public int bar; + + @Schema(types = {"string", "integer"}) + public int foobar; + } } diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore31/TagResource.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore31/TagResource.java new file mode 100644 index 0000000000..ef9db8d15b --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/petstore31/TagResource.java @@ -0,0 +1,15 @@ +package io.swagger.v3.jaxrs2.petstore31; + +import io.swagger.v3.oas.annotations.parameters.RequestBody; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; + +@Path("/tag") +public class TagResource { + @GET + @Path("/tag") + public SimpleTag getTag(@RequestBody SimpleCategory category) { + return null; + } +} From bf6ef9c8305d828ac69c6c177df97936f7884527 Mon Sep 17 00:00:00 2001 From: Bruno Thomas Date: Tue, 20 Jun 2023 10:29:49 +0000 Subject: [PATCH 049/131] fix: makes populating instance variables accessible to subclasses --- .../java/io/swagger/v3/jaxrs2/Reader.java | 27 ++++++++++++------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java index fe1b713186..ccaceabf85 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java @@ -97,27 +97,36 @@ public class Reader implements OpenApiReader { private static final String OPTIONS_METHOD = "options"; public Reader() { - this.openAPI = new OpenAPI(); - paths = new Paths(); - openApiTags = new LinkedHashSet<>(); - components = new Components(); - setConfiguration(new SwaggerConfiguration().openAPI(openAPI)); - + this(new OpenAPI(), new Paths(), new LinkedHashSet<>(), new Components()); } public Reader(OpenAPI openAPI) { - this(); - setConfiguration(new SwaggerConfiguration().openAPI(openAPI)); + this(openAPI, new Paths(), new LinkedHashSet<>(), new Components()); } public Reader(OpenAPIConfiguration openApiConfiguration) { - this(); + this(new OpenAPI(), new Paths(), new LinkedHashSet<>(), new Components(), openApiConfiguration); + } + + protected Reader(OpenAPI openAPI, Paths paths, Set openApiTags, Components components) { + this(openAPI, paths, openApiTags, components, new SwaggerConfiguration().openAPI(openAPI)); + } + + protected Reader(OpenAPI openAPI, Paths paths, Set openApiTags, Components components, OpenAPIConfiguration openApiConfiguration) { + this.openAPI = openAPI; + this.paths = paths; + this.openApiTags = openApiTags; + this.components = components; setConfiguration(openApiConfiguration); } + public OpenAPI getOpenAPI() { return openAPI; } + protected Set getOpenApiTags() { return openApiTags; } + protected Components getComponents() { return components; } + protected Paths getPaths() { return paths; } /** * Scans a single class for Swagger annotations - does not invoke ReaderListeners From 7cb2db467c2415e769e561b2eb17ce6db1064afd Mon Sep 17 00:00:00 2001 From: Bruno Thomas Date: Tue, 20 Jun 2023 10:51:55 +0000 Subject: [PATCH 050/131] fix: make setOperationObjectFromApiOperationAnnotation protected --- .../src/main/java/io/swagger/v3/jaxrs2/Reader.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java index ccaceabf85..8153954c03 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java @@ -1315,7 +1315,7 @@ private void setPathItemOperation(PathItem pathItemObject, String method, Operat } } - private void setOperationObjectFromApiOperationAnnotation( + protected void setOperationObjectFromApiOperationAnnotation( Operation operation, io.swagger.v3.oas.annotations.Operation apiOperation, Produces methodProduces, From b164b0561398ea780631992198a4fca667efd52f Mon Sep 17 00:00:00 2001 From: frantuma Date: Fri, 23 Jun 2023 20:34:20 +0200 Subject: [PATCH 051/131] fix python 2 gh env --- .github/workflows/prepare-release.yml | 2 ++ .github/workflows/release.yml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index e6f64e307c..3872b449d9 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -8,6 +8,8 @@ jobs: build: runs-on: ubuntu-latest + container: + image: python:2.7.18-buster steps: - uses: actions/checkout@v2 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b3692606e5..f75e9a96ae 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -8,6 +8,8 @@ jobs: build: runs-on: ubuntu-latest + container: + image: python:2.7.18-buster steps: - uses: actions/checkout@v2 From 5880083b5a43f23a8563cb54fa2c98cf4c5ed367 Mon Sep 17 00:00:00 2001 From: frantuma Date: Fri, 23 Jun 2023 20:50:55 +0200 Subject: [PATCH 052/131] fix python 2 gh env --- .github/workflows/prepare-release.yml | 4 ---- .github/workflows/release.yml | 4 ---- 2 files changed, 8 deletions(-) diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index 3872b449d9..0a807ff397 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -18,10 +18,6 @@ jobs: with: app_id: ${{ secrets.APP_ID }} private_key: ${{ secrets.APP_PRIVATE_KEY }} - - name: Set up Python 2.7 - uses: actions/setup-python@v2 - with: - python-version: 2.x - name: Set up Java 11 uses: actions/setup-java@v1 with: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f75e9a96ae..3ee57c62fa 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -18,10 +18,6 @@ jobs: with: app_id: ${{ secrets.APP_ID }} private_key: ${{ secrets.APP_PRIVATE_KEY }} - - name: Set up Python 2.7 - uses: actions/setup-python@v2 - with: - python-version: 2.x - name: Set up Java 11 uses: actions/setup-java@v1 with: From 03a50d586b5015c727c6881ed7267a770b7a98fc Mon Sep 17 00:00:00 2001 From: frantuma Date: Sat, 24 Jun 2023 08:18:45 +0200 Subject: [PATCH 053/131] fix python 2 gh env --- .github/workflows/prepare-release.yml | 6 ++++-- .github/workflows/release.yml | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index 0a807ff397..dfcc128ab8 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -8,8 +8,6 @@ jobs: build: runs-on: ubuntu-latest - container: - image: python:2.7.18-buster steps: - uses: actions/checkout@v2 @@ -18,6 +16,10 @@ jobs: with: app_id: ${{ secrets.APP_ID }} private_key: ${{ secrets.APP_PRIVATE_KEY }} + - name: Set up Python 2.7 + uses: MatteoH2O1999/setup-python@v1 + with: + python-version: 2.7 - name: Set up Java 11 uses: actions/setup-java@v1 with: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3ee57c62fa..491265c2a9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -8,8 +8,6 @@ jobs: build: runs-on: ubuntu-latest - container: - image: python:2.7.18-buster steps: - uses: actions/checkout@v2 @@ -18,6 +16,10 @@ jobs: with: app_id: ${{ secrets.APP_ID }} private_key: ${{ secrets.APP_PRIVATE_KEY }} + - name: Set up Python 2.7 + uses: MatteoH2O1999/setup-python@v1 + with: + python-version: 2.7 - name: Set up Java 11 uses: actions/setup-java@v1 with: From ce06c5ec8e7b4fb028be85335d74905ea311609c Mon Sep 17 00:00:00 2001 From: frantuma Date: Sat, 24 Jun 2023 06:31:43 +0000 Subject: [PATCH 054/131] prepare release 2.2.13 --- README.md | 5 +++-- modules/swagger-annotations/pom.xml | 2 +- modules/swagger-core/pom.xml | 2 +- .../swagger-eclipse-transformer-maven-plugin/pom.xml | 2 +- modules/swagger-gradle-plugin/README.md | 4 ++-- modules/swagger-gradle-plugin/gradle.properties | 2 +- .../io/swagger/v3/plugins/gradle/SwaggerPlugin.java | 2 +- .../v3/plugins/gradle/SwaggerResolveTest.java | 4 ++-- modules/swagger-integration/pom.xml | 2 +- .../swagger-jaxrs2-servlet-initializer-v2/pom.xml | 2 +- modules/swagger-jaxrs2-servlet-initializer/pom.xml | 2 +- modules/swagger-jaxrs2/pom.xml | 2 +- modules/swagger-maven-plugin/README.md | 12 ++++++------ modules/swagger-maven-plugin/pom.xml | 2 +- modules/swagger-models/pom.xml | 2 +- .../modules/swagger-annotations-jakarta/pom.xml | 2 +- .../modules/swagger-core-jakarta/pom.xml | 2 +- .../modules/swagger-integration-jakarta/pom.xml | 2 +- .../modules/swagger-jaxrs2-jakarta/pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../modules/swagger-maven-plugin-jakarta/pom.xml | 2 +- .../modules/swagger-models-jakarta/pom.xml | 2 +- modules/swagger-project-jakarta/pom.xml | 2 +- pom.xml | 2 +- 25 files changed, 34 insertions(+), 33 deletions(-) diff --git a/README.md b/README.md index 2b8a09d4de..9563ab641c 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,8 @@ The OpenAPI Specification has undergone several revisions since initial creation Swagger core Version | Release Date | OpenAPI Spec compatibility | Notes | Status ------------------------- | ------------ | -------------------------- | ----- | ---- -2.2.12 (**current stable**)| 2023-06-13 | 3.x | [tag v2.2.12](https://github.com/swagger-api/swagger-core/tree/v2.2.12) | Supported +2.2.13 (**current stable**)| 2023-06-24 | 3.x | [tag v2.2.13](https://github.com/swagger-api/swagger-core/tree/v2.2.13) | Supported +2.2.12 | 2023-06-13 | 3.x | [tag v2.2.12](https://github.com/swagger-api/swagger-core/tree/v2.2.12) | Supported 2.2.11 | 2023-06-01 | 3.x | [tag v2.2.11](https://github.com/swagger-api/swagger-core/tree/v2.2.11) | Supported 2.2.10 | 2023-05-15 | 3.x | [tag v2.2.10](https://github.com/swagger-api/swagger-core/tree/v2.2.10) | Supported 2.2.9 | 2023-03-20 | 3.x | [tag v2.2.9](https://github.com/swagger-api/swagger-core/tree/v2.2.9) | Supported @@ -98,7 +99,7 @@ You need the following installed and available in your $PATH: * Jackson 2.4.5 or greater -### To build from source (currently 2.2.13-SNAPSHOT) +### To build from source (currently 2.2.14-SNAPSHOT) ``` # first time building locally mvn -N diff --git a/modules/swagger-annotations/pom.xml b/modules/swagger-annotations/pom.xml index 8b8e3a131a..aaa7f21c1e 100644 --- a/modules/swagger-annotations/pom.xml +++ b/modules/swagger-annotations/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.13-SNAPSHOT + 2.2.13 ../.. 4.0.0 diff --git a/modules/swagger-core/pom.xml b/modules/swagger-core/pom.xml index e24a0d2879..737491d2d1 100644 --- a/modules/swagger-core/pom.xml +++ b/modules/swagger-core/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.13-SNAPSHOT + 2.2.13 ../.. 4.0.0 diff --git a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml index b56156b20d..ae0c4e2d14 100644 --- a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml +++ b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.13-SNAPSHOT + 2.2.13 ../.. 4.0.0 diff --git a/modules/swagger-gradle-plugin/README.md b/modules/swagger-gradle-plugin/README.md index 0d12f1be59..de59206349 100644 --- a/modules/swagger-gradle-plugin/README.md +++ b/modules/swagger-gradle-plugin/README.md @@ -26,7 +26,7 @@ Alternatively provide as value a classpath with the following dependencies (repl ``` plugins { - id "io.swagger.core.v3.swagger-gradle-plugin" version "2.2.12" + id "io.swagger.core.v3.swagger-gradle-plugin" version "2.2.13" } ``` ### Gradle 1.x and 2.0 @@ -43,7 +43,7 @@ buildscript { } } dependencies { - classpath "io.swagger.core.v3:swagger-gradle-plugin:2.2.12" + classpath "io.swagger.core.v3:swagger-gradle-plugin:2.2.13" } } diff --git a/modules/swagger-gradle-plugin/gradle.properties b/modules/swagger-gradle-plugin/gradle.properties index 2f675ff750..3e03d0a97d 100644 --- a/modules/swagger-gradle-plugin/gradle.properties +++ b/modules/swagger-gradle-plugin/gradle.properties @@ -1,2 +1,2 @@ -version=2.2.13-SNAPSHOT +version=2.2.13 jettyVersion=9.4.49.v20220914 diff --git a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java index 5d93a835ac..935596cae6 100644 --- a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java +++ b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java @@ -16,7 +16,7 @@ public void apply(Project project) { config.defaultDependencies(new Action() { public void execute(DependencySet dependencies) { dependencies.add(project.getDependencies().create("org.apache.commons:commons-lang3:3.12.0")); - dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.13-SNAPSHOT")); + dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.13")); dependencies.add(project.getDependencies().create("javax.ws.rs:javax.ws.rs-api:2.1")); dependencies.add(project.getDependencies().create("javax.servlet:javax.servlet-api:3.1.0")); } diff --git a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java index bf10d9c343..f46baaf6c9 100644 --- a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java +++ b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java @@ -81,7 +81,7 @@ public void testSwaggerResolveTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.13-SNAPSHOT'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.13'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + @@ -154,7 +154,7 @@ public void testSwaggerResolveWithOAS31OptionTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.13-SNAPSHOT'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.13'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + diff --git a/modules/swagger-integration/pom.xml b/modules/swagger-integration/pom.xml index 6918f8d822..0ef501b647 100644 --- a/modules/swagger-integration/pom.xml +++ b/modules/swagger-integration/pom.xml @@ -6,7 +6,7 @@ io.swagger.core.v3 swagger-project - 2.2.13-SNAPSHOT + 2.2.13 ../.. swagger-integration diff --git a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml index 66356ca13b..eec1437151 100644 --- a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.13-SNAPSHOT + 2.2.13 ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2-servlet-initializer/pom.xml b/modules/swagger-jaxrs2-servlet-initializer/pom.xml index 0ddab39611..975e48ee4a 100644 --- a/modules/swagger-jaxrs2-servlet-initializer/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.13-SNAPSHOT + 2.2.13 ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2/pom.xml b/modules/swagger-jaxrs2/pom.xml index 3b85dc57d2..de944f4462 100644 --- a/modules/swagger-jaxrs2/pom.xml +++ b/modules/swagger-jaxrs2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.13-SNAPSHOT + 2.2.13 ../../ 4.0.0 diff --git a/modules/swagger-maven-plugin/README.md b/modules/swagger-maven-plugin/README.md index a6198c4892..605e5bf937 100644 --- a/modules/swagger-maven-plugin/README.md +++ b/modules/swagger-maven-plugin/README.md @@ -22,7 +22,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin - 2.2.12 + 2.2.13 openapi ${project.build.directory}/generatedtest @@ -47,7 +47,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-jaxrs2 - 2.2.12 + 2.2.13 @@ -73,7 +73,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin-jakarta - 2.2.12 + 2.2.13 openapi ${project.build.directory}/generatedtest @@ -98,7 +98,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-jaxrs2-jakarta - 2.2.12 + 2.2.13 @@ -126,7 +126,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin - 2.2.12 + 2.2.13 openapi ${project.build.directory}/generatedtest @@ -155,7 +155,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin-jakarta - 2.2.12 + 2.2.13 openapi ${project.build.directory}/generatedtest diff --git a/modules/swagger-maven-plugin/pom.xml b/modules/swagger-maven-plugin/pom.xml index 28ec832dfd..ddb00657a6 100644 --- a/modules/swagger-maven-plugin/pom.xml +++ b/modules/swagger-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.13-SNAPSHOT + 2.2.13 ../.. 4.0.0 diff --git a/modules/swagger-models/pom.xml b/modules/swagger-models/pom.xml index dafa89548b..3168d952f3 100644 --- a/modules/swagger-models/pom.xml +++ b/modules/swagger-models/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.13-SNAPSHOT + 2.2.13 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml index 39848454ae..a12864e2f0 100644 --- a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.13-SNAPSHOT + 2.2.13 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml index c3a36305ef..8b836e51a1 100644 --- a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.13-SNAPSHOT + 2.2.13 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml index b03cfdec07..d059404dc8 100644 --- a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.13-SNAPSHOT + 2.2.13 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml index f2541682b3..544dfeb96e 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.13-SNAPSHOT + 2.2.13 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml index 9e200683bb..75361572e9 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.13-SNAPSHOT + 2.2.13 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml index b7d203fc0b..95dc5adc1a 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.13-SNAPSHOT + 2.2.13 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml index 5e5e15e1e9..feeb8d2012 100644 --- a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.13-SNAPSHOT + 2.2.13 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml index ede9486773..7c4b27cd71 100644 --- a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.13-SNAPSHOT + 2.2.13 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/pom.xml b/modules/swagger-project-jakarta/pom.xml index 6b3037e5b2..6143cd499a 100644 --- a/modules/swagger-project-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/pom.xml @@ -6,7 +6,7 @@ pom swagger-project-jakarta swagger-project-jakarta - 2.2.13-SNAPSHOT + 2.2.13 https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git diff --git a/pom.xml b/pom.xml index 85af0f4a8b..cde31a3f8e 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ pom swagger-project swagger-project - 2.2.13-SNAPSHOT + 2.2.13 https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git From 2c1d41dfd9294f78b07e32404cb1d9fe0f12c38e Mon Sep 17 00:00:00 2001 From: frantuma Date: Sat, 24 Jun 2023 06:53:13 +0000 Subject: [PATCH 055/131] bump snapshot 2.2.14-SNAPSHOT --- modules/swagger-annotations/pom.xml | 2 +- modules/swagger-core/pom.xml | 2 +- modules/swagger-eclipse-transformer-maven-plugin/pom.xml | 2 +- modules/swagger-gradle-plugin/gradle.properties | 2 +- .../main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java | 2 +- .../java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java | 4 ++-- modules/swagger-integration/pom.xml | 2 +- modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml | 2 +- modules/swagger-jaxrs2-servlet-initializer/pom.xml | 2 +- modules/swagger-jaxrs2/pom.xml | 2 +- modules/swagger-maven-plugin/pom.xml | 2 +- modules/swagger-models/pom.xml | 2 +- .../modules/swagger-annotations-jakarta/pom.xml | 2 +- .../modules/swagger-core-jakarta/pom.xml | 2 +- .../modules/swagger-integration-jakarta/pom.xml | 2 +- .../modules/swagger-jaxrs2-jakarta/pom.xml | 2 +- .../swagger-jaxrs2-servlet-initializer-jakarta/pom.xml | 2 +- .../swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml | 2 +- .../modules/swagger-maven-plugin-jakarta/pom.xml | 2 +- .../modules/swagger-models-jakarta/pom.xml | 2 +- modules/swagger-project-jakarta/pom.xml | 2 +- pom.xml | 2 +- 22 files changed, 23 insertions(+), 23 deletions(-) diff --git a/modules/swagger-annotations/pom.xml b/modules/swagger-annotations/pom.xml index aaa7f21c1e..9ef40aae65 100644 --- a/modules/swagger-annotations/pom.xml +++ b/modules/swagger-annotations/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.13 + 2.2.14-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-core/pom.xml b/modules/swagger-core/pom.xml index 737491d2d1..ae8296404a 100644 --- a/modules/swagger-core/pom.xml +++ b/modules/swagger-core/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.13 + 2.2.14-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml index ae0c4e2d14..57a656b622 100644 --- a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml +++ b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.13 + 2.2.14-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-gradle-plugin/gradle.properties b/modules/swagger-gradle-plugin/gradle.properties index 3e03d0a97d..af6f621f78 100644 --- a/modules/swagger-gradle-plugin/gradle.properties +++ b/modules/swagger-gradle-plugin/gradle.properties @@ -1,2 +1,2 @@ -version=2.2.13 +version=2.2.14-SNAPSHOT jettyVersion=9.4.49.v20220914 diff --git a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java index 935596cae6..86ed5e7a8e 100644 --- a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java +++ b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java @@ -16,7 +16,7 @@ public void apply(Project project) { config.defaultDependencies(new Action() { public void execute(DependencySet dependencies) { dependencies.add(project.getDependencies().create("org.apache.commons:commons-lang3:3.12.0")); - dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.13")); + dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.14-SNAPSHOT")); dependencies.add(project.getDependencies().create("javax.ws.rs:javax.ws.rs-api:2.1")); dependencies.add(project.getDependencies().create("javax.servlet:javax.servlet-api:3.1.0")); } diff --git a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java index f46baaf6c9..08da4edd16 100644 --- a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java +++ b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java @@ -81,7 +81,7 @@ public void testSwaggerResolveTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.13'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.14-SNAPSHOT'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + @@ -154,7 +154,7 @@ public void testSwaggerResolveWithOAS31OptionTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.13'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.14-SNAPSHOT'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + diff --git a/modules/swagger-integration/pom.xml b/modules/swagger-integration/pom.xml index 0ef501b647..38390ed923 100644 --- a/modules/swagger-integration/pom.xml +++ b/modules/swagger-integration/pom.xml @@ -6,7 +6,7 @@ io.swagger.core.v3 swagger-project - 2.2.13 + 2.2.14-SNAPSHOT ../.. swagger-integration diff --git a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml index eec1437151..3e7a05848a 100644 --- a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.13 + 2.2.14-SNAPSHOT ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2-servlet-initializer/pom.xml b/modules/swagger-jaxrs2-servlet-initializer/pom.xml index 975e48ee4a..de1f796c26 100644 --- a/modules/swagger-jaxrs2-servlet-initializer/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.13 + 2.2.14-SNAPSHOT ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2/pom.xml b/modules/swagger-jaxrs2/pom.xml index de944f4462..8a43f2bfbf 100644 --- a/modules/swagger-jaxrs2/pom.xml +++ b/modules/swagger-jaxrs2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.13 + 2.2.14-SNAPSHOT ../../ 4.0.0 diff --git a/modules/swagger-maven-plugin/pom.xml b/modules/swagger-maven-plugin/pom.xml index ddb00657a6..9842edf9ae 100644 --- a/modules/swagger-maven-plugin/pom.xml +++ b/modules/swagger-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.13 + 2.2.14-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-models/pom.xml b/modules/swagger-models/pom.xml index 3168d952f3..119627b49b 100644 --- a/modules/swagger-models/pom.xml +++ b/modules/swagger-models/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.13 + 2.2.14-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml index a12864e2f0..a79cf422c0 100644 --- a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.13 + 2.2.14-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml index 8b836e51a1..64b88d518e 100644 --- a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.13 + 2.2.14-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml index d059404dc8..42c93ecbd9 100644 --- a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.13 + 2.2.14-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml index 544dfeb96e..1db0f9dbbf 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.13 + 2.2.14-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml index 75361572e9..f5652dda07 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.13 + 2.2.14-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml index 95dc5adc1a..4b19afa9f1 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.13 + 2.2.14-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml index feeb8d2012..90d9fe99b4 100644 --- a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.13 + 2.2.14-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml index 7c4b27cd71..24f10b90b0 100644 --- a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.13 + 2.2.14-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/pom.xml b/modules/swagger-project-jakarta/pom.xml index 6143cd499a..f6afaff12e 100644 --- a/modules/swagger-project-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/pom.xml @@ -6,7 +6,7 @@ pom swagger-project-jakarta swagger-project-jakarta - 2.2.13 + 2.2.14-SNAPSHOT https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git diff --git a/pom.xml b/pom.xml index cde31a3f8e..f56224f73e 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ pom swagger-project swagger-project - 2.2.13 + 2.2.14-SNAPSHOT https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git From 51dd0da0d35260904871956cdb26c7da66b0d210 Mon Sep 17 00:00:00 2001 From: frantuma Date: Sat, 24 Jun 2023 16:53:34 +0200 Subject: [PATCH 056/131] add missing 3.1 constructs --- .../io/swagger/v3/oas/models/links/Link.java | 24 ++++-- .../swagger/v3/oas/models/media/Schema.java | 75 ++++++++++++++++++- 2 files changed, 93 insertions(+), 6 deletions(-) diff --git a/modules/swagger-models/src/main/java/io/swagger/v3/oas/models/links/Link.java b/modules/swagger-models/src/main/java/io/swagger/v3/oas/models/links/Link.java index e9ce8a6850..77bc884af8 100644 --- a/modules/swagger-models/src/main/java/io/swagger/v3/oas/models/links/Link.java +++ b/modules/swagger-models/src/main/java/io/swagger/v3/oas/models/links/Link.java @@ -19,6 +19,10 @@ public class Link { private String operationId = null; private Map parameters = null; private Object requestBody = null; + /** + * @deprecated as it's not part of OpenAPI specification + */ + @Deprecated private Map headers = null; private String description = null; private String $ref = null; @@ -123,24 +127,34 @@ public Link addParameter(String name, String parameter) { } /** - * returns the headers property from a Link instance. - * - * @return Headers headers - **/ - + * @deprecated as it's not part of OpenAPI specification + */ + @Deprecated public Map getHeaders() { return headers; } + /** + * @deprecated as it's not part of OpenAPI specification + */ + @Deprecated public void setHeaders(Map headers) { this.headers = headers; } + /** + * @deprecated as it's not part of OpenAPI specification + */ + @Deprecated public Link headers(Map headers) { this.headers = headers; return this; } + /** + * @deprecated as it's not part of OpenAPI specification + */ + @Deprecated public Link addHeaderObject(String name, Header header) { if (this.headers == null) { headers = new LinkedHashMap<>(); diff --git a/modules/swagger-models/src/main/java/io/swagger/v3/oas/models/media/Schema.java b/modules/swagger-models/src/main/java/io/swagger/v3/oas/models/media/Schema.java index 42f3242bd8..dd41701ea2 100644 --- a/modules/swagger-models/src/main/java/io/swagger/v3/oas/models/media/Schema.java +++ b/modules/swagger-models/src/main/java/io/swagger/v3/oas/models/media/Schema.java @@ -152,6 +152,19 @@ public Schema specVersion(SpecVersion specVersion) { @OpenAPI31 private String $anchor; + /** + * @since 2.2.8 (OpenAPI 3.1.0) + */ + @OpenAPI31 + private String $vocabulary; + + /** + * @since 2.2.8 (OpenAPI 3.1.0) + */ + @OpenAPI31 + private String $dynamicAnchor; + + /** * @since 2.2.0 (OpenAPI 3.1.0) */ @@ -493,6 +506,62 @@ public boolean addType(String type) { return this; } + /** + * + * @since 2.2.8 (OpenAPI 3.1.0) + */ + @OpenAPI31 + public String get$vocabulary() { + return $vocabulary; + } + + /** + * + * @since 2.2.8 (OpenAPI 3.1.0) + */ + @OpenAPI31 + public void set$vocabulary(String $vocabulary) { + this.$vocabulary = $vocabulary; + } + + /** + * + * @since 2.2.8 (OpenAPI 3.1.0) + */ + @OpenAPI31 + public Schema $vocabulary(String $vocabulary) { + this.$vocabulary = $vocabulary; + return this; + } + + /** + * + * @since 2.2.8 (OpenAPI 3.1.0) + */ + @OpenAPI31 + public String get$dynamicAnchor() { + return $dynamicAnchor; + } + + /** + * + * @since 2.2.8 (OpenAPI 3.1.0) + */ + @OpenAPI31 + public void set$dynamicAnchor(String $dynamicAnchor) { + this.$dynamicAnchor = $dynamicAnchor; + } + + /** + * + * @since 2.2.8 (OpenAPI 3.1.0) + */ + @OpenAPI31 + public Schema $dynamicAnchor(String $dynamicAnchor) { + this.$dynamicAnchor = $dynamicAnchor; + return this; + } + /** * * @since 2.2.0 (OpenAPI 3.1.0) @@ -1973,6 +2042,8 @@ public boolean equals(java.lang.Object o) { Objects.equals(this.$id, schema.$id) && Objects.equals(this.$anchor, schema.$anchor) && Objects.equals(this.$schema, schema.$schema) && + Objects.equals(this.$vocabulary, schema.$vocabulary) && + Objects.equals(this.$dynamicAnchor, schema.$dynamicAnchor) && Objects.equals(this.types, schema.types) && Objects.equals(this.allOf, schema.allOf) && Objects.equals(this.anyOf, schema.anyOf) && @@ -2007,7 +2078,7 @@ public int hashCode() { exclusiveMinimum, exclusiveMinimumValue, maxLength, minLength, pattern, maxItems, minItems, uniqueItems, maxProperties, minProperties, required, type, not, properties, additionalProperties, description, format, $ref, nullable, readOnly, writeOnly, example, externalDocs, deprecated, xml, extensions, - discriminator, _enum, _default, patternProperties, $id, $anchor, $schema, types, allOf, anyOf, oneOf, _const, + discriminator, _enum, _default, patternProperties, $id, $anchor, $schema, $vocabulary, $dynamicAnchor, types, allOf, anyOf, oneOf, _const, contentEncoding, contentMediaType, contentSchema, propertyNames, unevaluatedProperties, maxContains, minContains, additionalItems, unevaluatedItems, _if, _else, then, dependentRequired, dependentSchemas, $comment, examples, prefixItems, items); @@ -2079,6 +2150,8 @@ public String toString() { sb.append(" $id: ").append(toIndentedString($id)).append("\n"); sb.append(" $anchor: ").append(toIndentedString($anchor)).append("\n"); sb.append(" $schema: ").append(toIndentedString($schema)).append("\n"); + sb.append(" $vocabulary: ").append(toIndentedString($vocabulary)).append("\n"); + sb.append(" $dynamicAnchor: ").append(toIndentedString($dynamicAnchor)).append("\n"); sb.append(" const: ").append(toIndentedString(_const)).append("\n"); sb.append(" contentEncoding: ").append(toIndentedString(contentEncoding)).append("\n"); sb.append(" contentMediaType: ").append(toIndentedString(contentMediaType)).append("\n"); From 3235affc34f18211037a8ea1bda50f3651e69648 Mon Sep 17 00:00:00 2001 From: frantuma Date: Sat, 24 Jun 2023 21:29:14 +0200 Subject: [PATCH 057/131] enhance resolving with refs and allows refs siblings in properties --- .../v3/core/converter/AnnotatedType.java | 16 ++ .../v3/core/jackson/ModelResolver.java | 102 +++++--- .../v3/core/util/AnnotationsUtils.java | 33 ++- .../v3/core/util/ReferenceTypeUtils.java | 1 + .../resolving/v31/ModelResolverOAS31Test.java | 241 ++++++++++-------- .../v31/model/ModelWithOAS31StuffMinimal.java | 29 +++ .../v31/model/siblings/Category.java | 16 ++ .../resolving/v31/model/siblings/Pet.java | 17 ++ .../java/io/swagger/v3/jaxrs2/Reader.java | 2 +- .../java/io/swagger/v3/jaxrs2/ReaderTest.java | 103 +++----- .../v3/jaxrs2/resources/SiblingsResource.java | 18 ++ .../jaxrs2/resources/siblings/Category.java | 16 ++ .../v3/jaxrs2/resources/siblings/Pet.java | 17 ++ .../resources/petstore/WebHookResource.yaml | 12 +- .../parameters/Parameters31Resource.yaml | 21 +- 15 files changed, 413 insertions(+), 231 deletions(-) create mode 100644 modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/ModelWithOAS31StuffMinimal.java create mode 100644 modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/siblings/Category.java create mode 100644 modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/siblings/Pet.java create mode 100644 modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/SiblingsResource.java create mode 100644 modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/siblings/Category.java create mode 100644 modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/siblings/Pet.java diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/converter/AnnotatedType.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/converter/AnnotatedType.java index c8a3369839..96e634f0fb 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/converter/AnnotatedType.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/converter/AnnotatedType.java @@ -1,6 +1,7 @@ package io.swagger.v3.core.converter; import com.fasterxml.jackson.annotation.JsonView; +import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.media.Schema; import java.lang.annotation.Annotation; @@ -25,6 +26,8 @@ public class AnnotatedType { private boolean skipJsonIdentity; private String propertyName; + private Components components; + public AnnotatedType() { } @@ -149,6 +152,19 @@ public AnnotatedType ctxAnnotations(Annotation[] ctxAnnotations) { return this; } + public Components getComponents() { + return components; + } + + public void setComponents(Components components) { + this.components = components; + } + + public AnnotatedType components(Components components) { + setComponents(components); + return this; + } + public Type getType() { return type; } 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 40055b07b5..b45f867b2b 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 @@ -249,6 +249,7 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context .resolveAsRef(annotatedType.isResolveAsRef()) .jsonViewAnnotation(annotatedType.getJsonViewAnnotation()) .propertyName(annotatedType.getPropertyName()) + .components(annotatedType.getComponents()) .skipOverride(true); if (resolvedArrayAnnotation != null) { ArraySchema schema = new ArraySchema(); @@ -260,7 +261,7 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context innerSchema = primitive; } else { innerSchema = context.resolve(aType); - if (innerSchema != null && "object".equals(innerSchema.getType()) && StringUtils.isNotBlank(innerSchema.getName())) { + if (innerSchema != null && isObjectSchema(innerSchema) && StringUtils.isNotBlank(innerSchema.getName())) { // create a reference for the items if (context.getDefinedModels().containsKey(innerSchema.getName())) { innerSchema = new Schema().$ref(constructRef(innerSchema.getName())); @@ -273,7 +274,7 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context return schema; } else { Schema implSchema = context.resolve(aType); - if (implSchema != null && aType.isResolveAsRef() && "object".equals(implSchema.getType()) && StringUtils.isNotBlank(implSchema.getName())) { + if (implSchema != null && aType.isResolveAsRef() && isObjectSchema(implSchema) && StringUtils.isNotBlank(implSchema.getName())) { // create a reference for the items if (context.getDefinedModels().containsKey(implSchema.getName())) { implSchema = new Schema().$ref(constructRef(implSchema.getName())); @@ -409,6 +410,7 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context .jsonViewAnnotation(annotatedType.getJsonViewAnnotation()) .propertyName(annotatedType.getPropertyName()) .ctxAnnotations(annotatedType.getCtxAnnotations()) + .components(annotatedType.getComponents()) .skipOverride(true); return context.resolve(aType); } @@ -437,7 +439,7 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context if (keyType != null && valueType != null) { if (ReflectionUtils.isSystemType(type) && !annotatedType.isSchemaProperty() && !annotatedType.isResolveAsRef()) { - context.resolve(new AnnotatedType().type(valueType).jsonViewAnnotation(annotatedType.getJsonViewAnnotation())); + context.resolve(new AnnotatedType().components(annotatedType.getComponents()).type(valueType).jsonViewAnnotation(annotatedType.getJsonViewAnnotation())); return null; } Schema addPropertiesSchema = context.resolve( @@ -449,12 +451,13 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context .resolveAsRef(annotatedType.isResolveAsRef()) .jsonViewAnnotation(annotatedType.getJsonViewAnnotation()) .propertyName(annotatedType.getPropertyName()) + .components(annotatedType.getComponents()) .parent(annotatedType.getParent())); if (addPropertiesSchema != null) { if (StringUtils.isNotBlank(addPropertiesSchema.getName())) { pName = addPropertiesSchema.getName(); } - if ("object".equals(addPropertiesSchema.getType()) && pName != null) { + if (isObjectSchema(addPropertiesSchema) && pName != null) { // create a reference for the items if (context.getDefinedModels().containsKey(pName)) { addPropertiesSchema = new Schema().$ref(constructRef(pName)); @@ -468,7 +471,7 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context model = mapModel; } else if (valueType != null) { if (ReflectionUtils.isSystemType(type) && !annotatedType.isSchemaProperty() && !annotatedType.isResolveAsRef()) { - context.resolve(new AnnotatedType().type(valueType).jsonViewAnnotation(annotatedType.getJsonViewAnnotation())); + context.resolve(new AnnotatedType().components(annotatedType.getComponents()).type(valueType).jsonViewAnnotation(annotatedType.getJsonViewAnnotation())); return null; } Schema items = context.resolve(new AnnotatedType() @@ -479,6 +482,7 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context .resolveAsRef(annotatedType.isResolveAsRef()) .propertyName(annotatedType.getPropertyName()) .jsonViewAnnotation(annotatedType.getJsonViewAnnotation()) + .components(annotatedType.getComponents()) .parent(annotatedType.getParent())); if (items == null) { @@ -501,7 +505,7 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context if (StringUtils.isNotBlank(items.getName())) { pName = items.getName(); } - if ("object".equals(items.getType()) && pName != null) { + if (isObjectSchema(items) && pName != null) { // create a reference for the items if (context.getDefinedModels().containsKey(pName)) { items = new Schema().$ref(constructRef(pName)); @@ -667,6 +671,7 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context .jsonViewAnnotation(annotatedType.getJsonViewAnnotation()) .skipSchemaName(true) .schemaProperty(true) + .components(annotatedType.getComponents()) .propertyName(propName); final AnnotatedMember propMember = member; @@ -684,7 +689,12 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context } }); property = clone(context.resolve(aType)); - + if (openapi31) { + Optional reResolvedProperty = AnnotationsUtils.getSchemaFromAnnotation(ctxSchema, annotatedType.getComponents(), null, openapi31, property); + if (reResolvedProperty.isPresent()) { + property = reResolvedProperty.get(); + } + } if (property != null) { Boolean required = md.getRequired(); if (required != null && !Boolean.FALSE.equals(required)) { @@ -713,7 +723,7 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context } final BeanDescription propBeanDesc = _mapper.getSerializationConfig().introspect(propType); if (property != null && !propType.isContainerType()) { - if ("object".equals(property.getType())) { + if (isObjectSchema(property)) { // create a reference for the property String pName = _typeName(propType, propBeanDesc); if (StringUtils.isNotBlank(property.getName())) { @@ -803,7 +813,7 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context } Class not = resolvedSchemaAnnotation.not(); if (!Void.class.equals(not)) { - model.not((new Schema().$ref(context.resolve(new AnnotatedType().type(not).jsonViewAnnotation(annotatedType.getJsonViewAnnotation())).getName()))); + model.not((new Schema().$ref(context.resolve(new AnnotatedType().components(annotatedType.getComponents()).type(not).jsonViewAnnotation(annotatedType.getJsonViewAnnotation())).getName()))); } if (resolvedSchemaAnnotation.requiredProperties() != null && resolvedSchemaAnnotation.requiredProperties().length > 0 && @@ -858,7 +868,7 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context .filter(c -> !(c.equals(Void.class))) .collect(Collectors.toList()); allOfFiltered.forEach(c -> { - Schema allOfRef = context.resolve(new AnnotatedType().type(c).jsonViewAnnotation(annotatedType.getJsonViewAnnotation())); + Schema allOfRef = context.resolve(new AnnotatedType().components(annotatedType.getComponents()).type(c).jsonViewAnnotation(annotatedType.getJsonViewAnnotation())); Schema refSchema = new Schema().$ref(Components.COMPONENTS_SCHEMAS_REF + allOfRef.getName()); if (StringUtils.isBlank(allOfRef.getName())) { refSchema = allOfRef; @@ -879,7 +889,7 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context .filter(c -> !(c.equals(Void.class))) .collect(Collectors.toList()); anyOfFiltered.forEach(c -> { - Schema anyOfRef = context.resolve(new AnnotatedType().type(c).jsonViewAnnotation(annotatedType.getJsonViewAnnotation())); + Schema anyOfRef = context.resolve(new AnnotatedType().components(annotatedType.getComponents()).type(c).jsonViewAnnotation(annotatedType.getJsonViewAnnotation())); if (StringUtils.isNotBlank(anyOfRef.getName())) { composedSchema.addAnyOfItem(new Schema().$ref(Components.COMPONENTS_SCHEMAS_REF + anyOfRef.getName())); } else { @@ -898,7 +908,7 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context .filter(c -> !(c.equals(Void.class))) .collect(Collectors.toList()); oneOfFiltered.forEach(c -> { - Schema oneOfRef = context.resolve(new AnnotatedType().type(c).jsonViewAnnotation(annotatedType.getJsonViewAnnotation())); + Schema oneOfRef = context.resolve(new AnnotatedType().components(annotatedType.getComponents()).type(c).jsonViewAnnotation(annotatedType.getJsonViewAnnotation())); if (oneOfRef != null) { if (StringUtils.isBlank(oneOfRef.getName())) { composedSchema.addOneOfItem(oneOfRef); @@ -931,7 +941,7 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context } if (model != null && annotatedType.isResolveAsRef() && - (isComposedSchema || "object".equals(model.getType())) && + (isComposedSchema || isObjectSchema(model)) && StringUtils.isNotBlank(model.getName())) { if (context.getDefinedModels().containsKey(model.getName())) { @@ -1254,6 +1264,7 @@ protected Schema processAsId(String propertyName, AnnotatedType type, .ctxAnnotations(annotations) .jsonViewAnnotation(type.getJsonViewAnnotation()) .schemaProperty(true) + .components(type.getComponents()) .propertyName(type.getPropertyName()); return context.resolve(aType); @@ -1392,6 +1403,7 @@ private AnnotatedType removeJsonIdentityAnnotations(AnnotatedType type) { .type(type.getType()) .skipJsonIdentity(true) .propertyName(type.getPropertyName()) + .components(type.getComponents()) .ctxAnnotations(AnnotationsUtils.removeAnnotations(type.getCtxAnnotations(), JsonIdentityInfo.class, JsonIdentityReference.class)); } } @@ -2397,7 +2409,7 @@ protected void resolveContains(AnnotatedType annotatedType, ArraySchema arraySch } } arraySchema.setContains(contains); - resolveSchemaMembers(arraySchema, null, null, containsAnnotation); + resolveSchemaMembers(contains, null, null, containsAnnotation); Integer maxContains = resolveMaxContains(annotatedType, arraySchemaAnnotation); if (maxContains != null) { @@ -2421,7 +2433,7 @@ protected void resolveUnevaluatedItems(AnnotatedType annotatedType, ArraySchema } } arraySchema.setUnevaluatedItems(unevaluatedItems); - resolveSchemaMembers(arraySchema, null, null, unevaluatedItemsAnnotation); + resolveSchemaMembers(unevaluatedItems, null, null, unevaluatedItemsAnnotation); } protected String resolveConst(Annotated a, Annotation[] annotations, io.swagger.v3.oas.annotations.media.Schema schema) { @@ -2531,31 +2543,38 @@ protected void resolveSchemaMembers(Schema schema, AnnotatedType annotatedType, if (openapi31 && schema != null && schemaAnnotation != null) { if (!Void.class.equals(schemaAnnotation.contentSchema())) { - final Schema contentSchema = resolve(new AnnotatedType(schemaAnnotation.contentSchema()), context, next); + Schema contentSchema = resolve(new AnnotatedType(schemaAnnotation.contentSchema()), context, next); + contentSchema = buildRefSchemaIfObject(contentSchema, context); schema.setContentSchema(contentSchema); } if (!Void.class.equals(schemaAnnotation.propertyNames())) { - final Schema propertyNames = resolve(new AnnotatedType(schemaAnnotation.propertyNames()), context, next); + Schema propertyNames = resolve(new AnnotatedType(schemaAnnotation.propertyNames()), context, next); + propertyNames = buildRefSchemaIfObject(propertyNames, context); schema.setPropertyNames(propertyNames); } if (!Void.class.equals(schemaAnnotation._if())) { - final Schema ifSchema = resolve(new AnnotatedType(schemaAnnotation._if()), context, next); + Schema ifSchema = resolve(new AnnotatedType(schemaAnnotation._if()), context, next); + ifSchema = buildRefSchemaIfObject(ifSchema, context); schema.setIf(ifSchema); } if (!Void.class.equals(schemaAnnotation._else())) { - final Schema elseSchema = resolve(new AnnotatedType(schemaAnnotation._else()), context, next); + Schema elseSchema = resolve(new AnnotatedType(schemaAnnotation._else()), context, next); + elseSchema = buildRefSchemaIfObject(elseSchema, context); schema.setElse(elseSchema); } if (!Void.class.equals(schemaAnnotation.then())) { - final Schema thenSchema = resolve(new AnnotatedType(schemaAnnotation.then()), context, next); + Schema thenSchema = resolve(new AnnotatedType(schemaAnnotation.then()), context, next); + thenSchema = buildRefSchemaIfObject(thenSchema, context); schema.setThen(thenSchema); } if (!Void.class.equals(schemaAnnotation.contentSchema())) { - final Schema contentSchema = resolve(new AnnotatedType(schemaAnnotation.contentSchema()), context, next); + Schema contentSchema = resolve(new AnnotatedType(schemaAnnotation.contentSchema()), context, next); + contentSchema = buildRefSchemaIfObject(contentSchema, context); schema.setContentSchema(contentSchema); } if (!Void.class.equals(schemaAnnotation.unevaluatedProperties())) { - final Schema unevaluatedProperties = resolve(new AnnotatedType(schemaAnnotation.unevaluatedProperties()), context, next); + Schema unevaluatedProperties = resolve(new AnnotatedType(schemaAnnotation.unevaluatedProperties()), context, next); + unevaluatedProperties = buildRefSchemaIfObject(unevaluatedProperties, context); schema.setUnevaluatedProperties(unevaluatedProperties); } final Map> dependentRequired = resolveDependentRequired(a, annotations, schemaAnnotation); @@ -2563,24 +2582,30 @@ protected void resolveSchemaMembers(Schema schema, AnnotatedType annotatedType, schema.setDependentRequired(dependentRequired); } final Map dependentSchemas = resolveDependentSchemas(a, annotations, schemaAnnotation, annotatedType, context, next); - if (dependentSchemas != null && !dependentSchemas.isEmpty()) { - schema.setDependentSchemas(dependentSchemas); - if (schema.getDependentSchemas() == null) { - schema.setDependentSchemas(dependentSchemas); - } else { - schema.getDependentSchemas().putAll(dependentSchemas); + if (dependentSchemas != null) { + final Map processedDependentSchemas = new LinkedHashMap<>(); + for (String key: dependentSchemas.keySet()) { + Schema val = dependentSchemas.get(key); + processedDependentSchemas.put(key, buildRefSchemaIfObject(val, context)); + } + if (processedDependentSchemas != null && !processedDependentSchemas.isEmpty()) { + if (schema.getDependentSchemas() == null) { + schema.setDependentSchemas(processedDependentSchemas); + } else { + schema.getDependentSchemas().putAll(processedDependentSchemas); + } } } final Map patternProperties = resolvePatternProperties(a, annotations, schemaAnnotation, annotatedType, context, next); if (patternProperties != null && !patternProperties.isEmpty()) { for (String key : patternProperties.keySet()) { - schema.addPatternProperty(key, patternProperties.get(key)); + schema.addPatternProperty(key, buildRefSchemaIfObject(patternProperties.get(key), context)); } } final Map properties = resolveProperties(a, annotations, schemaAnnotation, annotatedType, context, next); if (properties != null && !properties.isEmpty()) { for (String key : properties.keySet()) { - schema.addProperty(key, properties.get(key)); + schema.addProperty(key, buildRefSchemaIfObject(properties.get(key), context)); } } } @@ -2879,4 +2904,21 @@ public boolean isOpenapi31() { public void setOpenapi31(boolean openapi31) { this.openapi31 = openapi31; } + + protected boolean isObjectSchema(Schema schema) { + return "object".equals(schema.getType()) || (schema.getType() == null && schema.getProperties() != null && !schema.getProperties().isEmpty()); + } + + protected Schema buildRefSchemaIfObject(Schema schema, ModelConverterContext context) { + if (schema == null) { + return null; + } + Schema result = schema; + if (isObjectSchema(schema) && StringUtils.isNotBlank(schema.getName())) { + if (context.getDefinedModels().containsKey(schema.getName())) { + result = new Schema().$ref(constructRef(schema.getName())); + } + } + return result; + } } diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java index 2eb0e753e2..054bce7067 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java @@ -29,6 +29,7 @@ import io.swagger.v3.oas.models.media.ComposedSchema; import io.swagger.v3.oas.models.media.Content; import io.swagger.v3.oas.models.media.Encoding; +import io.swagger.v3.oas.models.media.JsonSchema; import io.swagger.v3.oas.models.media.MediaType; import io.swagger.v3.oas.models.media.Schema; import io.swagger.v3.oas.models.servers.Server; @@ -538,16 +539,36 @@ public static Optional getSchemaFromAnnotation(io.swagger.v3.oas.annotat } public static Optional getSchemaFromAnnotation(io.swagger.v3.oas.annotations.media.Schema schema, Components components, JsonView jsonViewAnnotation, boolean openapi31) { + return getSchemaFromAnnotation(schema, components, jsonViewAnnotation, openapi31, null); + } + public static Optional getSchemaFromAnnotation( + io.swagger.v3.oas.annotations.media.Schema schema, + Components components, + JsonView jsonViewAnnotation, + boolean openapi31, + Schema existingSchema) { if (schema == null || !hasSchemaAnnotation(schema)) { - return Optional.empty(); + if (existingSchema == null || !openapi31) { + return Optional.empty(); + } else if (existingSchema != null && openapi31) { + return Optional.of(existingSchema); + } } Schema schemaObject = null; - if (schema.oneOf().length > 0 || - schema.allOf().length > 0 || - schema.anyOf().length > 0) { - schemaObject = new ComposedSchema(); + if (!openapi31) { + if (schema.oneOf().length > 0 || + schema.allOf().length > 0 || + schema.anyOf().length > 0) { + schemaObject = new ComposedSchema(); + } else { + schemaObject = new Schema(); + } } else { - schemaObject = new Schema(); + if (existingSchema == null) { + schemaObject = new JsonSchema(); + } else { + schemaObject = existingSchema; + } } if (StringUtils.isNotBlank(schema.description())) { schemaObject.setDescription(schema.description()); diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/ReferenceTypeUtils.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/ReferenceTypeUtils.java index b04d837562..feeb61356a 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/ReferenceTypeUtils.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/ReferenceTypeUtils.java @@ -50,6 +50,7 @@ public static AnnotatedType unwrapReference(AnnotatedType type) { .jsonViewAnnotation(type.getJsonViewAnnotation()) .skipSchemaName(type.isSkipSchemaName()) .skipJsonIdentity(type.isSkipJsonIdentity()) + .components(type.getComponents()) .propertyName(type.getPropertyName()); return aType; } else { diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/ModelResolverOAS31Test.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/ModelResolverOAS31Test.java index 14e31a6107..6c97faa0d1 100644 --- a/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/ModelResolverOAS31Test.java +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/ModelResolverOAS31Test.java @@ -8,6 +8,8 @@ import io.swagger.v3.core.resolving.v31.model.AnnotatedArray; import io.swagger.v3.core.resolving.v31.model.ModelWithDependentSchema; import io.swagger.v3.core.resolving.v31.model.ModelWithOAS31Stuff; +import io.swagger.v3.core.resolving.v31.model.ModelWithOAS31StuffMinimal; +import io.swagger.v3.core.util.Yaml31; import io.swagger.v3.oas.models.media.Schema; import org.testng.annotations.Test; @@ -18,10 +20,7 @@ public void testAnnotatedArray() { final ModelResolver modelResolver = new ModelResolver(mapper()).openapi31(true); final ModelConverterContextImpl context = new ModelConverterContextImpl(modelResolver); io.swagger.v3.oas.models.media.Schema model = context.resolve(new AnnotatedType(AnnotatedArray.class)); - SerializationMatchers.assertEqualsToYaml31(model, "type:\n" + - "- array\n" + - "- string\n" + - "- number\n" + + SerializationMatchers.assertEqualsToYaml31(model, "type: array\n" + "contains:\n" + " type: string\n" + "items:\n" + @@ -31,7 +30,7 @@ public void testAnnotatedArray() { "prefixItems:\n" + "- type: string\n" + "unevaluatedItems:\n" + - " type: number"); + " type: number\n"); } @Test @@ -39,98 +38,128 @@ public void testOAS31Fields() { final ModelResolver modelResolver = new ModelResolver(mapper()).openapi31(true); final ModelConverterContextImpl context = new ModelConverterContextImpl(modelResolver); Schema model = context.resolve(new AnnotatedType(ModelWithOAS31Stuff.class)); - SerializationMatchers.assertEqualsToYaml31(model, "type: object\n" + - "$comment: Random comment at schema level\n" + - "$id: http://yourdomain.com/schemas/myschema.json\n" + - "description: this is model for testing OAS 3.1 resolving\n" + - "properties:\n" + - " randomList:\n" + - " type:\n" + - " - array\n" + - " - string\n" + - " - number\n" + - " contains:\n" + + SerializationMatchers.assertEqualsToYaml31(context.getDefinedModels(), "Address:\n" + + " if:\n" + + " $ref: '#/components/schemas/AnnotatedCountry'\n" + + " then:\n" + + " $ref: '#/components/schemas/PostalCodeNumberPattern'\n" + + " else:\n" + + " $ref: '#/components/schemas/PostalCodePattern'\n" + + " dependentRequired:\n" + + " street:\n" + + " - country\n" + + " properties:\n" + + " street:\n" + " type: string\n" + - " items:\n" + + " country:\n" + " type: string\n" + - " maxContains: 10\n" + - " minContains: 1\n" + - " prefixItems:\n" + - " - type: string\n" + - " unevaluatedItems:\n" + - " type: number\n" + - " status:\n" + - " type:\n" + - " - string\n" + - " - number\n" + - " intValue:\n" + - " type: integer\n" + - " format: int32\n" + - " $anchor: intValue\n" + - " $comment: comment at schema property level\n" + - " exclusiveMaximum: 100\n" + - " exclusiveMinimum: 1\n" + - " text:\n" + - " type: string\n" + - " contentEncoding: plan/text\n" + - " contentMediaType: base64\n" + - " encodedString:\n" + - " type: string\n" + - " contentMediaType: application/jwt\n" + - " contentSchema:\n" + - " description: MultipleBaseBean\n" + - " properties:\n" + - " beanType:\n" + - " type: string\n" + - " a:\n" + - " type: integer\n" + - " format: int32\n" + - " b:\n" + - " type: string\n" + - " address:\n" + - " if:\n" + - " properties:\n" + - " country:\n" + - " const: United States\n" + - " then:\n" + - " properties:\n" + - " postalCode:\n" + - " pattern: \"[0-9]{5}(-[0-9]{4})?\"\n" + - " else:\n" + - " properties:\n" + - " postalCode:\n" + - " pattern: \"[A-Z][0-9][A-Z] [0-9][A-Z][0-9]\"\n" + - " dependentRequired:\n" + - " street:\n" + - " - country\n" + - " properties:\n" + - " street:\n" + + " enum:\n" + + " - UNITED_STATES_OF_AMERICA\n" + + " - CANADA\n" + + " propertyNames:\n" + + " $ref: '#/components/schemas/PropertyNamesPattern'\n" + + "AnnotatedCountry:\n" + + " properties:\n" + + " country:\n" + + " const: United States\n" + + "Client:\n" + + " dependentSchemas:\n" + + " creditCard:\n" + + " $ref: '#/components/schemas/CreditCard'\n" + + " patternProperties:\n" + + " creditCard:\n" + + " $ref: '#/components/schemas/CreditCard'\n" + + " properties:\n" + + " extraObject: {}\n" + + " name:\n" + + " type: string\n" + + " creditCard:\n" + + " type: integer\n" + + " format: int32\n" + + "CreditCard:\n" + + " properties:\n" + + " billingAddress:\n" + + " type: string\n" + + "ModelWithOAS31Stuff:\n" + + " type: object\n" + + " $comment: Random comment at schema level\n" + + " $id: http://yourdomain.com/schemas/myschema.json\n" + + " description: this is model for testing OAS 3.1 resolving\n" + + " properties:\n" + + " randomList:\n" + + " type: array\n" + + " contains:\n" + " type: string\n" + - " country:\n" + + " items:\n" + " type: string\n" + - " enum:\n" + - " - UNITED_STATES_OF_AMERICA\n" + - " - CANADA\n" + - " propertyNames:\n" + - " pattern: \"^[A-Za-z_][A-Za-z0-9_]*$\"\n" + - " client:\n" + - " dependentSchemas:\n" + - " creditCard:\n" + - " properties:\n" + - " billingAddress:\n" + - " type: string\n" + - " patternProperties:\n" + - " creditCard:\n" + - " properties:\n" + - " billingAddress:\n" + - " type: string\n" + + " maxContains: 10\n" + + " minContains: 1\n" + + " prefixItems:\n" + + " - type: string\n" + + " unevaluatedItems:\n" + + " type: number\n" + + " status:\n" + + " type:\n" + + " - string\n" + + " - number\n" + + " intValue:\n" + + " type: integer\n" + + " format: int32\n" + + " $anchor: intValue\n" + + " $comment: comment at schema property level\n" + + " exclusiveMaximum: 100\n" + + " exclusiveMinimum: 1\n" + + " text:\n" + + " type: string\n" + + " contentEncoding: plan/text\n" + + " contentMediaType: base64\n" + + " encodedString:\n" + + " type: string\n" + + " contentMediaType: application/jwt\n" + + " contentSchema:\n" + + " $ref: '#/components/schemas/MultipleBaseBean'\n" + + " address:\n" + + " $ref: '#/components/schemas/Address'\n" + + " client:\n" + + " $ref: '#/components/schemas/Client'\n" + + "MultipleBaseBean:\n" + + " description: MultipleBaseBean\n" + + " properties:\n" + + " beanType:\n" + + " type: string\n" + + " a:\n" + + " type: integer\n" + + " format: int32\n" + + " b:\n" + + " type: string\n" + + "MultipleSub1Bean:\n" + + " allOf:\n" + + " - $ref: '#/components/schemas/MultipleBaseBean'\n" + + " - type: object\n" + " properties:\n" + - " extraObject: {}\n" + - " name:\n" + - " type: string\n" + - " creditCard:\n" + + " c:\n" + + " type: integer\n" + + " format: int32\n" + + " description: MultipleSub1Bean\n" + + "MultipleSub2Bean:\n" + + " allOf:\n" + + " - $ref: '#/components/schemas/MultipleBaseBean'\n" + + " - type: object\n" + + " properties:\n" + + " d:\n" + " type: integer\n" + - " format: int32"); + " format: int32\n" + + " description: MultipleSub2Bean\n" + + "PostalCodeNumberPattern:\n" + + " properties:\n" + + " postalCode:\n" + + " pattern: \"[0-9]{5}(-[0-9]{4})?\"\n" + + "PostalCodePattern:\n" + + " properties:\n" + + " postalCode:\n" + + " pattern: \"[A-Z][0-9][A-Z] [0-9][A-Z][0-9]\"\n" + + "PropertyNamesPattern:\n" + + " pattern: \"^[A-Za-z_][A-Za-z0-9_]*$\""); } @Test @@ -139,18 +168,22 @@ public void testDependentSchemasAnnotation() { final ModelConverterContextImpl context = new ModelConverterContextImpl(modelResolver); io.swagger.v3.oas.models.media.Schema model = context.resolve(new AnnotatedType(ModelWithDependentSchema.class)); - SerializationMatchers.assertEqualsToYaml31(model, "dependentSchemas:\n" + - " value:\n" + - " properties:\n" + - " enable:\n" + - " properties:\n" + - " type:\n" + - " type: boolean\n" + - "properties:\n" + - " name:\n" + - " type: string\n" + - " value:\n" + - " type: integer\n" + - " format: int32"); + SerializationMatchers.assertEqualsToYaml31(context.getDefinedModels(), "BooleanFakeClass:\n" + + " properties:\n" + + " type:\n" + + " type: boolean\n" + + "ModelWithDependentSchema:\n" + + " dependentSchemas:\n" + + " value:\n" + + " properties:\n" + + " enable:\n" + + " $ref: '#/components/schemas/BooleanFakeClass'\n" + + " properties:\n" + + " name:\n" + + " type: string\n" + + " value:\n" + + " type: integer\n" + + " format: int32\n"); } + } diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/ModelWithOAS31StuffMinimal.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/ModelWithOAS31StuffMinimal.java new file mode 100644 index 0000000000..5694406339 --- /dev/null +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/ModelWithOAS31StuffMinimal.java @@ -0,0 +1,29 @@ +package io.swagger.v3.core.resolving.v31.model; + +import io.swagger.v3.oas.annotations.StringToClassMapItem; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Schema; + +import java.util.List; + +@Schema( + $id = "http://yourdomain.com/schemas/myschema.json", + description = "this is model for testing OAS 3.1 resolving", + $comment = "Random comment at schema level", + types = {"object"} +) +public class ModelWithOAS31StuffMinimal { + + private Addr address; + + public Addr getAddress() { + return address; + } + + public void setAddress(Addr address) { + this.address = address; + } + public static class Addr { + public String foo; + } +} diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/siblings/Category.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/siblings/Category.java new file mode 100644 index 0000000000..3aaa52bb74 --- /dev/null +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/siblings/Category.java @@ -0,0 +1,16 @@ +package io.swagger.v3.core.resolving.v31.model.siblings; + +import io.swagger.v3.oas.annotations.media.Schema; + +@Schema(description = "parent") +public class Category { + private long id; + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } +} diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/siblings/Pet.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/siblings/Pet.java new file mode 100644 index 0000000000..848e291f5d --- /dev/null +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/siblings/Pet.java @@ -0,0 +1,17 @@ +package io.swagger.v3.core.resolving.v31.model.siblings; + +import io.swagger.v3.oas.annotations.media.Schema; + +public class Pet { + private Category category; + + @Schema(description = "child") + public Category getCategory() { + return category; + } + + public void setCategory(Category category) { + this.category = category; + } + +} diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java index 8153954c03..77792a5ff5 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java @@ -1130,7 +1130,7 @@ protected Operation parseMethod( final Class subResource = getSubResourceWithJaxRsSubresourceLocatorSpecs(method); Schema returnTypeSchema = null; if (!shouldIgnoreClass(returnType.getTypeName()) && !method.getGenericReturnType().equals(subResource)) { - ResolvedSchema resolvedSchema = ModelConverters.getInstance(config.isOpenAPI31()).resolveAsResolvedSchema(new AnnotatedType(returnType).resolveAsRef(true).jsonViewAnnotation(jsonViewAnnotation)); + ResolvedSchema resolvedSchema = ModelConverters.getInstance(config.isOpenAPI31()).resolveAsResolvedSchema(new AnnotatedType(returnType).resolveAsRef(true).jsonViewAnnotation(jsonViewAnnotation).components(components)); if (resolvedSchema.schema != null) { returnTypeSchema = resolvedSchema.schema; Content content = new Content(); diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java index acd7b58694..df93ceee01 100644 --- a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java @@ -18,6 +18,7 @@ import io.swagger.v3.jaxrs2.petstore31.TagResource; import io.swagger.v3.jaxrs2.resources.ResponseReturnTypeResource; import io.swagger.v3.jaxrs2.resources.SchemaPropertiesResource; +import io.swagger.v3.jaxrs2.resources.SiblingsResource; import io.swagger.v3.jaxrs2.resources.SingleExampleResource; import io.swagger.v3.jaxrs2.resources.BasicFieldsResource; import io.swagger.v3.jaxrs2.resources.BookStoreTicket2646; @@ -3360,22 +3361,7 @@ public void testOas31Petstore() { " status:\n" + " type: string\n" + " if:\n" + - " deprecated: true\n" + - " description: if schema\n" + - " properties:\n" + - " foo:\n" + - " type: string\n" + - " const: foo\n" + - " bar:\n" + - " type: integer\n" + - " format: int32\n" + - " exclusiveMaximum: 2\n" + - " foobar:\n" + - " type:\n" + - " - integer\n" + - " - string\n" + - " - object\n" + - " format: int32\n" + + " $ref: '#/components/schemas/IfSchema'\n" + " $id: idtest\n" + " description: pet status in the store\n" + " enum:\n" + @@ -3393,39 +3379,10 @@ public void testOas31Petstore() { " $ref: '#/components/schemas/Category'\n" + " description: child description\n" + " properties:\n" + - " bar:\n" + - " deprecated: true\n" + - " description: Bar\n" + - " properties:\n" + - " foo:\n" + - " type: string\n" + - " const: bar\n" + - " bar:\n" + - " type: integer\n" + - " format: int32\n" + - " exclusiveMaximum: 4\n" + - " foobar:\n" + - " type:\n" + - " - integer\n" + - " - string\n" + - " format: int32\n" + " foo:\n" + - " deprecated: true\n" + - " description: Foo\n" + - " properties:\n" + - " foo:\n" + - " type: string\n" + - " const: foo\n" + - " bar:\n" + - " type: integer\n" + - " format: int32\n" + - " exclusiveMaximum: 2\n" + - " foobar:\n" + - " type:\n" + - " - integer\n" + - " - string\n" + - " - object\n" + - " format: int32\n" + + " $ref: '#/components/schemas/Foo'\n" + + " bar:\n" + + " $ref: '#/components/schemas/Bar'\n" + " xml:\n" + " name: Tag\n"; SerializationMatchers.assertEqualsToYaml31(openAPI, yaml); @@ -3475,23 +3432,41 @@ public void test31RefSiblings() { " description: child description\n" + " properties:\n" + " foo:\n" + - " deprecated: true\n" + - " description: Foo\n" + - " properties:\n" + - " foo:\n" + - " type: string\n" + - " const: foo\n" + - " bar:\n" + - " type: integer\n" + - " format: int32\n" + - " exclusiveMaximum: 2\n" + - " foobar:\n" + - " type:\n" + - " - integer\n" + - " - string\n" + - " - object\n" + - " format: int32\n" + + " $ref: '#/components/schemas/Foo'\n" + " SimpleCategory: {}\n"; SerializationMatchers.assertEqualsToYaml31(openAPI, yaml); } + + @Test + public void testSiblings() { + Reader reader = new Reader(new SwaggerConfiguration().openAPI(new OpenAPI()).openAPI31(true)); + + OpenAPI openAPI = reader.read(SiblingsResource.class); + String yaml = "openapi: 3.1.0\n" + + "paths:\n" + + " /test:\n" + + " get:\n" + + " operationId: getCart\n" + + " responses:\n" + + " default:\n" + + " description: default response\n" + + " content:\n" + + " '*/*':\n" + + " schema:\n" + + " $ref: '#/components/schemas/Pet'\n" + + "components:\n" + + " schemas:\n" + + " Category:\n" + + " description: parent\n" + + " properties:\n" + + " id:\n" + + " type: integer\n" + + " format: int64\n" + + " Pet:\n" + + " properties:\n" + + " category:\n" + + " $ref: '#/components/schemas/Category'\n" + + " description: child\n"; + SerializationMatchers.assertEqualsToYaml31(openAPI, yaml); + } } diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/SiblingsResource.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/SiblingsResource.java new file mode 100644 index 0000000000..c90a5761bb --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/SiblingsResource.java @@ -0,0 +1,18 @@ +package io.swagger.v3.jaxrs2.resources; + +import io.swagger.v3.jaxrs2.resources.siblings.Pet; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; +import java.util.List; + +@Path("/test") +public class SiblingsResource { + @GET + public Pet getCart() { + return null; + } +} diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/siblings/Category.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/siblings/Category.java new file mode 100644 index 0000000000..781e4ff05b --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/siblings/Category.java @@ -0,0 +1,16 @@ +package io.swagger.v3.jaxrs2.resources.siblings; + +import io.swagger.v3.oas.annotations.media.Schema; + +@Schema(description = "parent") +public class Category { + private long id; + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } +} diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/siblings/Pet.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/siblings/Pet.java new file mode 100644 index 0000000000..44cc0a41ba --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/siblings/Pet.java @@ -0,0 +1,17 @@ +package io.swagger.v3.jaxrs2.resources.siblings; + +import io.swagger.v3.oas.annotations.media.Schema; + +public class Pet { + private Category category; + + @Schema(description = "child") + public Category getCategory() { + return category; + } + + public void setCategory(Category category) { + this.category = category; + } + +} diff --git a/modules/swagger-jaxrs2/src/test/resources/petstore/WebHookResource.yaml b/modules/swagger-jaxrs2/src/test/resources/petstore/WebHookResource.yaml index fee1c0928a..34ed3ea8f9 100644 --- a/modules/swagger-jaxrs2/src/test/resources/petstore/WebHookResource.yaml +++ b/modules/swagger-jaxrs2/src/test/resources/petstore/WebHookResource.yaml @@ -49,17 +49,11 @@ webhooks: - string - number if: - properties: - subscriptionId: - type: string + $ref: '#/components/schemas/SubscriptionResponse' then: - properties: - subscriptionId: - type: string + $ref: '#/components/schemas/SubscriptionResponse' else: - properties: - subscriptionId: - type: string + $ref: '#/components/schemas/SubscriptionResponse' $anchor: parameter $anchor $schema: parameter $schema exclusiveMaximum: 100 diff --git a/modules/swagger-jaxrs2/src/test/resources/petstore/parameters/Parameters31Resource.yaml b/modules/swagger-jaxrs2/src/test/resources/petstore/parameters/Parameters31Resource.yaml index 339d8bc64c..6a6bbc2596 100644 --- a/modules/swagger-jaxrs2/src/test/resources/petstore/parameters/Parameters31Resource.yaml +++ b/modules/swagger-jaxrs2/src/test/resources/petstore/parameters/Parameters31Resource.yaml @@ -23,17 +23,11 @@ paths: - string - number if: - properties: - subscriptionId: - type: string + $ref: '#/components/schemas/SubscriptionResponse' then: - properties: - subscriptionId: - type: string + $ref: '#/components/schemas/SubscriptionResponse' else: - properties: - subscriptionId: - type: string + $ref: '#/components/schemas/SubscriptionResponse' $anchor: parameter $anchor $schema: parameter $schema exclusiveMaximum: 100 @@ -118,14 +112,7 @@ components: type: integer format: int64 category: - properties: - id: - type: integer - format: int64 - name: - type: string - xml: - name: Category + $ref: '#/components/schemas/Category' name: type: string photoUrls: From 63aece797925568aaaddec08d68e0e3977b5f07a Mon Sep 17 00:00:00 2001 From: frantuma Date: Sun, 25 Jun 2023 12:31:13 +0200 Subject: [PATCH 058/131] resolve response from return type in case of @Operation annotation --- .../src/main/java/io/swagger/v3/jaxrs2/Reader.java | 12 ++++++++++++ .../test/java/io/swagger/v3/jaxrs2/ReaderTest.java | 2 +- .../v3/jaxrs2/resources/SiblingsResource.java | 2 ++ .../io/swagger/v3/jaxrs2/resources/siblings/Pet.java | 1 + 4 files changed, 16 insertions(+), 1 deletion(-) diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java index 77792a5ff5..404520c6e4 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java @@ -978,6 +978,11 @@ protected Operation parseMethod( io.swagger.v3.oas.annotations.parameters.RequestBody apiRequestBody = ReflectionUtils.getAnnotation(method, io.swagger.v3.oas.annotations.parameters.RequestBody.class); + io.swagger.v3.oas.annotations.responses.ApiResponse[] operationApiResponses = new io.swagger.v3.oas.annotations.responses.ApiResponse[] {}; + if (apiOperation != null) { + operationApiResponses = apiOperation.responses(); + } + ExternalDocumentation apiExternalDocumentation = ReflectionUtils.getAnnotation(method, ExternalDocumentation.class); // callbacks @@ -1179,6 +1184,13 @@ protected Operation parseMethod( returnTypeSchema, classProduces, methodProduces); + } else if (operationApiResponses != null && operationApiResponses.length > 0) { + resolveResponseSchemaFromReturnType( + operation, + operationApiResponses, + returnTypeSchema, + classProduces, + methodProduces); } } diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java index df93ceee01..ded46a96e2 100644 --- a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java @@ -12,7 +12,6 @@ import io.swagger.v3.core.jackson.ModelResolver; import io.swagger.v3.core.model.ApiDescription; import io.swagger.v3.core.util.PrimitiveType; -import io.swagger.v3.core.util.Yaml; import io.swagger.v3.jaxrs2.matchers.SerializationMatchers; import io.swagger.v3.jaxrs2.petstore31.PetResource; import io.swagger.v3.jaxrs2.petstore31.TagResource; @@ -3463,6 +3462,7 @@ public void testSiblings() { " type: integer\n" + " format: int64\n" + " Pet:\n" + + " description: Pet\n" + " properties:\n" + " category:\n" + " $ref: '#/components/schemas/Category'\n" + diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/SiblingsResource.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/SiblingsResource.java index c90a5761bb..a06e527a88 100644 --- a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/SiblingsResource.java +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/SiblingsResource.java @@ -1,6 +1,7 @@ package io.swagger.v3.jaxrs2.resources; import io.swagger.v3.jaxrs2.resources.siblings.Pet; +import io.swagger.v3.oas.annotations.media.Schema; import javax.ws.rs.GET; import javax.ws.rs.Path; @@ -12,6 +13,7 @@ @Path("/test") public class SiblingsResource { @GET + @Schema(description = "Cart Pet") public Pet getCart() { return null; } diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/siblings/Pet.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/siblings/Pet.java index 44cc0a41ba..a0ede48cb5 100644 --- a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/siblings/Pet.java +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/siblings/Pet.java @@ -2,6 +2,7 @@ import io.swagger.v3.oas.annotations.media.Schema; +@Schema(description = "Pet") public class Pet { private Category category; From 800fb35907faf25a26bbb10f235a0a5ac307fbe8 Mon Sep 17 00:00:00 2001 From: frantuma Date: Sun, 25 Jun 2023 19:38:52 +0200 Subject: [PATCH 059/131] enhance OAS 3.1 resolving and allow siblings in response schemas --- .../v3/oas/annotations/media/Schema.java | 18 +++++++ .../v3/core/jackson/ModelResolver.java | 40 +++++++++++++-- .../v3/core/util/AnnotationsUtils.java | 34 ++++++++++++- .../java/io/swagger/v3/jaxrs2/Reader.java | 10 +++- .../java/io/swagger/v3/jaxrs2/ReaderTest.java | 39 ++++++++++++++ .../resources/SiblingsResourceSimple.java | 51 +++++++++++++++++++ .../jaxrs2/resources/siblings/PetSimple.java | 8 +++ .../swagger/v3/oas/models/media/Schema.java | 4 +- 8 files changed, 195 insertions(+), 9 deletions(-) create mode 100644 modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/SiblingsResourceSimple.java create mode 100644 modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/siblings/PetSimple.java diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Schema.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Schema.java index 776d2f9f54..b5d02b0a83 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Schema.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Schema.java @@ -399,6 +399,24 @@ @OpenAPI31 String $anchor() default ""; + /** + * Provides the $vocabulary related to schema + * + * @since 2.2.14 / OpenAPI 3.1 + * @return $vocabulary schema + */ + @OpenAPI31 + String $vocabulary() default ""; + + /** + * Provides the $dynamicAnchor related to schema + * + * @since 2.2.14 / OpenAPI 3.1 + * @return $dynamicAnchor schema + */ + @OpenAPI31 + String $dynamicAnchor() default ""; + /** * Provides the content encoding related to this schema * 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 b45f867b2b..8139c90363 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 @@ -2386,6 +2386,20 @@ protected String resolveId(Annotated a, Annotation[] annotations, io.swagger.v3. return null; } + protected String resolve$vocabulary(Annotated a, Annotation[] annotations, io.swagger.v3.oas.annotations.media.Schema schema) { + if (schema != null && StringUtils.isNotBlank(schema.$vocabulary())) { + return schema.$vocabulary(); + } + return null; + } + + protected String resolve$dynamicAnchor(Annotated a, Annotation[] annotations, io.swagger.v3.oas.annotations.media.Schema schema) { + if (schema != null && StringUtils.isNotBlank(schema.$dynamicAnchor())) { + return schema.$dynamicAnchor(); + } + return null; + } + protected String resolveContentEncoding(Annotated a, Annotation[] annotations, io.swagger.v3.oas.annotations.media.Schema schema) { if (schema != null && StringUtils.isNotBlank(schema.contentEncoding())) { return schema.contentEncoding(); @@ -2567,16 +2581,24 @@ protected void resolveSchemaMembers(Schema schema, AnnotatedType annotatedType, thenSchema = buildRefSchemaIfObject(thenSchema, context); schema.setThen(thenSchema); } - if (!Void.class.equals(schemaAnnotation.contentSchema())) { - Schema contentSchema = resolve(new AnnotatedType(schemaAnnotation.contentSchema()), context, next); - contentSchema = buildRefSchemaIfObject(contentSchema, context); - schema.setContentSchema(contentSchema); - } if (!Void.class.equals(schemaAnnotation.unevaluatedProperties())) { Schema unevaluatedProperties = resolve(new AnnotatedType(schemaAnnotation.unevaluatedProperties()), context, next); unevaluatedProperties = buildRefSchemaIfObject(unevaluatedProperties, context); schema.setUnevaluatedProperties(unevaluatedProperties); } + + if (schemaAnnotation.additionalProperties().equals(io.swagger.v3.oas.annotations.media.Schema.AdditionalPropertiesValue.TRUE)) { + schema.additionalProperties(true); + } else if (schemaAnnotation.additionalProperties().equals(io.swagger.v3.oas.annotations.media.Schema.AdditionalPropertiesValue.FALSE)) { + schema.additionalProperties(false); + } else { + if (!schemaAnnotation.additionalPropertiesSchema().equals(Void.class)) { + Schema additionalPropertiesSchema = resolve(new AnnotatedType(schemaAnnotation.additionalPropertiesSchema()), context, next); + additionalPropertiesSchema = buildRefSchemaIfObject(additionalPropertiesSchema, context); + schema.additionalProperties(additionalPropertiesSchema); + } + } + final Map> dependentRequired = resolveDependentRequired(a, annotations, schemaAnnotation); if (dependentRequired != null && !dependentRequired.isEmpty()) { schema.setDependentRequired(dependentRequired); @@ -2739,6 +2761,14 @@ protected void resolveSchemaMembers(Schema schema, Annotated a, Annotation[] ann if ($comment != null) { schema.set$comment($comment); } + String $vocabulary = resolve$vocabulary(a, annotations, schemaAnnotation); + if ($vocabulary != null) { + schema.set$vocabulary($vocabulary); + } + String $dynamicAnchor = resolve$dynamicAnchor(a, annotations, schemaAnnotation); + if ($dynamicAnchor != null) { + schema.$dynamicAnchor($dynamicAnchor); + } String contentEncoding = resolveContentEncoding(a, annotations, schemaAnnotation); if (contentEncoding != null) { schema.setContentEncoding(contentEncoding); diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java index 054bce7067..8a1e4ced80 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java @@ -556,6 +556,9 @@ public static Optional getSchemaFromAnnotation( } Schema schemaObject = null; if (!openapi31) { + if (existingSchema != null) { + return Optional.of(existingSchema); + } if (schema.oneOf().length > 0 || schema.allOf().length > 0 || schema.anyOf().length > 0) { @@ -597,6 +600,12 @@ public static Optional getSchemaFromAnnotation( if (StringUtils.isNotBlank(schema.$anchor())) { schemaObject.set$anchor(schema.$anchor()); } + if (StringUtils.isNotBlank(schema.$vocabulary())) { + schemaObject.set$vocabulary(schema.$vocabulary()); + } + if (StringUtils.isNotBlank(schema.$dynamicAnchor())) { + schemaObject.set$dynamicAnchor(schema.$dynamicAnchor()); + } if (StringUtils.isNotBlank(schema.contentEncoding())) { schemaObject.setContentEncoding(schema.contentEncoding()); } @@ -810,6 +819,9 @@ public static Schema resolveSchemaFromType(Class schemaImplementation, Compon } public static Schema resolveSchemaFromType(Class schemaImplementation, Components components, JsonView jsonViewAnnotation, boolean openapi31) { + return resolveSchemaFromType(schemaImplementation, components, jsonViewAnnotation, openapi31, null, null); + } + public static Schema resolveSchemaFromType(Class schemaImplementation, Components components, JsonView jsonViewAnnotation, boolean openapi31, io.swagger.v3.oas.annotations.media.Schema schemaAnnotation, io.swagger.v3.oas.annotations.media.ArraySchema arrayAnnotation) { Schema schemaObject; PrimitiveType primitiveType = PrimitiveType.fromType(schemaImplementation); if (primitiveType != null) { @@ -836,6 +848,10 @@ public static Schema resolveSchemaFromType(Class schemaImplementation, Compon } } } + Optional reResolvedSchema = getSchemaFromAnnotation(schemaAnnotation, components, jsonViewAnnotation, openapi31, schemaObject); + if (reResolvedSchema.isPresent()) { + schemaObject = reResolvedSchema.get(); + } if (StringUtils.isBlank(schemaObject.get$ref()) && StringUtils.isBlank(schemaObject.getType())) { // default to string schemaObject.setType("string"); @@ -1531,7 +1547,7 @@ public static Optional getSchema(io.swagger.v3.oas.annotations JsonView jsonViewAnnotation, boolean openapi31) { if (schemaImplementation != Void.class) { - Schema schemaObject = resolveSchemaFromType(schemaImplementation, components, jsonViewAnnotation, openapi31); + Schema schemaObject = resolveSchemaFromType(schemaImplementation, components, jsonViewAnnotation, openapi31, schemaAnnotation, arrayAnnotation); if (StringUtils.isNotBlank(schemaAnnotation.format())) { schemaObject.setFormat(schemaAnnotation.format()); } @@ -2237,6 +2253,22 @@ public Class contains() { return patch.$anchor(); } + @Override + public String $vocabulary() { + if (StringUtils.isNotBlank(master.$vocabulary()) || StringUtils.isBlank(patch.$vocabulary())) { + return master.$vocabulary(); + } + return patch.$vocabulary(); + } + + @Override + public String $dynamicAnchor() { + if (StringUtils.isNotBlank(master.$dynamicAnchor()) || StringUtils.isBlank(patch.$dynamicAnchor())) { + return master.$dynamicAnchor(); + } + return patch.$dynamicAnchor(); + } + @Override public String contentEncoding() { if (StringUtils.isNotBlank(master.contentEncoding()) || StringUtils.isBlank(patch.contentEncoding())) { diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java index 404520c6e4..740b56b572 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java @@ -1225,7 +1225,15 @@ protected void resolveResponseSchemaFromReturnType( ApiResponse opResponse = operation.getResponses().get(response.responseCode()); if (opResponse != null) { if (opResponse.getContent() != null) { - for (MediaType mediaType : opResponse.getContent().values()) { + for (String key : opResponse.getContent().keySet()) { + MediaType mediaType = opResponse.getContent().get(key); + Optional content = Arrays.stream(response.content()).filter(c -> c.mediaType().equals(key)).findFirst(); + if (content.isPresent()) { + Optional reResolvedSchema = AnnotationsUtils.getSchemaFromAnnotation(content.get().schema(), components, null, config.isOpenAPI31(), schema); + if (reResolvedSchema.isPresent()) { + schema = reResolvedSchema.get(); + } + } mediaType.schema(schema); } } else { diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java index ded46a96e2..0db5b4ed0d 100644 --- a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java @@ -18,6 +18,7 @@ import io.swagger.v3.jaxrs2.resources.ResponseReturnTypeResource; import io.swagger.v3.jaxrs2.resources.SchemaPropertiesResource; import io.swagger.v3.jaxrs2.resources.SiblingsResource; +import io.swagger.v3.jaxrs2.resources.SiblingsResourceSimple; import io.swagger.v3.jaxrs2.resources.SingleExampleResource; import io.swagger.v3.jaxrs2.resources.BasicFieldsResource; import io.swagger.v3.jaxrs2.resources.BookStoreTicket2646; @@ -3469,4 +3470,42 @@ public void testSiblings() { " description: child\n"; SerializationMatchers.assertEqualsToYaml31(openAPI, yaml); } + + @Test + public void testSiblingsOnResource() { + Reader reader = new Reader(new SwaggerConfiguration().openAPI(new OpenAPI()).openAPI31(true)); + + OpenAPI openAPI = reader.read(SiblingsResourceSimple.class); + String yaml = "openapi: 3.1.0\n" + + "paths:\n" + + " /test:\n" + + " get:\n" + + " operationId: getCart\n" + + " responses:\n" + + " \"300\":\n" + + " description: aaa\n" + + " content:\n" + + " '*/*':\n" + + " schema:\n" + + " $ref: '#/components/schemas/PetSimple'\n" + + " description: resource pet\n" + + " readOnly: true\n" + + " /test/impl:\n" + + " get:\n" + + " operationId: getCartImpl\n" + + " responses:\n" + + " \"300\":\n" + + " description: aaa\n" + + " content:\n" + + " '*/*':\n" + + " schema:\n" + + " $ref: '#/components/schemas/PetSimple'\n" + + " description: resource pet\n" + + " readOnly: true\n" + + "components:\n" + + " schemas:\n" + + " PetSimple:\n" + + " description: Pet\n"; + SerializationMatchers.assertEqualsToYaml31(openAPI, yaml); + } } diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/SiblingsResourceSimple.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/SiblingsResourceSimple.java new file mode 100644 index 0000000000..cac69b3557 --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/SiblingsResourceSimple.java @@ -0,0 +1,51 @@ +package io.swagger.v3.jaxrs2.resources; + +import io.swagger.v3.jaxrs2.resources.siblings.Pet; +import io.swagger.v3.jaxrs2.resources.siblings.PetSimple; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; + +@Path("/test") +public class SiblingsResourceSimple { + @GET + @Operation( + responses = { + @ApiResponse( + responseCode = "300", + description = "aaa", + useReturnTypeSchema = true, + content = { + @Content( + mediaType = "*/*", + schema = @Schema( + description = "resource pet", + accessMode = Schema.AccessMode.READ_ONLY)) + })}) + public PetSimple getCart() { + return null; + } + + @Path("/impl") + @GET + @Operation( + responses = { + @ApiResponse( + responseCode = "300", + description = "aaa", + content = { + @Content( + mediaType = "*/*", + schema = @Schema( + description = "resource pet", + implementation = PetSimple.class, + accessMode = Schema.AccessMode.READ_ONLY)) + })}) + public PetSimple getCartImpl() { + return null; + } +} diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/siblings/PetSimple.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/siblings/PetSimple.java new file mode 100644 index 0000000000..49e36b4eec --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/siblings/PetSimple.java @@ -0,0 +1,8 @@ +package io.swagger.v3.jaxrs2.resources.siblings; + +import io.swagger.v3.oas.annotations.media.Schema; + +@Schema(description = "Pet") +public class PetSimple { + +} diff --git a/modules/swagger-models/src/main/java/io/swagger/v3/oas/models/media/Schema.java b/modules/swagger-models/src/main/java/io/swagger/v3/oas/models/media/Schema.java index dd41701ea2..c367870b67 100644 --- a/modules/swagger-models/src/main/java/io/swagger/v3/oas/models/media/Schema.java +++ b/modules/swagger-models/src/main/java/io/swagger/v3/oas/models/media/Schema.java @@ -153,13 +153,13 @@ public Schema specVersion(SpecVersion specVersion) { private String $anchor; /** - * @since 2.2.8 (OpenAPI 3.1.0) + * @since 2.2.14 (OpenAPI 3.1.0) */ @OpenAPI31 private String $vocabulary; /** - * @since 2.2.8 (OpenAPI 3.1.0) + * @since 2.2.14 (OpenAPI 3.1.0) */ @OpenAPI31 private String $dynamicAnchor; From b21266883a803bfc4a863e00fdd190f711f6d39f Mon Sep 17 00:00:00 2001 From: frantuma Date: Mon, 26 Jun 2023 10:30:25 +0200 Subject: [PATCH 060/131] allow siblings in request body schemas OAS 3.1 resolving --- .../v3/core/jackson/ModelResolver.java | 2 +- .../v3/core/util/AnnotationsUtils.java | 4 +- .../java/io/swagger/v3/jaxrs2/Reader.java | 6 +-- .../java/io/swagger/v3/jaxrs2/ReaderTest.java | 46 ++++++++++++++++++ .../SiblingsResourceRequestBody.java | 47 +++++++++++++++++++ .../resources/SiblingsResourceSimple.java | 2 +- 6 files changed, 100 insertions(+), 7 deletions(-) create mode 100644 modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/SiblingsResourceRequestBody.java 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 8139c90363..5306572c23 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 @@ -704,7 +704,7 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context addRequiredItem(model, propName); } } - if (property.get$ref() == null) { + if (property.get$ref() == null || openapi31) { if (accessMode != null) { switch (accessMode) { case AUTO: diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java index 8a1e4ced80..48428710f1 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java @@ -753,8 +753,8 @@ public static Optional getSchemaFromAnnotation( schemaObject.setReadOnly(true); schemaObject.setWriteOnly(null); } else if (schema.accessMode().equals(io.swagger.v3.oas.annotations.media.Schema.AccessMode.WRITE_ONLY)) { - schemaObject.setReadOnly(false); - schemaObject.setWriteOnly(null); + schemaObject.setReadOnly(null); + schemaObject.setWriteOnly(true); } else if (schema.accessMode().equals(io.swagger.v3.oas.annotations.media.Schema.AccessMode.READ_WRITE)) { schemaObject.setReadOnly(null); schemaObject.setWriteOnly(null); diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java index 740b56b572..430e9936a4 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java @@ -759,7 +759,7 @@ protected void processRequestBody(Parameter requestBodyParameter, Operation oper io.swagger.v3.oas.annotations.parameters.RequestBody requestBodyAnnotation = getRequestBody(Arrays.asList(paramAnnotations)); if (requestBodyAnnotation != null) { - Optional optionalRequestBody = OperationParser.getRequestBody(requestBodyAnnotation, classConsumes, methodConsumes, components, jsonViewAnnotation); + Optional optionalRequestBody = OperationParser.getRequestBody(requestBodyAnnotation, classConsumes, methodConsumes, components, jsonViewAnnotation, config.isOpenAPI31()); if (optionalRequestBody.isPresent()) { RequestBody requestBody = optionalRequestBody.get(); if (StringUtils.isBlank(requestBody.get$ref()) && @@ -1047,7 +1047,7 @@ protected Operation parseMethod( // RequestBody in Method if (apiRequestBody != null && operation.getRequestBody() == null){ - OperationParser.getRequestBody(apiRequestBody, classConsumes, methodConsumes, components, jsonViewAnnotation).ifPresent( + OperationParser.getRequestBody(apiRequestBody, classConsumes, methodConsumes, components, jsonViewAnnotation, config.isOpenAPI31()).ifPresent( operation::setRequestBody); } @@ -1393,7 +1393,7 @@ protected void setOperationObjectFromApiOperationAnnotation( // RequestBody in Operation if (apiOperation.requestBody() != null && operation.getRequestBody() == null) { - OperationParser.getRequestBody(apiOperation.requestBody(), classConsumes, methodConsumes, components, jsonViewAnnotation).ifPresent( + OperationParser.getRequestBody(apiOperation.requestBody(), classConsumes, methodConsumes, components, jsonViewAnnotation, config.isOpenAPI31()).ifPresent( operation::setRequestBody); } diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java index 0db5b4ed0d..35d63f2ea0 100644 --- a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java @@ -18,6 +18,7 @@ import io.swagger.v3.jaxrs2.resources.ResponseReturnTypeResource; import io.swagger.v3.jaxrs2.resources.SchemaPropertiesResource; import io.swagger.v3.jaxrs2.resources.SiblingsResource; +import io.swagger.v3.jaxrs2.resources.SiblingsResourceRequestBody; import io.swagger.v3.jaxrs2.resources.SiblingsResourceSimple; import io.swagger.v3.jaxrs2.resources.SingleExampleResource; import io.swagger.v3.jaxrs2.resources.BasicFieldsResource; @@ -3508,4 +3509,49 @@ public void testSiblingsOnResource() { " description: Pet\n"; SerializationMatchers.assertEqualsToYaml31(openAPI, yaml); } + + @Test + public void testSiblingsOnResourceRequestBody() { + Reader reader = new Reader(new SwaggerConfiguration().openAPI(new OpenAPI()).openAPI31(true)); + + OpenAPI openAPI = reader.read(SiblingsResourceRequestBody.class); + String yaml = "openapi: 3.1.0\n" + + "paths:\n" + + " /test/bodyimpl:\n" + + " get:\n" + + " operationId: getBodyImpl\n" + + " requestBody:\n" + + " description: aaa\n" + + " content:\n" + + " application/json:\n" + + " schema:\n" + + " $ref: '#/components/schemas/PetSimple'\n" + + " description: resource pet\n" + + " writeOnly: true\n" + + " responses:\n" + + " default:\n" + + " description: default response\n" + + " content:\n" + + " '*/*': {}\n" + + " /test/bodyimplparam:\n" + + " get:\n" + + " operationId: getBodyImplParam\n" + + " requestBody:\n" + + " content:\n" + + " '*/*':\n" + + " schema:\n" + + " $ref: '#/components/schemas/PetSimple'\n" + + " description: resource pet\n" + + " writeOnly: true\n" + + " responses:\n" + + " default:\n" + + " description: default response\n" + + " content:\n" + + " '*/*': {}\n" + + "components:\n" + + " schemas:\n" + + " PetSimple:\n" + + " description: Pet\n"; + SerializationMatchers.assertEqualsToYaml31(openAPI, yaml); + } } diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/SiblingsResourceRequestBody.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/SiblingsResourceRequestBody.java new file mode 100644 index 0000000000..2360ae3f7b --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/SiblingsResourceRequestBody.java @@ -0,0 +1,47 @@ +package io.swagger.v3.jaxrs2.resources; + +import io.swagger.v3.jaxrs2.resources.siblings.PetSimple; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.parameters.RequestBody; +import io.swagger.v3.oas.annotations.responses.ApiResponse; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.core.Response; + +@Path("/test") +public class SiblingsResourceRequestBody { + @Path("/bodyimpl") + @GET + @Operation( + requestBody = + @RequestBody( + description = "aaa", + content = { + @Content( + mediaType = "application/json", + schema = @Schema( + description = "resource pet", + implementation = PetSimple.class, + accessMode = Schema.AccessMode.WRITE_ONLY)) + })) + public Response getBodyImpl(Object body) { + return null; + } + + @Path("/bodyimplparam") + @GET + public Response getBodyImplParam(@RequestBody( + content = { + @Content( + mediaType = "*/*", + schema = @Schema( + description = "resource pet", + implementation = PetSimple.class, + accessMode = Schema.AccessMode.WRITE_ONLY)) + }) Object body) { + return null; + } +} diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/SiblingsResourceSimple.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/SiblingsResourceSimple.java index cac69b3557..9d3e871411 100644 --- a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/SiblingsResourceSimple.java +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/SiblingsResourceSimple.java @@ -1,6 +1,5 @@ package io.swagger.v3.jaxrs2.resources; -import io.swagger.v3.jaxrs2.resources.siblings.Pet; import io.swagger.v3.jaxrs2.resources.siblings.PetSimple; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; @@ -48,4 +47,5 @@ public PetSimple getCart() { public PetSimple getCartImpl() { return null; } + } From 4735cc6d37834c8522e1507b3a70a6ab7d2b75e7 Mon Sep 17 00:00:00 2001 From: frantuma Date: Mon, 26 Jun 2023 08:54:43 +0000 Subject: [PATCH 061/131] prepare release 2.2.14 --- README.md | 5 +++-- modules/swagger-annotations/pom.xml | 2 +- modules/swagger-core/pom.xml | 2 +- .../swagger-eclipse-transformer-maven-plugin/pom.xml | 2 +- modules/swagger-gradle-plugin/README.md | 4 ++-- modules/swagger-gradle-plugin/gradle.properties | 2 +- .../io/swagger/v3/plugins/gradle/SwaggerPlugin.java | 2 +- .../v3/plugins/gradle/SwaggerResolveTest.java | 4 ++-- modules/swagger-integration/pom.xml | 2 +- .../swagger-jaxrs2-servlet-initializer-v2/pom.xml | 2 +- modules/swagger-jaxrs2-servlet-initializer/pom.xml | 2 +- modules/swagger-jaxrs2/pom.xml | 2 +- modules/swagger-maven-plugin/README.md | 12 ++++++------ modules/swagger-maven-plugin/pom.xml | 2 +- modules/swagger-models/pom.xml | 2 +- .../modules/swagger-annotations-jakarta/pom.xml | 2 +- .../modules/swagger-core-jakarta/pom.xml | 2 +- .../modules/swagger-integration-jakarta/pom.xml | 2 +- .../modules/swagger-jaxrs2-jakarta/pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../modules/swagger-maven-plugin-jakarta/pom.xml | 2 +- .../modules/swagger-models-jakarta/pom.xml | 2 +- modules/swagger-project-jakarta/pom.xml | 2 +- pom.xml | 2 +- 25 files changed, 34 insertions(+), 33 deletions(-) diff --git a/README.md b/README.md index 9563ab641c..434eb59399 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,8 @@ The OpenAPI Specification has undergone several revisions since initial creation Swagger core Version | Release Date | OpenAPI Spec compatibility | Notes | Status ------------------------- | ------------ | -------------------------- | ----- | ---- -2.2.13 (**current stable**)| 2023-06-24 | 3.x | [tag v2.2.13](https://github.com/swagger-api/swagger-core/tree/v2.2.13) | Supported +2.2.14 (**current stable**)| 2023-06-26 | 3.x | [tag v2.2.14](https://github.com/swagger-api/swagger-core/tree/v2.2.14) | Supported +2.2.13 | 2023-06-24 | 3.x | [tag v2.2.13](https://github.com/swagger-api/swagger-core/tree/v2.2.13) | Supported 2.2.12 | 2023-06-13 | 3.x | [tag v2.2.12](https://github.com/swagger-api/swagger-core/tree/v2.2.12) | Supported 2.2.11 | 2023-06-01 | 3.x | [tag v2.2.11](https://github.com/swagger-api/swagger-core/tree/v2.2.11) | Supported 2.2.10 | 2023-05-15 | 3.x | [tag v2.2.10](https://github.com/swagger-api/swagger-core/tree/v2.2.10) | Supported @@ -99,7 +100,7 @@ You need the following installed and available in your $PATH: * Jackson 2.4.5 or greater -### To build from source (currently 2.2.14-SNAPSHOT) +### To build from source (currently 2.2.15-SNAPSHOT) ``` # first time building locally mvn -N diff --git a/modules/swagger-annotations/pom.xml b/modules/swagger-annotations/pom.xml index 9ef40aae65..b70609103f 100644 --- a/modules/swagger-annotations/pom.xml +++ b/modules/swagger-annotations/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.14-SNAPSHOT + 2.2.14 ../.. 4.0.0 diff --git a/modules/swagger-core/pom.xml b/modules/swagger-core/pom.xml index ae8296404a..d2232fd440 100644 --- a/modules/swagger-core/pom.xml +++ b/modules/swagger-core/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.14-SNAPSHOT + 2.2.14 ../.. 4.0.0 diff --git a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml index 57a656b622..8453b15eb9 100644 --- a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml +++ b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.14-SNAPSHOT + 2.2.14 ../.. 4.0.0 diff --git a/modules/swagger-gradle-plugin/README.md b/modules/swagger-gradle-plugin/README.md index de59206349..3fef3ef41d 100644 --- a/modules/swagger-gradle-plugin/README.md +++ b/modules/swagger-gradle-plugin/README.md @@ -26,7 +26,7 @@ Alternatively provide as value a classpath with the following dependencies (repl ``` plugins { - id "io.swagger.core.v3.swagger-gradle-plugin" version "2.2.13" + id "io.swagger.core.v3.swagger-gradle-plugin" version "2.2.14" } ``` ### Gradle 1.x and 2.0 @@ -43,7 +43,7 @@ buildscript { } } dependencies { - classpath "io.swagger.core.v3:swagger-gradle-plugin:2.2.13" + classpath "io.swagger.core.v3:swagger-gradle-plugin:2.2.14" } } diff --git a/modules/swagger-gradle-plugin/gradle.properties b/modules/swagger-gradle-plugin/gradle.properties index af6f621f78..17c909d6a4 100644 --- a/modules/swagger-gradle-plugin/gradle.properties +++ b/modules/swagger-gradle-plugin/gradle.properties @@ -1,2 +1,2 @@ -version=2.2.14-SNAPSHOT +version=2.2.14 jettyVersion=9.4.49.v20220914 diff --git a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java index 86ed5e7a8e..7300db8c31 100644 --- a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java +++ b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java @@ -16,7 +16,7 @@ public void apply(Project project) { config.defaultDependencies(new Action() { public void execute(DependencySet dependencies) { dependencies.add(project.getDependencies().create("org.apache.commons:commons-lang3:3.12.0")); - dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.14-SNAPSHOT")); + dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.14")); dependencies.add(project.getDependencies().create("javax.ws.rs:javax.ws.rs-api:2.1")); dependencies.add(project.getDependencies().create("javax.servlet:javax.servlet-api:3.1.0")); } diff --git a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java index 08da4edd16..c84e67c8aa 100644 --- a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java +++ b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java @@ -81,7 +81,7 @@ public void testSwaggerResolveTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.14-SNAPSHOT'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.14'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + @@ -154,7 +154,7 @@ public void testSwaggerResolveWithOAS31OptionTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.14-SNAPSHOT'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.14'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + diff --git a/modules/swagger-integration/pom.xml b/modules/swagger-integration/pom.xml index 38390ed923..bf4fe33062 100644 --- a/modules/swagger-integration/pom.xml +++ b/modules/swagger-integration/pom.xml @@ -6,7 +6,7 @@ io.swagger.core.v3 swagger-project - 2.2.14-SNAPSHOT + 2.2.14 ../.. swagger-integration diff --git a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml index 3e7a05848a..6779ba3fdc 100644 --- a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.14-SNAPSHOT + 2.2.14 ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2-servlet-initializer/pom.xml b/modules/swagger-jaxrs2-servlet-initializer/pom.xml index de1f796c26..0237b6f49f 100644 --- a/modules/swagger-jaxrs2-servlet-initializer/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.14-SNAPSHOT + 2.2.14 ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2/pom.xml b/modules/swagger-jaxrs2/pom.xml index 8a43f2bfbf..61c9b79009 100644 --- a/modules/swagger-jaxrs2/pom.xml +++ b/modules/swagger-jaxrs2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.14-SNAPSHOT + 2.2.14 ../../ 4.0.0 diff --git a/modules/swagger-maven-plugin/README.md b/modules/swagger-maven-plugin/README.md index 605e5bf937..b4376b340f 100644 --- a/modules/swagger-maven-plugin/README.md +++ b/modules/swagger-maven-plugin/README.md @@ -22,7 +22,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin - 2.2.13 + 2.2.14 openapi ${project.build.directory}/generatedtest @@ -47,7 +47,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-jaxrs2 - 2.2.13 + 2.2.14 @@ -73,7 +73,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin-jakarta - 2.2.13 + 2.2.14 openapi ${project.build.directory}/generatedtest @@ -98,7 +98,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-jaxrs2-jakarta - 2.2.13 + 2.2.14 @@ -126,7 +126,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin - 2.2.13 + 2.2.14 openapi ${project.build.directory}/generatedtest @@ -155,7 +155,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin-jakarta - 2.2.13 + 2.2.14 openapi ${project.build.directory}/generatedtest diff --git a/modules/swagger-maven-plugin/pom.xml b/modules/swagger-maven-plugin/pom.xml index 9842edf9ae..6e7232eaa4 100644 --- a/modules/swagger-maven-plugin/pom.xml +++ b/modules/swagger-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.14-SNAPSHOT + 2.2.14 ../.. 4.0.0 diff --git a/modules/swagger-models/pom.xml b/modules/swagger-models/pom.xml index 119627b49b..4fac4b6297 100644 --- a/modules/swagger-models/pom.xml +++ b/modules/swagger-models/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.14-SNAPSHOT + 2.2.14 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml index a79cf422c0..5e93ada73c 100644 --- a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.14-SNAPSHOT + 2.2.14 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml index 64b88d518e..d46691f1c2 100644 --- a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.14-SNAPSHOT + 2.2.14 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml index 42c93ecbd9..9ea18c067e 100644 --- a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.14-SNAPSHOT + 2.2.14 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml index 1db0f9dbbf..2cfbcd3de3 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.14-SNAPSHOT + 2.2.14 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml index f5652dda07..2efad8ce12 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.14-SNAPSHOT + 2.2.14 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml index 4b19afa9f1..c1e0f388ec 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.14-SNAPSHOT + 2.2.14 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml index 90d9fe99b4..14f57c3545 100644 --- a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.14-SNAPSHOT + 2.2.14 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml index 24f10b90b0..8eda4736cf 100644 --- a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.14-SNAPSHOT + 2.2.14 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/pom.xml b/modules/swagger-project-jakarta/pom.xml index f6afaff12e..955124c917 100644 --- a/modules/swagger-project-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/pom.xml @@ -6,7 +6,7 @@ pom swagger-project-jakarta swagger-project-jakarta - 2.2.14-SNAPSHOT + 2.2.14 https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git diff --git a/pom.xml b/pom.xml index f56224f73e..71529549bf 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ pom swagger-project swagger-project - 2.2.14-SNAPSHOT + 2.2.14 https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git From 306905caa9b2d0604f8a97c2e5e98456f9802089 Mon Sep 17 00:00:00 2001 From: frantuma Date: Mon, 26 Jun 2023 09:24:45 +0000 Subject: [PATCH 062/131] bump snapshot 2.2.15-SNAPSHOT --- modules/swagger-annotations/pom.xml | 2 +- modules/swagger-core/pom.xml | 2 +- modules/swagger-eclipse-transformer-maven-plugin/pom.xml | 2 +- modules/swagger-gradle-plugin/gradle.properties | 2 +- .../main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java | 2 +- .../java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java | 4 ++-- modules/swagger-integration/pom.xml | 2 +- modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml | 2 +- modules/swagger-jaxrs2-servlet-initializer/pom.xml | 2 +- modules/swagger-jaxrs2/pom.xml | 2 +- modules/swagger-maven-plugin/pom.xml | 2 +- modules/swagger-models/pom.xml | 2 +- .../modules/swagger-annotations-jakarta/pom.xml | 2 +- .../modules/swagger-core-jakarta/pom.xml | 2 +- .../modules/swagger-integration-jakarta/pom.xml | 2 +- .../modules/swagger-jaxrs2-jakarta/pom.xml | 2 +- .../swagger-jaxrs2-servlet-initializer-jakarta/pom.xml | 2 +- .../swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml | 2 +- .../modules/swagger-maven-plugin-jakarta/pom.xml | 2 +- .../modules/swagger-models-jakarta/pom.xml | 2 +- modules/swagger-project-jakarta/pom.xml | 2 +- pom.xml | 2 +- 22 files changed, 23 insertions(+), 23 deletions(-) diff --git a/modules/swagger-annotations/pom.xml b/modules/swagger-annotations/pom.xml index b70609103f..a9f9ac25b9 100644 --- a/modules/swagger-annotations/pom.xml +++ b/modules/swagger-annotations/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.14 + 2.2.15-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-core/pom.xml b/modules/swagger-core/pom.xml index d2232fd440..bb75d52fa4 100644 --- a/modules/swagger-core/pom.xml +++ b/modules/swagger-core/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.14 + 2.2.15-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml index 8453b15eb9..83b58c30e4 100644 --- a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml +++ b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.14 + 2.2.15-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-gradle-plugin/gradle.properties b/modules/swagger-gradle-plugin/gradle.properties index 17c909d6a4..4384fc45e8 100644 --- a/modules/swagger-gradle-plugin/gradle.properties +++ b/modules/swagger-gradle-plugin/gradle.properties @@ -1,2 +1,2 @@ -version=2.2.14 +version=2.2.15-SNAPSHOT jettyVersion=9.4.49.v20220914 diff --git a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java index 7300db8c31..8ec5f3d750 100644 --- a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java +++ b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java @@ -16,7 +16,7 @@ public void apply(Project project) { config.defaultDependencies(new Action() { public void execute(DependencySet dependencies) { dependencies.add(project.getDependencies().create("org.apache.commons:commons-lang3:3.12.0")); - dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.14")); + dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.15-SNAPSHOT")); dependencies.add(project.getDependencies().create("javax.ws.rs:javax.ws.rs-api:2.1")); dependencies.add(project.getDependencies().create("javax.servlet:javax.servlet-api:3.1.0")); } diff --git a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java index c84e67c8aa..9c7ec4283b 100644 --- a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java +++ b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java @@ -81,7 +81,7 @@ public void testSwaggerResolveTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.14'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.15-SNAPSHOT'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + @@ -154,7 +154,7 @@ public void testSwaggerResolveWithOAS31OptionTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.14'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.15-SNAPSHOT'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + diff --git a/modules/swagger-integration/pom.xml b/modules/swagger-integration/pom.xml index bf4fe33062..e9d7b38f28 100644 --- a/modules/swagger-integration/pom.xml +++ b/modules/swagger-integration/pom.xml @@ -6,7 +6,7 @@ io.swagger.core.v3 swagger-project - 2.2.14 + 2.2.15-SNAPSHOT ../.. swagger-integration diff --git a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml index 6779ba3fdc..381f44d102 100644 --- a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.14 + 2.2.15-SNAPSHOT ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2-servlet-initializer/pom.xml b/modules/swagger-jaxrs2-servlet-initializer/pom.xml index 0237b6f49f..5d923974db 100644 --- a/modules/swagger-jaxrs2-servlet-initializer/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.14 + 2.2.15-SNAPSHOT ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2/pom.xml b/modules/swagger-jaxrs2/pom.xml index 61c9b79009..acd910394e 100644 --- a/modules/swagger-jaxrs2/pom.xml +++ b/modules/swagger-jaxrs2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.14 + 2.2.15-SNAPSHOT ../../ 4.0.0 diff --git a/modules/swagger-maven-plugin/pom.xml b/modules/swagger-maven-plugin/pom.xml index 6e7232eaa4..a08c2cbc75 100644 --- a/modules/swagger-maven-plugin/pom.xml +++ b/modules/swagger-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.14 + 2.2.15-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-models/pom.xml b/modules/swagger-models/pom.xml index 4fac4b6297..841f0019e0 100644 --- a/modules/swagger-models/pom.xml +++ b/modules/swagger-models/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.14 + 2.2.15-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml index 5e93ada73c..828aaf1dd5 100644 --- a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.14 + 2.2.15-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml index d46691f1c2..474f599bed 100644 --- a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.14 + 2.2.15-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml index 9ea18c067e..d56840dccd 100644 --- a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.14 + 2.2.15-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml index 2cfbcd3de3..1f36f6c6d4 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.14 + 2.2.15-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml index 2efad8ce12..66d9154c88 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.14 + 2.2.15-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml index c1e0f388ec..e03a4d9246 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.14 + 2.2.15-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml index 14f57c3545..83758a3778 100644 --- a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.14 + 2.2.15-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml index 8eda4736cf..1998211879 100644 --- a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.14 + 2.2.15-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/pom.xml b/modules/swagger-project-jakarta/pom.xml index 955124c917..a77153096e 100644 --- a/modules/swagger-project-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/pom.xml @@ -6,7 +6,7 @@ pom swagger-project-jakarta swagger-project-jakarta - 2.2.14 + 2.2.15-SNAPSHOT https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git diff --git a/pom.xml b/pom.xml index 71529549bf..166898734c 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ pom swagger-project swagger-project - 2.2.14 + 2.2.15-SNAPSHOT https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git From c9438ad22fd4da25e1c0220408cf00a687100016 Mon Sep 17 00:00:00 2001 From: frantuma Date: Tue, 27 Jun 2023 09:38:20 +0200 Subject: [PATCH 063/131] fix siblings in response and request body schemas OAS 3.1 resolving --- .../java/io/swagger/v3/jaxrs2/Reader.java | 44 +++++++- .../java/io/swagger/v3/jaxrs2/ReaderTest.java | 105 ++++++++++++++++++ .../SiblingsResourceRequestBodyMultiple.java | 58 ++++++++++ .../resources/SiblingsResourceResponse.java | 62 +++++++++++ 4 files changed, 265 insertions(+), 4 deletions(-) create mode 100644 modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/SiblingsResourceRequestBodyMultiple.java create mode 100644 modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/SiblingsResourceResponse.java diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java index 430e9936a4..4890f1a9b2 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java @@ -52,6 +52,7 @@ import javax.ws.rs.Consumes; import javax.ws.rs.Produces; import javax.ws.rs.core.Application; +import java.io.IOException; import java.lang.annotation.Annotation; import java.lang.reflect.Method; import java.lang.reflect.ParameterizedType; @@ -1214,6 +1215,37 @@ protected Content resolveEmptyContent(Produces classProduces, Produces methodPro return content; } + private MediaType clone(MediaType mediaType) { + if(mediaType == null) + return mediaType; + try { + if(config.isOpenAPI31()) { + mediaType = Json31.mapper().readValue(Json31.pretty(mediaType), MediaType.class); + } else { + mediaType = Json.mapper().readValue(Json.pretty(mediaType), MediaType.class); + } + } catch (IOException e) { + LOGGER.error("Could not clone mediaType", e); + } + return mediaType; + } + private Schema clone(Schema schema) { + if(schema == null) + return schema; + try { + String cloneName = schema.getName(); + if(config.isOpenAPI31()) { + schema = Json31.mapper().readValue(Json31.pretty(schema), Schema.class); + } else { + schema = Json.mapper().readValue(Json.pretty(schema), Schema.class); + } + schema.setName(cloneName); + } catch (IOException e) { + LOGGER.error("Could not clone schema", e); + } + return schema; + } + protected void resolveResponseSchemaFromReturnType( Operation operation, io.swagger.v3.oas.annotations.responses.ApiResponse[] responses, @@ -1221,20 +1253,23 @@ protected void resolveResponseSchemaFromReturnType( Produces classProduces, Produces methodProduces) { if (responses != null) { for (io.swagger.v3.oas.annotations.responses.ApiResponse response: responses) { + Map reresolvedMediaTypes = new LinkedHashMap<>(); if (response.useReturnTypeSchema()) { ApiResponse opResponse = operation.getResponses().get(response.responseCode()); if (opResponse != null) { if (opResponse.getContent() != null) { for (String key : opResponse.getContent().keySet()) { - MediaType mediaType = opResponse.getContent().get(key); + MediaType mediaType = clone(opResponse.getContent().get(key)); + Schema existingSchema = clone(schema); Optional content = Arrays.stream(response.content()).filter(c -> c.mediaType().equals(key)).findFirst(); if (content.isPresent()) { - Optional reResolvedSchema = AnnotationsUtils.getSchemaFromAnnotation(content.get().schema(), components, null, config.isOpenAPI31(), schema); + Optional reResolvedSchema = AnnotationsUtils.getSchemaFromAnnotation(content.get().schema(), components, null, config.isOpenAPI31(), existingSchema); if (reResolvedSchema.isPresent()) { - schema = reResolvedSchema.get(); + existingSchema = reResolvedSchema.get(); } } - mediaType.schema(schema); + mediaType.schema(existingSchema); + reresolvedMediaTypes.put(key, mediaType); } } else { Content content = resolveEmptyContent(classProduces, methodProduces); @@ -1244,6 +1279,7 @@ protected void resolveResponseSchemaFromReturnType( opResponse.content(content); } } + opResponse.getContent().putAll(reresolvedMediaTypes); } } } diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java index 35d63f2ea0..fb4195ca9c 100644 --- a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java @@ -19,6 +19,8 @@ import io.swagger.v3.jaxrs2.resources.SchemaPropertiesResource; import io.swagger.v3.jaxrs2.resources.SiblingsResource; import io.swagger.v3.jaxrs2.resources.SiblingsResourceRequestBody; +import io.swagger.v3.jaxrs2.resources.SiblingsResourceRequestBodyMultiple; +import io.swagger.v3.jaxrs2.resources.SiblingsResourceResponse; import io.swagger.v3.jaxrs2.resources.SiblingsResourceSimple; import io.swagger.v3.jaxrs2.resources.SingleExampleResource; import io.swagger.v3.jaxrs2.resources.BasicFieldsResource; @@ -3510,6 +3512,54 @@ public void testSiblingsOnResource() { SerializationMatchers.assertEqualsToYaml31(openAPI, yaml); } + @Test + public void testSiblingsOnResourceResponse() { + Reader reader = new Reader(new SwaggerConfiguration().openAPI(new OpenAPI()).openAPI31(true)); + + OpenAPI openAPI = reader.read(SiblingsResourceResponse.class); + String yaml = "openapi: 3.1.0\n" + + "paths:\n" + + " /test:\n" + + " get:\n" + + " operationId: getCart\n" + + " responses:\n" + + " \"300\":\n" + + " description: aaa\n" + + " content:\n" + + " application/json:\n" + + " schema:\n" + + " $ref: '#/components/schemas/PetSimple'\n" + + " description: resource pet\n" + + " readOnly: true\n" + + " application/xml:\n" + + " schema:\n" + + " $ref: '#/components/schemas/PetSimple'\n" + + " description: resource pet xml\n" + + " readOnly: true\n" + + " /test/impl:\n" + + " get:\n" + + " operationId: getCartImpl\n" + + " responses:\n" + + " \"300\":\n" + + " description: aaa\n" + + " content:\n" + + " application/json:\n" + + " schema:\n" + + " $ref: '#/components/schemas/PetSimple'\n" + + " description: resource pet\n" + + " readOnly: true\n" + + " application/xml:\n" + + " schema:\n" + + " $ref: '#/components/schemas/PetSimple'\n" + + " description: resource pet xml\n" + + " readOnly: true\n" + + "components:\n" + + " schemas:\n" + + " PetSimple:\n" + + " description: Pet\n"; + SerializationMatchers.assertEqualsToYaml31(openAPI, yaml); + } + @Test public void testSiblingsOnResourceRequestBody() { Reader reader = new Reader(new SwaggerConfiguration().openAPI(new OpenAPI()).openAPI31(true)); @@ -3554,4 +3604,59 @@ public void testSiblingsOnResourceRequestBody() { " description: Pet\n"; SerializationMatchers.assertEqualsToYaml31(openAPI, yaml); } + + @Test + public void testSiblingsOnResourceRequestBodyMultiple() { + Reader reader = new Reader(new SwaggerConfiguration().openAPI(new OpenAPI()).openAPI31(true)); + + OpenAPI openAPI = reader.read(SiblingsResourceRequestBodyMultiple.class); + String yaml = "openapi: 3.1.0\n" + + "paths:\n" + + " /test/bodyimpl:\n" + + " get:\n" + + " operationId: getBodyImpl\n" + + " requestBody:\n" + + " description: aaa\n" + + " content:\n" + + " application/json:\n" + + " schema:\n" + + " $ref: '#/components/schemas/PetSimple'\n" + + " description: resource pet\n" + + " writeOnly: true\n" + + " application/xml:\n" + + " schema:\n" + + " $ref: '#/components/schemas/PetSimple'\n" + + " description: resource pet xml\n" + + " writeOnly: true\n" + + " responses:\n" + + " default:\n" + + " description: default response\n" + + " content:\n" + + " '*/*': {}\n" + + " /test/bodyimplparam:\n" + + " get:\n" + + " operationId: getBodyImplParam\n" + + " requestBody:\n" + + " content:\n" + + " application/json:\n" + + " schema:\n" + + " $ref: '#/components/schemas/PetSimple'\n" + + " description: resource pet\n" + + " writeOnly: true\n" + + " application/xml:\n" + + " schema:\n" + + " $ref: '#/components/schemas/PetSimple'\n" + + " description: resource pet xml\n" + + " writeOnly: true\n" + + " responses:\n" + + " default:\n" + + " description: default response\n" + + " content:\n" + + " '*/*': {}\n" + + "components:\n" + + " schemas:\n" + + " PetSimple:\n" + + " description: Pet\n"; + SerializationMatchers.assertEqualsToYaml31(openAPI, yaml); + } } diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/SiblingsResourceRequestBodyMultiple.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/SiblingsResourceRequestBodyMultiple.java new file mode 100644 index 0000000000..1270315440 --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/SiblingsResourceRequestBodyMultiple.java @@ -0,0 +1,58 @@ +package io.swagger.v3.jaxrs2.resources; + +import io.swagger.v3.jaxrs2.resources.siblings.PetSimple; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.parameters.RequestBody; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.core.Response; + +@Path("/test") +public class SiblingsResourceRequestBodyMultiple { + @Path("/bodyimpl") + @GET + @Operation( + requestBody = + @RequestBody( + description = "aaa", + content = { + @Content( + mediaType = "application/json", + schema = @Schema( + description = "resource pet", + implementation = PetSimple.class, + accessMode = Schema.AccessMode.WRITE_ONLY)), + @Content( + mediaType = "application/xml", + schema = @Schema( + description = "resource pet xml", + implementation = PetSimple.class, + accessMode = Schema.AccessMode.WRITE_ONLY)) + })) + public Response getBodyImpl(Object body) { + return null; + } + + @Path("/bodyimplparam") + @GET + public Response getBodyImplParam(@RequestBody( + content = { + @Content( + mediaType = "application/json", + schema = @Schema( + description = "resource pet", + implementation = PetSimple.class, + accessMode = Schema.AccessMode.WRITE_ONLY)), + @Content( + mediaType = "application/xml", + schema = @Schema( + description = "resource pet xml", + implementation = PetSimple.class, + accessMode = Schema.AccessMode.WRITE_ONLY)) + }) Object body) { + return null; + } +} diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/SiblingsResourceResponse.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/SiblingsResourceResponse.java new file mode 100644 index 0000000000..efa3d09f54 --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/SiblingsResourceResponse.java @@ -0,0 +1,62 @@ +package io.swagger.v3.jaxrs2.resources; + +import io.swagger.v3.jaxrs2.resources.siblings.PetSimple; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; + +@Path("/test") +public class SiblingsResourceResponse { + @GET + @Operation( + responses = { + @ApiResponse( + responseCode = "300", + description = "aaa", + useReturnTypeSchema = true, + content = { + @Content( + mediaType = "application/json", + schema = @Schema( + description = "resource pet", + accessMode = Schema.AccessMode.READ_ONLY)), + @Content( + mediaType = "application/xml", + schema = @Schema( + description = "resource pet xml", + accessMode = Schema.AccessMode.READ_ONLY)) + })}) + public PetSimple getCart() { + return null; + } + + @Path("/impl") + @GET + @Operation( + responses = { + @ApiResponse( + responseCode = "300", + description = "aaa", + content = { + @Content( + mediaType = "application/json", + schema = @Schema( + description = "resource pet", + implementation = PetSimple.class, + accessMode = Schema.AccessMode.READ_ONLY)), + @Content( + mediaType = "application/xml", + schema = @Schema( + description = "resource pet xml", + implementation = PetSimple.class, + accessMode = Schema.AccessMode.READ_ONLY)) + })}) + public PetSimple getCartImpl() { + return null; + } + +} From 5af0cde0f57e858daa0f5e1e98a7091c7b7cc635 Mon Sep 17 00:00:00 2001 From: frantuma Date: Tue, 27 Jun 2023 15:43:28 +0200 Subject: [PATCH 064/131] fix siblings in annotated request body param schemas OAS 3.1 resolving, add skipResolveAppPath --- .../annotations/parameters/RequestBody.java | 7 ++ .../v3/core/util/AnnotationsUtils.java | 40 +++++----- modules/swagger-gradle-plugin/README.md | 5 +- .../v3/plugins/gradle/tasks/ResolveTask.java | 20 +++++ .../integration/GenericOpenApiContext.java | 3 + .../oas/integration/SwaggerConfiguration.java | 25 ++++++ .../integration/api/OpenAPIConfiguration.java | 5 ++ .../java/io/swagger/v3/jaxrs2/Reader.java | 26 ++++++- .../ServletConfigContextUtils.java | 5 ++ .../ServletOpenApiConfigurationLoader.java | 5 ++ .../v3/jaxrs2/integration/SwaggerLoader.java | 17 ++++ .../java/io/swagger/v3/jaxrs2/ReaderTest.java | 21 +++++ .../SiblingsResourceRequestBodyMultiple.java | 22 ++++++ .../resources/petstore/FullPetResource.yaml | 2 - .../operation/ServerOperationResource.yaml | 2 - modules/swagger-maven-plugin/README.md | 2 + .../swagger/v3/plugin/maven/SwaggerMojo.java | 18 +++++ .../v3/plugin/maven/SwaggerResolveTest.java | 21 +++++ .../petstore/petstore31/PetResource.java | 77 +++++++++++++++++++ .../test/resources/pom.resolveToFile31.xml | 52 +++++++++++++ 20 files changed, 346 insertions(+), 29 deletions(-) create mode 100644 modules/swagger-maven-plugin/src/test/java/io/swagger/v3/plugin/maven/petstore/petstore31/PetResource.java create mode 100644 modules/swagger-maven-plugin/src/test/resources/pom.resolveToFile31.xml diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/parameters/RequestBody.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/parameters/RequestBody.java index 552e4182a9..3fd98ca409 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/parameters/RequestBody.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/parameters/RequestBody.java @@ -60,4 +60,11 @@ **/ String ref() default ""; + /** + * Set to true to resolve the request body schema from parameter type + * + * @since 2.2.15 + **/ + boolean useParameterTypeSchema() default false; + } diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java index 48428710f1..53f9289da8 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java @@ -934,29 +934,31 @@ public static Optional getServer(io.swagger.v3.oas.annotations.servers.S return Optional.empty(); } io.swagger.v3.oas.annotations.servers.ServerVariable[] serverVariables = server.variables(); - ServerVariables serverVariablesObject = new ServerVariables(); - for (io.swagger.v3.oas.annotations.servers.ServerVariable serverVariable : serverVariables) { - ServerVariable serverVariableObject = new ServerVariable(); - if (StringUtils.isNotBlank(serverVariable.description())) { - serverVariableObject.setDescription(serverVariable.description()); - } - if (StringUtils.isNotBlank(serverVariable.defaultValue())) { - serverVariableObject.setDefault(serverVariable.defaultValue()); - } - if (serverVariable.allowableValues() != null && serverVariable.allowableValues().length > 0) { - if (StringUtils.isNotBlank(serverVariable.allowableValues()[0])) { - serverVariableObject.setEnum(Arrays.asList(serverVariable.allowableValues())); + if (serverVariables.length > 0) { + ServerVariables serverVariablesObject = new ServerVariables(); + for (io.swagger.v3.oas.annotations.servers.ServerVariable serverVariable : serverVariables) { + ServerVariable serverVariableObject = new ServerVariable(); + if (StringUtils.isNotBlank(serverVariable.description())) { + serverVariableObject.setDescription(serverVariable.description()); + } + if (StringUtils.isNotBlank(serverVariable.defaultValue())) { + serverVariableObject.setDefault(serverVariable.defaultValue()); + } + if (serverVariable.allowableValues() != null && serverVariable.allowableValues().length > 0) { + if (StringUtils.isNotBlank(serverVariable.allowableValues()[0])) { + serverVariableObject.setEnum(Arrays.asList(serverVariable.allowableValues())); + } } - } - if (serverVariable.extensions() != null && serverVariable.extensions().length > 0) { - Map extensions = AnnotationsUtils.getExtensions(serverVariable.extensions()); - if (extensions != null) { - extensions.forEach(serverVariableObject::addExtension); + if (serverVariable.extensions() != null && serverVariable.extensions().length > 0) { + Map extensions = AnnotationsUtils.getExtensions(serverVariable.extensions()); + if (extensions != null) { + extensions.forEach(serverVariableObject::addExtension); + } } + serverVariablesObject.addServerVariable(serverVariable.name(), serverVariableObject); } - serverVariablesObject.addServerVariable(serverVariable.name(), serverVariableObject); + serverObject.setVariables(serverVariablesObject); } - serverObject.setVariables(serverVariablesObject); return Optional.of(serverObject); } diff --git a/modules/swagger-gradle-plugin/README.md b/modules/swagger-gradle-plugin/README.md index 3fef3ef41d..bce7977479 100644 --- a/modules/swagger-gradle-plugin/README.md +++ b/modules/swagger-gradle-plugin/README.md @@ -85,6 +85,7 @@ Parameter | Description | Required | Default `prettyPrint`|see [configuration property](https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Integration-and-Configuration#configuration-properties)|false|`TRUE` `sortOutput`|see [configuration property](https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Integration-and-Configuration#configuration-properties)|false|`FALSE` `alwaysResolveAppPath`|see [configuration property](https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Integration-and-Configuration#configuration-properties)|false|`FALSE` +`skipResolveAppPath`|see [configuration property](https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Integration-and-Configuration#configuration-properties)|false|`FALSE` `openApiFile`|openapi file to be merged with resolved specification, equivalent to [config](https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Integration-and-Configuration#configuration-properties) openAPI|false| `filterClass`|see [configuration property](https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Integration-and-Configuration#configuration-properties)|false| `readerClass`|see [configuration property](https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Integration-and-Configuration#configuration-properties)|false| @@ -119,5 +120,5 @@ info: Since version 2.1.6, `sortOutput` parameter is available, allowing to sort object properties and map keys alphabetically. Since version 2.1.6, `objectMapperProcessorClass` allows to configure also the ObjectMapper instance used to serialize the resolved OpenAPI -Since version 2.1.9, `alwaysResolveAppPath` parameter is available, allowing to trigger resolving of Application Path from annotaion also not in runtime (e.g. using servlet in separate application, or in maven plugin at build time, etc) - +Since version 2.1.9, `alwaysResolveAppPath` parameter is available, allowing to trigger resolving of Application Path from annotation also not in runtime (e.g. using servlet in separate application, or in maven plugin at build time, etc) +Since version 2.1.15, `skipResolveAppPath` parameter is available, allowing to skip resolving of Application Path from annotation diff --git a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/tasks/ResolveTask.java b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/tasks/ResolveTask.java index b1ba974c50..7200a8b31e 100644 --- a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/tasks/ResolveTask.java +++ b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/tasks/ResolveTask.java @@ -68,6 +68,7 @@ public enum Format {JSON, YAML, JSONANDYAML}; private Boolean sortOutput = Boolean.FALSE; private Boolean alwaysResolveAppPath = Boolean.FALSE; + private Boolean skipResolveAppPath = Boolean.FALSE; private String contextId; @@ -322,6 +323,22 @@ public void setAlwaysResolveAppPath(Boolean alwaysResolveAppPath) { this.alwaysResolveAppPath = alwaysResolveAppPath; } + /** + * @since 2.2.15 + */ + @Input + @Optional + public Boolean getSkipResolveAppPath() { + return skipResolveAppPath; + } + + /** + * @since 2.2.15 + */ + public void setSkipResolveAppPath(Boolean skipResolveAppPath) { + this.skipResolveAppPath = skipResolveAppPath; + } + /** * @since 2.2.0 */ @@ -453,6 +470,9 @@ public void resolve() throws GradleException { method=swaggerLoaderClass.getDeclaredMethod("setAlwaysResolveAppPath", Boolean.class); method.invoke(swaggerLoader, alwaysResolveAppPath); + method=swaggerLoaderClass.getDeclaredMethod("setSkipResolveAppPath", Boolean.class); + method.invoke(swaggerLoader, skipResolveAppPath); + method=swaggerLoaderClass.getDeclaredMethod("setReadAllResources", Boolean.class); method.invoke(swaggerLoader, readAllResources); diff --git a/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/GenericOpenApiContext.java b/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/GenericOpenApiContext.java index 1784e04cbc..4a56148e1e 100644 --- a/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/GenericOpenApiContext.java +++ b/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/GenericOpenApiContext.java @@ -612,6 +612,9 @@ private OpenAPIConfiguration mergeParentConfiguration(OpenAPIConfiguration confi if (merged.isAlwaysResolveAppPath() == null) { merged.setAlwaysResolveAppPath(parentConfig.isAlwaysResolveAppPath()); } + if (merged.isSkipResolveAppPath() == null) { + merged.setSkipResolveAppPath(parentConfig.isSkipResolveAppPath()); + } if (merged.isReadAllResources() == null) { merged.setReadAllResources(parentConfig.isReadAllResources()); } diff --git a/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/SwaggerConfiguration.java b/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/SwaggerConfiguration.java index 0a348d1f76..a0f8367971 100644 --- a/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/SwaggerConfiguration.java +++ b/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/SwaggerConfiguration.java @@ -34,6 +34,8 @@ public class SwaggerConfiguration implements OpenAPIConfiguration { private Boolean alwaysResolveAppPath; + private Boolean skipResolveAppPath; + private Boolean openAPI31 = false; private Boolean convertToOpenAPI31; @@ -286,6 +288,29 @@ public SwaggerConfiguration alwaysResolveAppPath(Boolean alwaysResolveAppPath) { return this; } + /** + * @since 2.1.15 + */ + @Override + public Boolean isSkipResolveAppPath() { + return skipResolveAppPath; + } + + /** + * @since 2.1.15 + */ + public void setSkipResolveAppPath(Boolean skipResolveAppPath) { + this.skipResolveAppPath = skipResolveAppPath; + } + + /** + * @since 2.1.15 + */ + public SwaggerConfiguration skipResolveAppPath(Boolean skipResolveAppPath) { + setAlwaysResolveAppPath(skipResolveAppPath); + return this; + } + /** * @since 2.1.9 */ diff --git a/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/api/OpenAPIConfiguration.java b/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/api/OpenAPIConfiguration.java index be6ece526a..5c8b66a9bf 100644 --- a/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/api/OpenAPIConfiguration.java +++ b/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/api/OpenAPIConfiguration.java @@ -49,6 +49,11 @@ public interface OpenAPIConfiguration { */ Boolean isAlwaysResolveAppPath(); + /** + * @since 2.1.15 + */ + Boolean isSkipResolveAppPath(); + /** * @since 2.2.12 */ diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java index 4890f1a9b2..0d38546a4c 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java @@ -170,7 +170,7 @@ public OpenAPI read(Set> classes) { LOGGER.error("Failed to create ReaderListener", e); } } - if (config != null && Boolean.TRUE.equals(config.isAlwaysResolveAppPath())) { + if (config != null && Boolean.TRUE.equals(config.isAlwaysResolveAppPath()) && !Boolean.TRUE.equals(config.isSkipResolveAppPath())) { if (Application.class.isAssignableFrom(cls)) { ApplicationPath appPathAnnotation = ReflectionUtils.getAnnotation(cls, ApplicationPath.class); if (appPathAnnotation != null) { @@ -225,7 +225,7 @@ public OpenAPI read(Set> classes, Map resources) { } protected String resolveApplicationPath() { - if (application != null) { + if (application != null && !Boolean.TRUE.equals(config.isSkipResolveAppPath())) { Class applicationToScan = this.application.getClass(); ApplicationPath applicationPath; //search up in the hierarchy until we find one with the annotation, this is needed because for example Weld proxies will not have the annotation and the right class will be the superClass @@ -773,18 +773,36 @@ protected void processRequestBody(Parameter requestBodyParameter, Operation oper requestBody.getContent() != null && !requestBody.getContent().isEmpty()) { if (requestBodyParameter.getSchema() != null) { - for (MediaType mediaType : requestBody.getContent().values()) { + Map reresolvedMediaTypes = new LinkedHashMap<>(); + for (String key: requestBody.getContent().keySet()) { + MediaType mediaType = requestBody.getContent().get(key); if (mediaType.getSchema() == null) { if (requestBodyParameter.getSchema() == null) { mediaType.setSchema(new Schema()); } else { mediaType.setSchema(requestBodyParameter.getSchema()); } + } else if (mediaType.getSchema() != null && requestBodyAnnotation.useParameterTypeSchema()) { + if (requestBodyParameter.getSchema() != null) { + MediaType newMediaType = clone(mediaType); + Schema parameterSchema = clone(requestBodyParameter.getSchema()); + Optional content = Arrays.stream(requestBodyAnnotation.content()).filter(c -> c.mediaType().equals(key)).findFirst(); + if (content.isPresent()) { + Optional reResolvedSchema = AnnotationsUtils.getSchemaFromAnnotation(content.get().schema(), components, null, config.isOpenAPI31(), parameterSchema); + if (reResolvedSchema.isPresent()) { + parameterSchema = reResolvedSchema.get(); + } + + } + newMediaType.schema(parameterSchema); + reresolvedMediaTypes.put(key, newMediaType); + } } - if (StringUtils.isBlank(mediaType.getSchema().getType())) { + if (StringUtils.isBlank(mediaType.getSchema().getType()) || requestBodyAnnotation.useParameterTypeSchema()) { mediaType.getSchema().setType(requestBodyParameter.getSchema().getType()); } } + requestBody.getContent().putAll(reresolvedMediaTypes); } } operation.setRequestBody(requestBody); diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/ServletConfigContextUtils.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/ServletConfigContextUtils.java index 6fa2744dd8..f5a8ab2ee7 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/ServletConfigContextUtils.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/ServletConfigContextUtils.java @@ -36,6 +36,11 @@ public class ServletConfigContextUtils { */ public static final String OPENAPI_CONFIGURATION_ALWAYSRESOLVEAPPPATH_KEY = "openApi.configuration.alwaysResolveAppPath"; + /** + * @since 2.1.15 + */ + public static final String OPENAPI_CONFIGURATION_SKIPRESOLVEAPPPATH_KEY = "openApi.configuration.skipResolveAppPath"; + /** * @since 2.0.6 */ diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/ServletOpenApiConfigurationLoader.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/ServletOpenApiConfigurationLoader.java index 1e92a1c07c..4620a2c667 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/ServletOpenApiConfigurationLoader.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/ServletOpenApiConfigurationLoader.java @@ -23,6 +23,7 @@ import static io.swagger.v3.jaxrs2.integration.ServletConfigContextUtils.OPENAPI_CONFIGURATION_READALLRESOURCES_KEY; import static io.swagger.v3.jaxrs2.integration.ServletConfigContextUtils.OPENAPI_CONFIGURATION_READER_KEY; import static io.swagger.v3.jaxrs2.integration.ServletConfigContextUtils.OPENAPI_CONFIGURATION_SCANNER_KEY; +import static io.swagger.v3.jaxrs2.integration.ServletConfigContextUtils.OPENAPI_CONFIGURATION_SKIPRESOLVEAPPPATH_KEY; import static io.swagger.v3.jaxrs2.integration.ServletConfigContextUtils.OPENAPI_CONFIGURATION_SORTOUTPUT_KEY; import static io.swagger.v3.jaxrs2.integration.ServletConfigContextUtils.OPENAPI_CONFIGURATION_ALWAYSRESOLVEAPPPATH_KEY; import static io.swagger.v3.jaxrs2.integration.ServletConfigContextUtils.getBooleanInitParam; @@ -59,6 +60,7 @@ public OpenAPIConfiguration load(String path) throws IOException { .prettyPrint(getBooleanInitParam(servletConfig, OPENAPI_CONFIGURATION_PRETTYPRINT_KEY)) .sortOutput(getBooleanInitParam(servletConfig, OPENAPI_CONFIGURATION_SORTOUTPUT_KEY)) .alwaysResolveAppPath(getBooleanInitParam(servletConfig, OPENAPI_CONFIGURATION_ALWAYSRESOLVEAPPPATH_KEY)) + .skipResolveAppPath(getBooleanInitParam(servletConfig, OPENAPI_CONFIGURATION_SKIPRESOLVEAPPPATH_KEY)) .readerClass(getInitParam(servletConfig, OPENAPI_CONFIGURATION_READER_KEY)) .cacheTTL(getLongInitParam(servletConfig, OPENAPI_CONFIGURATION_CACHE_TTL_KEY)) .scannerClass(getInitParam(servletConfig, OPENAPI_CONFIGURATION_SCANNER_KEY)) @@ -121,6 +123,9 @@ public boolean exists(String path) { if (getBooleanInitParam(servletConfig, OPENAPI_CONFIGURATION_ALWAYSRESOLVEAPPPATH_KEY) != null) { return true; } + if (getBooleanInitParam(servletConfig, OPENAPI_CONFIGURATION_SKIPRESOLVEAPPPATH_KEY) != null) { + return true; + } if (getInitParam(servletConfig, OPENAPI_CONFIGURATION_READER_KEY) != null) { return true; } diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/SwaggerLoader.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/SwaggerLoader.java index d54429c39e..9023e7c273 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/SwaggerLoader.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/SwaggerLoader.java @@ -42,6 +42,8 @@ public class SwaggerLoader { private Boolean alwaysResolveAppPath = false; + private Boolean skipResolveAppPath = false; + private Boolean openAPI31 = false; private Boolean convertToOpenAPI31 = false; @@ -197,6 +199,20 @@ public void setAlwaysResolveAppPath(Boolean alwaysResolveAppPath) { this.alwaysResolveAppPath = alwaysResolveAppPath; } + /** + * @since 2.1.15 + */ + public Boolean getSkipResolveAppPath() { + return skipResolveAppPath; + } + + /** + * @since 2.1.15 + */ + public void setSkipResolveAppPath(Boolean skipResolveAppPath) { + this.skipResolveAppPath = skipResolveAppPath; + } + public Boolean getOpenAPI31() { return openAPI31; } @@ -266,6 +282,7 @@ public Map resolve() throws Exception{ .modelConverterClasses(modelConverterSet) .sortOutput(sortOutput) .alwaysResolveAppPath(alwaysResolveAppPath) + .skipResolveAppPath(skipResolveAppPath) .openAPI31(openAPI31) .convertToOpenAPI31(convertToOpenAPI31); try { diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java index fb4195ca9c..325f900bb9 100644 --- a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java @@ -3653,6 +3653,27 @@ public void testSiblingsOnResourceRequestBodyMultiple() { " description: default response\n" + " content:\n" + " '*/*': {}\n" + + " /test/bodyparam:\n" + + " get:\n" + + " operationId: getBodyParam\n" + + " requestBody:\n" + + " description: test\n" + + " content:\n" + + " application/json:\n" + + " schema:\n" + + " $ref: '#/components/schemas/PetSimple'\n" + + " description: resource pet\n" + + " writeOnly: true\n" + + " application/xml:\n" + + " schema:\n" + + " $ref: '#/components/schemas/PetSimple'\n" + + " description: resource pet xml\n" + + " writeOnly: true\n" + + " responses:\n" + + " default:\n" + + " description: default response\n" + + " content:\n" + + " '*/*': {}\n" + "components:\n" + " schemas:\n" + " PetSimple:\n" + diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/SiblingsResourceRequestBodyMultiple.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/SiblingsResourceRequestBodyMultiple.java index 1270315440..ee2ee0c810 100644 --- a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/SiblingsResourceRequestBodyMultiple.java +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/SiblingsResourceRequestBodyMultiple.java @@ -55,4 +55,26 @@ public Response getBodyImplParam(@RequestBody( }) Object body) { return null; } + + @Path("/bodyparam") + @GET + public Response getBodyParam( + @RequestBody( + description = "test", + useParameterTypeSchema = true, + content = { + @Content( + mediaType = "application/json", + schema = @Schema( + description = "resource pet", + accessMode = Schema.AccessMode.WRITE_ONLY)), + @Content( + mediaType = "application/xml", + schema = @Schema( + description = "resource pet xml", + accessMode = Schema.AccessMode.WRITE_ONLY)) + } + ) PetSimple pet) { + return null; + } } diff --git a/modules/swagger-jaxrs2/src/test/resources/petstore/FullPetResource.yaml b/modules/swagger-jaxrs2/src/test/resources/petstore/FullPetResource.yaml index 1d3db51612..9360aa0882 100644 --- a/modules/swagger-jaxrs2/src/test/resources/petstore/FullPetResource.yaml +++ b/modules/swagger-jaxrs2/src/test/resources/petstore/FullPetResource.yaml @@ -16,7 +16,6 @@ externalDocs: servers: - url: http://foo description: server 1 - variables: {} security: - req 1: - a @@ -622,7 +621,6 @@ paths: servers: - url: http://foo2 description: server 2 - variables: {} /arrayschema: post: description: "subscribes a client to updates relevant to the requestor's account,\ diff --git a/modules/swagger-jaxrs2/src/test/resources/petstore/operation/ServerOperationResource.yaml b/modules/swagger-jaxrs2/src/test/resources/petstore/operation/ServerOperationResource.yaml index 7f132413d1..a7a19654ff 100644 --- a/modules/swagger-jaxrs2/src/test/resources/petstore/operation/ServerOperationResource.yaml +++ b/modules/swagger-jaxrs2/src/test/resources/petstore/operation/ServerOperationResource.yaml @@ -2,7 +2,6 @@ openapi: 3.0.1 servers: - url: http://foo description: server 1 - variables: {} paths: /serversoperation: get: @@ -18,7 +17,6 @@ paths: servers: - url: http://foo2 description: server 2 - variables: {} components: schemas: Category: diff --git a/modules/swagger-maven-plugin/README.md b/modules/swagger-maven-plugin/README.md index b4376b340f..610f294f91 100644 --- a/modules/swagger-maven-plugin/README.md +++ b/modules/swagger-maven-plugin/README.md @@ -188,6 +188,7 @@ Parameter | Description | Required | Default `prettyPrint`|see [configuration property](https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Integration-and-Configuration#configuration-properties)|false|`TRUE` `sortOutput`|see [configuration property](https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Integration-and-Configuration#configuration-properties)|false|`FALSE` `alwaysResolveAppPath`|see [configuration property](https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Integration-and-Configuration#configuration-properties)|false|`FALSE` +`skipResolveAppPath`|see [configuration property](https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Integration-and-Configuration#configuration-properties)|false|`FALSE` `openapiFilePath`|path to openapi file to be merged with resolved specification, see [config](https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Integration-and-Configuration#configuration-properties)|false| `configurationFilePath`|path to swagger config file to be merged with resolved specification, see [config](https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Integration-and-Configuration#configuration)|false| `filterClass`|see [configuration property](https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Integration-and-Configuration#configuration-properties)|false| @@ -206,3 +207,4 @@ Since version 2.0.8, `configurationFilePath` parameter is available, allowing to Since version 2.1.6, `sortOutput` parameter is available, allowing to sort object properties and map keys alphabetically. Since version 2.1.6, `objectMapperProcessorClass` allows to configure also the ObjectMapper instance used to serialize the resolved OpenAPI Since version 2.1.9, `alwaysResolveAppPath` parameter is available, allowing to trigger resolving of Application Path from annotaion also not in runtime (e.g. using servlet in separate application, or in maven plugin at build time, etc) +Since version 2.1.15, `skipResolveAppPath` parameter is available, allowing to skip resolving of Application Path from annotation diff --git a/modules/swagger-maven-plugin/src/main/java/io/swagger/v3/plugin/maven/SwaggerMojo.java b/modules/swagger-maven-plugin/src/main/java/io/swagger/v3/plugin/maven/SwaggerMojo.java index 77935ef614..3452443bc5 100644 --- a/modules/swagger-maven-plugin/src/main/java/io/swagger/v3/plugin/maven/SwaggerMojo.java +++ b/modules/swagger-maven-plugin/src/main/java/io/swagger/v3/plugin/maven/SwaggerMojo.java @@ -154,6 +154,9 @@ private void setDefaultsIfMissing(SwaggerConfiguration config) { if (alwaysResolveAppPath == null) { alwaysResolveAppPath = Boolean.FALSE; } + if (skipResolveAppPath == null) { + skipResolveAppPath = Boolean.FALSE; + } if (openapi31 == null) { openapi31 = Boolean.FALSE; } @@ -172,6 +175,9 @@ private void setDefaultsIfMissing(SwaggerConfiguration config) { if (config.isAlwaysResolveAppPath() == null) { config.alwaysResolveAppPath(alwaysResolveAppPath); } + if (config.isSkipResolveAppPath() == null) { + config.skipResolveAppPath(skipResolveAppPath); + } if (config.isOpenAPI31() == null) { config.setOpenAPI31(openapi31); } @@ -315,6 +321,9 @@ private SwaggerConfiguration mergeConfig(OpenAPI openAPIInput, SwaggerConfigurat if (alwaysResolveAppPath != null) { config.alwaysResolveAppPath(alwaysResolveAppPath); } + if (skipResolveAppPath != null) { + config.skipResolveAppPath(skipResolveAppPath); + } if (readAllResources != null) { config.readAllResources(readAllResources); } @@ -339,6 +348,9 @@ private SwaggerConfiguration mergeConfig(OpenAPI openAPIInput, SwaggerConfigurat if (isCollectionNotBlank(modelConverterClasses)) { config.modelConverterClasses(modelConverterClasses); } + if (openapi31 != null) { + config.openAPI31(openapi31); + } return config; } @@ -415,6 +427,12 @@ private boolean isCollectionNotBlank(Collection collection) { @Parameter(property = "resolve.alwaysResolveAppPath") private Boolean alwaysResolveAppPath; + /** + * @since 2.1.15 + */ + @Parameter(property = "resolve.skipResolveAppPath") + private Boolean skipResolveAppPath; + /** * @since 2.2.0 */ diff --git a/modules/swagger-maven-plugin/src/test/java/io/swagger/v3/plugin/maven/SwaggerResolveTest.java b/modules/swagger-maven-plugin/src/test/java/io/swagger/v3/plugin/maven/SwaggerResolveTest.java index 75d301c061..477147c715 100644 --- a/modules/swagger-maven-plugin/src/test/java/io/swagger/v3/plugin/maven/SwaggerResolveTest.java +++ b/modules/swagger-maven-plugin/src/test/java/io/swagger/v3/plugin/maven/SwaggerResolveTest.java @@ -1,5 +1,6 @@ package io.swagger.v3.plugin.maven; +import io.swagger.v3.oas.models.OpenAPI; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -14,6 +15,26 @@ public void testResolve() throws Exception { checkOutput(runTest(pom)); } + public void testResolve31() throws Exception { + File pom = getTestFile("src/test/resources/pom.resolveToFile31.xml"); + checkOutput(runTest(pom, this::validateOpenApi31Content)); + } + + void validateOpenApi31Content(OpenAPI openAPI) { + assertEquals( + Boolean.TRUE, + openAPI + .getPaths() + .get("/pet31") + .getPut() + .getResponses() + .get("200") + .getContent() + .get("application/xml") + .getSchema() + .getReadOnly()); + } + public void testResolveWithFilter() throws Exception { File pom = getTestFile("src/test/resources/pom.resolveToFileWithFilter.xml"); checkOutput(runTest(pom)); diff --git a/modules/swagger-maven-plugin/src/test/java/io/swagger/v3/plugin/maven/petstore/petstore31/PetResource.java b/modules/swagger-maven-plugin/src/test/java/io/swagger/v3/plugin/maven/petstore/petstore31/PetResource.java new file mode 100644 index 0000000000..3329d07f83 --- /dev/null +++ b/modules/swagger-maven-plugin/src/test/java/io/swagger/v3/plugin/maven/petstore/petstore31/PetResource.java @@ -0,0 +1,77 @@ +package io.swagger.v3.plugin.maven.petstore.petstore31; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.parameters.RequestBody; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import io.swagger.v3.plugin.maven.resources.model.Pet; + +import javax.ws.rs.Consumes; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; + +@Path("/pet31") +@Produces({"application/json", "application/xml"}) +public class PetResource { + @PUT + @Operation(summary = "Update an existing pet", + tags = {"pet"}, + security = { + @SecurityRequirement(name = "petstore_auth", scopes = {"write:pets", "read:pets"}), + @SecurityRequirement(name = "mutual_tls", scopes = {}) + }, + responses = { + @ApiResponse( + responseCode = "200", + description = "Successful operation", + useReturnTypeSchema = true, + content = { + @Content( + mediaType = "application/xml", + schema = @Schema( + accessMode = Schema.AccessMode.READ_ONLY, + description = "A Pet in XML Format" + ) + ), + @Content( + mediaType = "application/json", + schema = @Schema( + accessMode = Schema.AccessMode.READ_ONLY, + description = "A Pet in JSON Format" + ) + ) + } + ), + @ApiResponse(responseCode = "400", description = "Invalid ID supplied"), + @ApiResponse(responseCode = "404", description = "Pet not found"), + @ApiResponse(responseCode = "405", description = "Validation exception") }) + @Consumes({"application/json", "application/xml"}) + public Pet updatePet( + @RequestBody( + description = "Pet object that needs to be updated in the store", + required = true, + content = { + @Content( + mediaType = "application/json", + schema = @Schema( + accessMode = Schema.AccessMode.WRITE_ONLY, + description = "A Pet in JSON Format", + requiredProperties = {"id"} + ) + ), + @Content( + mediaType = "application/xml", + schema = @Schema( + accessMode = Schema.AccessMode.WRITE_ONLY, + description = "A Pet in XML Format", + requiredProperties = {"id"} + ) + ) + } + ) Pet pet) { + return null; + } +} diff --git a/modules/swagger-maven-plugin/src/test/resources/pom.resolveToFile31.xml b/modules/swagger-maven-plugin/src/test/resources/pom.resolveToFile31.xml new file mode 100644 index 0000000000..e93f5db21d --- /dev/null +++ b/modules/swagger-maven-plugin/src/test/resources/pom.resolveToFile31.xml @@ -0,0 +1,52 @@ + + 4.0.0 + io.swagger.core.v3 + swagger-maven-plugin-test + jar + 1.0-SNAPSHOT + Test Resolve YAML + + + + + io.swagger.core.v3 + swagger-maven-plugin + + spec + ${project.basedir}/../../../target/generatedtest + ${project.basedir}/../../../src/test/resources/openapiinput.yaml + YAML + + io.swagger.v3.plugin.maven.petstore.petstore31 + + TRUE + TRUE + + + + + + + + io.swagger.core.v3 + swagger-jaxrs2 + ${project.version} + + + + javax.ws.rs + javax.ws.rs-api + 2.1 + + + javax.servlet + javax.servlet-api + 3.1 + + + + + ISO-8859-1 + + From 7294019dc203b3995671084fd2b6b51525af1ea8 Mon Sep 17 00:00:00 2001 From: frantuma Date: Mon, 3 Jul 2023 14:52:21 +0200 Subject: [PATCH 065/131] refactor logic relative to OAS 3.1 resolving --- .../v3/core/jackson/ModelResolver.java | 75 +++-- .../v3/core/util/AnnotationsUtils.java | 134 +++++++-- .../resolving/v31/ModelResolverOAS31Test.java | 17 +- .../v3/core/util/AnnotationsUtilsTest.java | 4 +- .../java/io/swagger/v3/jaxrs2/Reader.java | 24 +- .../java/io/swagger/v3/jaxrs2/ReaderTest.java | 260 ++++++++++++++++++ .../swagger/v3/jaxrs2/resources/Address.java | 90 ++++++ .../swagger/v3/jaxrs2/resources/Client.java | 23 ++ .../v3/jaxrs2/resources/CreditCard.java | 14 + .../v3/jaxrs2/resources/Misc31Resource.java | 13 + .../jaxrs2/resources/ModelWithOAS31Stuff.java | 126 +++++++++ .../resources/PostalCodeNumberPattern.java | 20 ++ .../jaxrs2/resources/PostalCodePattern.java | 19 ++ .../jaxrs2/resources/SiblingPropResource.java | 79 ++++++ .../jaxrs2/resources/Ticket4446Resource.java | 19 ++ .../v3/jaxrs2/resources/WebHookResource.java | 37 +++ 16 files changed, 873 insertions(+), 81 deletions(-) create mode 100644 modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/Address.java create mode 100644 modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/Client.java create mode 100644 modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/CreditCard.java create mode 100644 modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/Misc31Resource.java create mode 100644 modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/ModelWithOAS31Stuff.java create mode 100644 modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/PostalCodeNumberPattern.java create mode 100644 modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/PostalCodePattern.java create mode 100644 modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/SiblingPropResource.java create mode 100644 modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/Ticket4446Resource.java create mode 100644 modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/WebHookResource.java 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 5306572c23..bf836605a0 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 @@ -638,8 +638,8 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context propSchemaName = ctxSchema.name(); } } + io.swagger.v3.oas.annotations.media.ArraySchema ctxArraySchema = AnnotationsUtils.getArraySchemaAnnotation(annotations); if (propSchemaName == null) { - io.swagger.v3.oas.annotations.media.ArraySchema ctxArraySchema = AnnotationsUtils.getArraySchemaAnnotation(annotations); if (AnnotationsUtils.hasArrayAnnotation(ctxArraySchema)) { if (AnnotationsUtils.hasSchemaAnnotation(ctxArraySchema.schema())) { if (!StringUtils.isBlank(ctxArraySchema.schema().name())) { @@ -662,10 +662,25 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context io.swagger.v3.oas.annotations.media.Schema.AccessMode accessMode = resolveAccessMode(propDef, type, propResolvedSchemaAnnotation); io.swagger.v3.oas.annotations.media.Schema.RequiredMode requiredMode = resolveRequiredMode(propResolvedSchemaAnnotation); + Annotation[] ctxAnnotation31 = null; + + if (openapi31) { + List ctxAnnotations31List = new ArrayList<>(); + if (annotations != null) { + for (Annotation a : annotations) { + if ( + !(a instanceof io.swagger.v3.oas.annotations.media.Schema) && + !(a instanceof io.swagger.v3.oas.annotations.media.ArraySchema)) { + ctxAnnotations31List.add(a); + } + } + ctxAnnotation31 = ctxAnnotations31List.toArray(new Annotation[ctxAnnotations31List.size()]); + } + } AnnotatedType aType = new AnnotatedType() .type(propType) - .ctxAnnotations(annotations) + .ctxAnnotations(openapi31 ? ctxAnnotation31 : annotations) .parent(model) .resolveAsRef(annotatedType.isResolveAsRef()) .jsonViewAnnotation(annotatedType.getJsonViewAnnotation()) @@ -688,12 +703,18 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context return new Schema(); } }); - property = clone(context.resolve(aType)); + property = context.resolve(aType); + property = clone(property); if (openapi31) { - Optional reResolvedProperty = AnnotationsUtils.getSchemaFromAnnotation(ctxSchema, annotatedType.getComponents(), null, openapi31, property); + Optional reResolvedProperty = AnnotationsUtils.getSchemaFromAnnotation(ctxSchema, annotatedType.getComponents(), null, openapi31, property, context); if (reResolvedProperty.isPresent()) { property = reResolvedProperty.get(); } + reResolvedProperty = AnnotationsUtils.getArraySchema(ctxArraySchema, annotatedType.getComponents(), null, openapi31, property); + if (reResolvedProperty.isPresent()) { + property = reResolvedProperty.get(); + } + } if (property != null) { Boolean required = md.getRequired(); @@ -732,6 +753,17 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context if (context.getDefinedModels().containsKey(pName)) { property = new Schema().$ref(constructRef(pName)); + property = clone(property); + if (openapi31) { + Optional reResolvedProperty = AnnotationsUtils.getSchemaFromAnnotation(ctxSchema, annotatedType.getComponents(), null, openapi31, property, context); + if (reResolvedProperty.isPresent()) { + property = reResolvedProperty.get(); + } + reResolvedProperty = AnnotationsUtils.getArraySchema(ctxArraySchema, annotatedType.getComponents(), null, openapi31, property); + if (reResolvedProperty.isPresent()) { + property = reResolvedProperty.get(); + } + } } } else if (property.get$ref() != null) { if (!openapi31) { @@ -844,7 +876,7 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context } if (openapi31) { - Map dependentSchemas = resolveDependentSchemas(type, annotatedType.getCtxAnnotations(), context); + Map dependentSchemas = resolveDependentSchemas(type, annotatedType.getCtxAnnotations(), context, annotatedType.getComponents(), annotatedType.getJsonViewAnnotation(), openapi31); if (model != null && dependentSchemas != null && !dependentSchemas.isEmpty()) { if (model.getDependentSchemas() == null) { model.dependentSchemas(dependentSchemas); @@ -1029,20 +1061,7 @@ protected Type findJsonValueType(final BeanDescription beanDesc) { } private Schema clone(Schema property) { - if(property == null) - return property; - try { - String cloneName = property.getName(); - if(openapi31) { - property = Json31.mapper().readValue(Json31.pretty(property), Schema.class); - } else { - property = Json.mapper().readValue(Json.pretty(property), Schema.class); - } - property.setName(cloneName); - } catch (IOException e) { - LOGGER.error("Could not clone property", e); - } - return property; + return AnnotationsUtils.clone(property, openapi31); } private boolean isSubtype(AnnotatedClass childClass, Class parentClass) { @@ -1788,7 +1807,7 @@ protected Map resolveSchemaProperties(JavaType a, Annotation[] a return schemaProperties; } - protected Map resolveDependentSchemas(JavaType a, Annotation[] annotations, ModelConverterContext context) { + protected Map resolveDependentSchemas(JavaType a, Annotation[] annotations, ModelConverterContext context, Components components, JsonView jsonViewAnnotation, boolean openapi31) { final Map dependentSchemaMap = new LinkedHashMap<>(); DependentSchemas dependentSchemasAnnotation = a.getRawClass().getAnnotation(DependentSchemas.class); @@ -1827,13 +1846,15 @@ protected Map resolveDependentSchemas(JavaType a, Annotation[] a continue; } Annotation[] propAnnotations = new Annotation[]{dependentSchemaAnnotation.schema(), dependentSchemaAnnotation.array()}; - AnnotatedType propType = new AnnotatedType() - .type(Object.class) - .ctxAnnotations(propAnnotations) - .resolveAsRef(true); - Schema resolvedPropSchema = context.resolve(propType); - if (resolvedPropSchema != null) { - dependentSchemas.put(name, resolvedPropSchema); + Schema existingSchema = null; + Optional resolvedPropSchema = AnnotationsUtils.getSchemaFromAnnotation(dependentSchemaAnnotation.schema(), components, jsonViewAnnotation, openapi31, null, context); + if (resolvedPropSchema.isPresent()) { + existingSchema = resolvedPropSchema.get(); + dependentSchemas.put(name, existingSchema); + } + resolvedPropSchema = AnnotationsUtils.getArraySchema(dependentSchemaAnnotation.array(), components, jsonViewAnnotation, openapi31, existingSchema); + if (resolvedPropSchema.isPresent()) { + dependentSchemas.put(name, resolvedPropSchema.get()); } } diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java index 53f9289da8..2986b3287e 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java @@ -6,6 +6,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.introspect.Annotated; import io.swagger.v3.core.converter.AnnotatedType; +import io.swagger.v3.core.converter.ModelConverterContext; import io.swagger.v3.core.converter.ModelConverters; import io.swagger.v3.core.converter.ResolvedSchema; import io.swagger.v3.oas.annotations.StringToClassMapItem; @@ -479,11 +480,36 @@ public static Optional getArraySchema(io.swagger.v3.oas.annotations public static Optional getArraySchema(io.swagger.v3.oas.annotations.media.ArraySchema arraySchema, Components components, JsonView jsonViewAnnotation) { return getArraySchema(arraySchema, components, jsonViewAnnotation, false); } + public static Optional getArraySchema(io.swagger.v3.oas.annotations.media.ArraySchema arraySchema, Components components, JsonView jsonViewAnnotation, boolean openapi31) { + Optional result = getArraySchema(arraySchema, components, jsonViewAnnotation, openapi31, null); + if (result.isPresent()) { + return Optional.of((ArraySchema) result.get()); + } + return Optional.empty(); + } + public static Optional getArraySchema(io.swagger.v3.oas.annotations.media.ArraySchema arraySchema, Components components, JsonView jsonViewAnnotation, boolean openapi31, Schema existingSchema) { if (arraySchema == null || !hasArrayAnnotation(arraySchema)) { - return Optional.empty(); + if (existingSchema == null) { + return Optional.empty(); + } else { + return Optional.of(existingSchema); + } } - ArraySchema arraySchemaObject = new ArraySchema(); + Schema arraySchemaObject = null; + if (!openapi31) { + if (existingSchema != null && existingSchema instanceof ArraySchema) { + return Optional.of((ArraySchema) existingSchema); + } + arraySchemaObject = new ArraySchema(); + } else { + if (existingSchema == null) { + arraySchemaObject = new JsonSchema(); + } else { + arraySchemaObject = existingSchema; + } + } + if (arraySchema.uniqueItems()) { arraySchemaObject.setUniqueItems(arraySchema.uniqueItems()); } @@ -547,6 +573,15 @@ public static Optional getSchemaFromAnnotation( JsonView jsonViewAnnotation, boolean openapi31, Schema existingSchema) { + return getSchemaFromAnnotation(schema, components, jsonViewAnnotation, openapi31, existingSchema, null); + } + public static Optional getSchemaFromAnnotation( + io.swagger.v3.oas.annotations.media.Schema schema, + Components components, + JsonView jsonViewAnnotation, + boolean openapi31, + Schema existingSchema, + ModelConverterContext context) { if (schema == null || !hasSchemaAnnotation(schema)) { if (existingSchema == null || !openapi31) { return Optional.empty(); @@ -619,19 +654,19 @@ public static Optional getSchemaFromAnnotation( schemaObject.setExclusiveMinimumValue(BigDecimal.valueOf(schema.exclusiveMinimumValue())); } if (!schema.contentSchema().equals(Void.class)) { - schemaObject.setContentSchema(resolveSchemaFromType(schema.contentSchema(), components, jsonViewAnnotation, openapi31)); + schemaObject.setContentSchema(resolveSchemaFromType(schema.contentSchema(), components, jsonViewAnnotation, openapi31, null, null, context)); } if (!schema.propertyNames().equals(Void.class)) { - schemaObject.setPropertyNames(resolveSchemaFromType(schema.propertyNames(), components, jsonViewAnnotation, openapi31)); + schemaObject.setPropertyNames(resolveSchemaFromType(schema.propertyNames(), components, jsonViewAnnotation, openapi31, null, null, context)); } if (!schema._if().equals(Void.class)) { - schemaObject.setIf(resolveSchemaFromType(schema._if(), components, jsonViewAnnotation, openapi31)); + schemaObject.setIf(resolveSchemaFromType(schema._if(), components, jsonViewAnnotation, openapi31, null, null, context)); } if (!schema._else().equals(Void.class)) { - schemaObject.setElse(resolveSchemaFromType(schema._else(), components, jsonViewAnnotation, openapi31)); + schemaObject.setElse(resolveSchemaFromType(schema._else(), components, jsonViewAnnotation, openapi31, null, null, context)); } if (!schema.then().equals(Void.class)) { - schemaObject.setThen(resolveSchemaFromType(schema.then(), components, jsonViewAnnotation, openapi31)); + schemaObject.setThen(resolveSchemaFromType(schema.then(), components, jsonViewAnnotation, openapi31, null, null, context)); } if (StringUtils.isNotBlank(schema._const())) { try { @@ -659,26 +694,26 @@ public static Optional getSchemaFromAnnotation( if (schema.dependentSchemas().length > 0) { final Map dependentSchema = new LinkedHashMap<>(); for (StringToClassMapItem mapItem : schema.dependentSchemas()) { - dependentSchema.put(mapItem.key(), resolveSchemaFromType(mapItem.value(), components, jsonViewAnnotation, openapi31)); + dependentSchema.put(mapItem.key(), resolveSchemaFromType(mapItem.value(), components, jsonViewAnnotation, openapi31, null, null, context)); } schemaObject.setDependentSchemas(dependentSchema); } if (schema.patternProperties().length > 0) { final Map patternProperties = new LinkedHashMap<>(); for (StringToClassMapItem mapItem : schema.patternProperties()) { - patternProperties.put(mapItem.key(), resolveSchemaFromType(mapItem.value(), components, jsonViewAnnotation, openapi31)); + patternProperties.put(mapItem.key(), resolveSchemaFromType(mapItem.value(), components, jsonViewAnnotation, openapi31, null, null, context)); } schemaObject.setPatternProperties(patternProperties); } if (schema.properties().length > 0) { final Map properties = new LinkedHashMap<>(); for (StringToClassMapItem mapItem : schema.properties()) { - properties.put(mapItem.key(), resolveSchemaFromType(mapItem.value(), components, jsonViewAnnotation, openapi31)); + properties.put(mapItem.key(), resolveSchemaFromType(mapItem.value(), components, jsonViewAnnotation, openapi31, null, null, context)); } schemaObject.setProperties(properties); } if (!schema.unevaluatedProperties().equals(Void.class)) { - schemaObject.setUnevaluatedProperties(resolveSchemaFromType(schema.unevaluatedProperties(), components, jsonViewAnnotation, openapi31)); + schemaObject.setUnevaluatedProperties(resolveSchemaFromType(schema.unevaluatedProperties(), components, jsonViewAnnotation, openapi31, null, null, context)); } if (schema.examples().length > 0) { schemaObject.setExamples(Arrays.asList(schema.examples())); @@ -777,27 +812,27 @@ public static Optional getSchemaFromAnnotation( if (!schema.not().equals(Void.class)) { Class schemaImplementation = schema.not(); - Schema notSchemaObject = resolveSchemaFromType(schemaImplementation, components, jsonViewAnnotation, openapi31); + Schema notSchemaObject = resolveSchemaFromType(schemaImplementation, components, jsonViewAnnotation, openapi31, null, null, context); schemaObject.setNot(notSchemaObject); } if (schema.oneOf().length > 0) { Class[] schemaImplementations = schema.oneOf(); for (Class schemaImplementation : schemaImplementations) { - Schema oneOfSchemaObject = resolveSchemaFromType(schemaImplementation, components, jsonViewAnnotation, openapi31); + Schema oneOfSchemaObject = resolveSchemaFromType(schemaImplementation, components, jsonViewAnnotation, openapi31, null, null, context); ((ComposedSchema) schemaObject).addOneOfItem(oneOfSchemaObject); } } if (schema.anyOf().length > 0) { Class[] schemaImplementations = schema.anyOf(); for (Class schemaImplementation : schemaImplementations) { - Schema anyOfSchemaObject = resolveSchemaFromType(schemaImplementation, components, jsonViewAnnotation, openapi31); + Schema anyOfSchemaObject = resolveSchemaFromType(schemaImplementation, components, jsonViewAnnotation, openapi31, null, null, context); ((ComposedSchema) schemaObject).addAnyOfItem(anyOfSchemaObject); } } if (schema.allOf().length > 0) { Class[] schemaImplementations = schema.allOf(); for (Class schemaImplementation : schemaImplementations) { - Schema allOfSchemaObject = resolveSchemaFromType(schemaImplementation, components, jsonViewAnnotation, openapi31); + Schema allOfSchemaObject = resolveSchemaFromType(schemaImplementation, components, jsonViewAnnotation, openapi31, null, null, context); ((ComposedSchema) schemaObject).addAllOfItem(allOfSchemaObject); } } @@ -807,7 +842,7 @@ public static Optional getSchemaFromAnnotation( schemaObject.additionalProperties(false); } else { if (!schema.additionalPropertiesSchema().equals(Void.class)) { - schemaObject.additionalProperties(resolveSchemaFromType(schema.additionalPropertiesSchema(), components, jsonViewAnnotation, openapi31)); + schemaObject.additionalProperties(resolveSchemaFromType(schema.additionalPropertiesSchema(), components, jsonViewAnnotation, openapi31, null, null, context)); } } @@ -819,22 +854,35 @@ public static Schema resolveSchemaFromType(Class schemaImplementation, Compon } public static Schema resolveSchemaFromType(Class schemaImplementation, Components components, JsonView jsonViewAnnotation, boolean openapi31) { - return resolveSchemaFromType(schemaImplementation, components, jsonViewAnnotation, openapi31, null, null); + return resolveSchemaFromType(schemaImplementation, components, jsonViewAnnotation, openapi31, null, null, null); } - public static Schema resolveSchemaFromType(Class schemaImplementation, Components components, JsonView jsonViewAnnotation, boolean openapi31, io.swagger.v3.oas.annotations.media.Schema schemaAnnotation, io.swagger.v3.oas.annotations.media.ArraySchema arrayAnnotation) { + public static Schema resolveSchemaFromType(Class schemaImplementation, Components components, JsonView jsonViewAnnotation, boolean openapi31, io.swagger.v3.oas.annotations.media.Schema schemaAnnotation, io.swagger.v3.oas.annotations.media.ArraySchema arrayAnnotation, ModelConverterContext context) { Schema schemaObject; PrimitiveType primitiveType = PrimitiveType.fromType(schemaImplementation); if (primitiveType != null) { schemaObject = primitiveType.createProperty(); } else { schemaObject = new Schema(); - ResolvedSchema resolvedSchema = ModelConverters.getInstance(openapi31).readAllAsResolvedSchema(new AnnotatedType().type(schemaImplementation).jsonViewAnnotation(jsonViewAnnotation)); + ResolvedSchema resolvedSchema = null; + if (context == null) { + resolvedSchema = ModelConverters.getInstance(openapi31).readAllAsResolvedSchema(new AnnotatedType().type(schemaImplementation).components(components).jsonViewAnnotation(jsonViewAnnotation)); + } else { + Schema resSchema = context.resolve(new AnnotatedType().type(schemaImplementation).components(components).jsonViewAnnotation(jsonViewAnnotation)); + if (resSchema != null) { + resolvedSchema = new ResolvedSchema(); + resolvedSchema.schema = resSchema; + resolvedSchema.referencedSchemas = context.getDefinedModels(); + } + } Map schemaMap; if (resolvedSchema != null) { schemaMap = resolvedSchema.referencedSchemas; if (schemaMap != null) { schemaMap.forEach((key, referencedSchema) -> { if (components != null) { + if (context != null) { + context.defineModel(key, referencedSchema); + } components.addSchemas(key, referencedSchema); } }); @@ -848,15 +896,23 @@ public static Schema resolveSchemaFromType(Class schemaImplementation, Compon } } } - Optional reResolvedSchema = getSchemaFromAnnotation(schemaAnnotation, components, jsonViewAnnotation, openapi31, schemaObject); - if (reResolvedSchema.isPresent()) { - schemaObject = reResolvedSchema.get(); + // Schema existingSchemaObject = clone(schemaObject, openapi31); + Schema existingSchemaObject = schemaObject; + if (openapi31) { + Optional reResolvedSchema = getSchemaFromAnnotation(schemaAnnotation, components, jsonViewAnnotation, openapi31, existingSchemaObject); + if (reResolvedSchema.isPresent()) { + existingSchemaObject = reResolvedSchema.get(); + } + reResolvedSchema = AnnotationsUtils.getArraySchema(arrayAnnotation, components, null, openapi31, existingSchemaObject); + if (reResolvedSchema.isPresent()) { + existingSchemaObject = reResolvedSchema.get(); + } } - if (StringUtils.isBlank(schemaObject.get$ref()) && StringUtils.isBlank(schemaObject.getType())) { + if (StringUtils.isBlank(existingSchemaObject.get$ref()) && StringUtils.isBlank(existingSchemaObject.getType())) { // default to string - schemaObject.setType("string"); + existingSchemaObject.setType("string"); } - return schemaObject; + return existingSchemaObject; } public static Optional> getTags(io.swagger.v3.oas.annotations.tags.Tag[] tags, boolean skipOnlyName) { @@ -1387,6 +1443,22 @@ public static Optional getContent(io.swagger.v3.oas.annotations.media.C return getContent(annotationContents, classTypes, methodTypes, schema, components, jsonViewAnnotation, false); } + public static Schema clone(Schema schema, boolean openapi31) { + if(schema == null) + return schema; + try { + String cloneName = schema.getName(); + if(openapi31) { + schema = Json31.mapper().readValue(Json31.pretty(schema), Schema.class); + } else { + schema = Json.mapper().readValue(Json.pretty(schema), Schema.class); + } + schema.setName(cloneName); + } catch (IOException e) { + LOGGER.error("Could not clone schema", e); + } + return schema; + } public static Optional getContent(io.swagger.v3.oas.annotations.media.Content[] annotationContents, String[] classTypes, String[] methodTypes, Schema schema, Components components, JsonView jsonViewAnnotation, boolean openapi31) { if (annotationContents == null || annotationContents.length == 0) { return Optional.empty(); @@ -1398,7 +1470,11 @@ public static Optional getContent(io.swagger.v3.oas.annotations.media.C for (io.swagger.v3.oas.annotations.media.Content annotationContent : annotationContents) { MediaType mediaType = new MediaType(); if (components != null) { - getSchema(annotationContent, components, jsonViewAnnotation, openapi31).ifPresent(mediaType::setSchema); + Optional annSchema = getSchema(annotationContent, components, jsonViewAnnotation, openapi31); + if (annSchema.isPresent()) { + // mediaType.setSchema(clone((Schema)annSchema.get(), openapi31)); + mediaType.setSchema((Schema)annSchema.get()); + } if (annotationContent.schemaProperties().length > 0) { if (mediaType.getSchema() == null) { mediaType.schema(new Schema().type("object")); @@ -1549,12 +1625,12 @@ public static Optional getSchema(io.swagger.v3.oas.annotations JsonView jsonViewAnnotation, boolean openapi31) { if (schemaImplementation != Void.class) { - Schema schemaObject = resolveSchemaFromType(schemaImplementation, components, jsonViewAnnotation, openapi31, schemaAnnotation, arrayAnnotation); + Schema schemaObject = resolveSchemaFromType(schemaImplementation, components, jsonViewAnnotation, openapi31, schemaAnnotation, arrayAnnotation, null); if (StringUtils.isNotBlank(schemaAnnotation.format())) { schemaObject.setFormat(schemaAnnotation.format()); } if (isArray) { - Optional arraySchema = AnnotationsUtils.getArraySchema(arrayAnnotation, components, jsonViewAnnotation, openapi31); + Optional arraySchema = AnnotationsUtils.getArraySchema(arrayAnnotation, components, jsonViewAnnotation, openapi31, null); if (arraySchema.isPresent()) { arraySchema.get().setItems(schemaObject); return arraySchema; @@ -1574,7 +1650,7 @@ public static Optional getSchema(io.swagger.v3.oas.annotations } return Optional.of(schemaFromAnnotation.get()); } else { - Optional arraySchemaFromAnnotation = AnnotationsUtils.getArraySchema(arrayAnnotation, components, jsonViewAnnotation, openapi31); + Optional arraySchemaFromAnnotation = AnnotationsUtils.getArraySchema(arrayAnnotation, components, jsonViewAnnotation, openapi31, null); if (arraySchemaFromAnnotation.isPresent()) { if (arraySchemaFromAnnotation.get().getItems() != null && StringUtils.isBlank(arraySchemaFromAnnotation.get().getItems().get$ref()) && StringUtils.isBlank(arraySchemaFromAnnotation.get().getItems().getType())) { // default to string diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/ModelResolverOAS31Test.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/ModelResolverOAS31Test.java index 6c97faa0d1..f9aa3ce83c 100644 --- a/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/ModelResolverOAS31Test.java +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/ModelResolverOAS31Test.java @@ -63,14 +63,7 @@ public void testOAS31Fields() { " country:\n" + " const: United States\n" + "Client:\n" + - " dependentSchemas:\n" + - " creditCard:\n" + - " $ref: '#/components/schemas/CreditCard'\n" + - " patternProperties:\n" + - " creditCard:\n" + - " $ref: '#/components/schemas/CreditCard'\n" + " properties:\n" + - " extraObject: {}\n" + " name:\n" + " type: string\n" + " creditCard:\n" + @@ -122,6 +115,14 @@ public void testOAS31Fields() { " $ref: '#/components/schemas/Address'\n" + " client:\n" + " $ref: '#/components/schemas/Client'\n" + + " dependentSchemas:\n" + + " creditCard:\n" + + " $ref: '#/components/schemas/CreditCard'\n" + + " patternProperties:\n" + + " creditCard:\n" + + " $ref: '#/components/schemas/CreditCard'\n" + + " properties:\n" + + " extraObject: {}\n" + "MultipleBaseBean:\n" + " description: MultipleBaseBean\n" + " properties:\n" + @@ -159,7 +160,7 @@ public void testOAS31Fields() { " postalCode:\n" + " pattern: \"[A-Z][0-9][A-Z] [0-9][A-Z][0-9]\"\n" + "PropertyNamesPattern:\n" + - " pattern: \"^[A-Za-z_][A-Za-z0-9_]*$\""); + " pattern: \"^[A-Za-z_][A-Za-z0-9_]*$\"\n"); } @Test diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/util/AnnotationsUtilsTest.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/util/AnnotationsUtilsTest.java index bfb4708dad..08f95abd10 100644 --- a/modules/swagger-core/src/test/java/io/swagger/v3/core/util/AnnotationsUtilsTest.java +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/util/AnnotationsUtilsTest.java @@ -71,7 +71,7 @@ private Object[][] expectedSchemaFromTypeAndFormat() { public void getSchema(String methodName, Map expected) throws NoSuchMethodException { final Method method = getClass().getDeclaredMethod(methodName); Content annotationContent = method.getAnnotation(ApiResponse.class).content()[0]; - Optional schema = AnnotationsUtils.getSchema(annotationContent, new Components(), null); + Optional schema = AnnotationsUtils.getSchema(annotationContent, new Components(), null, false); Assert.assertTrue(schema.isPresent()); Assert.assertEquals(schema.get().getType(), expected.get("type")); @@ -97,4 +97,4 @@ private void dummyType() { class DummyClass implements Serializable {} -} \ No newline at end of file +} diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java index 0d38546a4c..a4e4e0ff53 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java @@ -792,7 +792,10 @@ protected void processRequestBody(Parameter requestBodyParameter, Operation oper if (reResolvedSchema.isPresent()) { parameterSchema = reResolvedSchema.get(); } - + reResolvedSchema = AnnotationsUtils.getArraySchema(content.get().array(), components, null, config.isOpenAPI31(), parameterSchema); + if (reResolvedSchema.isPresent()) { + parameterSchema = reResolvedSchema.get(); + } } newMediaType.schema(parameterSchema); reresolvedMediaTypes.put(key, newMediaType); @@ -1248,20 +1251,7 @@ private MediaType clone(MediaType mediaType) { return mediaType; } private Schema clone(Schema schema) { - if(schema == null) - return schema; - try { - String cloneName = schema.getName(); - if(config.isOpenAPI31()) { - schema = Json31.mapper().readValue(Json31.pretty(schema), Schema.class); - } else { - schema = Json.mapper().readValue(Json.pretty(schema), Schema.class); - } - schema.setName(cloneName); - } catch (IOException e) { - LOGGER.error("Could not clone schema", e); - } - return schema; + return AnnotationsUtils.clone(schema, config.isOpenAPI31()); } protected void resolveResponseSchemaFromReturnType( @@ -1285,6 +1275,10 @@ protected void resolveResponseSchemaFromReturnType( if (reResolvedSchema.isPresent()) { existingSchema = reResolvedSchema.get(); } + reResolvedSchema = AnnotationsUtils.getArraySchema(content.get().array(), components, null, config.isOpenAPI31(), existingSchema); + if (reResolvedSchema.isPresent()) { + existingSchema = reResolvedSchema.get(); + } } mediaType.schema(existingSchema); reresolvedMediaTypes.put(key, mediaType); diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java index 325f900bb9..bd1b99d1b8 100644 --- a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java @@ -15,8 +15,10 @@ import io.swagger.v3.jaxrs2.matchers.SerializationMatchers; import io.swagger.v3.jaxrs2.petstore31.PetResource; import io.swagger.v3.jaxrs2.petstore31.TagResource; +import io.swagger.v3.jaxrs2.resources.Misc31Resource; import io.swagger.v3.jaxrs2.resources.ResponseReturnTypeResource; import io.swagger.v3.jaxrs2.resources.SchemaPropertiesResource; +import io.swagger.v3.jaxrs2.resources.SiblingPropResource; import io.swagger.v3.jaxrs2.resources.SiblingsResource; import io.swagger.v3.jaxrs2.resources.SiblingsResourceRequestBody; import io.swagger.v3.jaxrs2.resources.SiblingsResourceRequestBodyMultiple; @@ -74,9 +76,11 @@ import io.swagger.v3.jaxrs2.resources.Ticket3731BisResource; import io.swagger.v3.jaxrs2.resources.Ticket3731Resource; import io.swagger.v3.jaxrs2.resources.Ticket4412Resource; +import io.swagger.v3.jaxrs2.resources.Ticket4446Resource; import io.swagger.v3.jaxrs2.resources.UploadResource; import io.swagger.v3.jaxrs2.resources.UrlEncodedResourceWithEncodings; import io.swagger.v3.jaxrs2.resources.UserAnnotationResource; +import io.swagger.v3.jaxrs2.resources.WebHookResource; import io.swagger.v3.jaxrs2.resources.extensions.ExtensionsResource; import io.swagger.v3.jaxrs2.resources.extensions.OperationExtensionsResource; import io.swagger.v3.jaxrs2.resources.extensions.ParameterExtensionsResource; @@ -3680,4 +3684,260 @@ public void testSiblingsOnResourceRequestBodyMultiple() { " description: Pet\n"; SerializationMatchers.assertEqualsToYaml31(openAPI, yaml); } + + @Test + public void testSiblingsOnProperty() { + Reader reader = new Reader(new SwaggerConfiguration().openAPI(new OpenAPI()).openAPI31(true)); + Set> classes = new HashSet<>(Arrays.asList(SiblingPropResource.class, WebHookResource.class)); + OpenAPI openAPI = reader.read(classes); + String yaml = "openapi: 3.1.0\n" + + "paths:\n" + + " /pet:\n" + + " put:\n" + + " tags:\n" + + " - pet\n" + + " summary: Update an existing pet\n" + + " operationId: updatePet\n" + + " requestBody:\n" + + " description: Pet object that needs to be updated in the store\n" + + " content:\n" + + " application/json:\n" + + " schema:\n" + + " $ref: '#/components/schemas/Pet'\n" + + " description: A Pet in JSON Format\n" + + " required:\n" + + " - id\n" + + " writeOnly: true\n" + + " application/xml:\n" + + " schema:\n" + + " $ref: '#/components/schemas/Pet'\n" + + " description: A Pet in XML Format\n" + + " required:\n" + + " - id\n" + + " writeOnly: true\n" + + " required: true\n" + + " responses:\n" + + " \"200\":\n" + + " description: Successful operation\n" + + " content:\n" + + " application/xml:\n" + + " schema:\n" + + " $ref: '#/components/schemas/Pet'\n" + + " description: A Pet in XML Format\n" + + " readOnly: true\n" + + " application/json:\n" + + " schema:\n" + + " $ref: '#/components/schemas/Pet'\n" + + " description: A Pet in JSON Format\n" + + " readOnly: true\n" + + " \"400\":\n" + + " description: Invalid ID supplied\n" + + " \"404\":\n" + + " description: Pet not found\n" + + " \"405\":\n" + + " description: Validation exception\n" + + " security:\n" + + " - petstore_auth:\n" + + " - write:pets\n" + + " - read:pets\n" + + " - mutual_tls: []\n" + + "components:\n" + + " schemas:\n" + + " Category:\n" + + " description: parent\n" + + " properties:\n" + + " id:\n" + + " type: integer\n" + + " format: int64\n" + + " Pet:\n" + + " description: Pet\n" + + " properties:\n" + + " category:\n" + + " $ref: '#/components/schemas/Category'\n" + + " description: child\n" + + "webhooks:\n" + + " newPet:\n" + + " post:\n" + + " requestBody:\n" + + " description: Information about a new pet in the system\n" + + " content:\n" + + " application/json:\n" + + " schema:\n" + + " $ref: '#/components/schemas/Pet'\n" + + " description: Webhook Pet\n" + + " responses:\n" + + " \"200\":\n" + + " description: Return a 200 status to indicate that the data was received\n" + + " successfully\n"; + SerializationMatchers.assertEqualsToYaml31(openAPI, yaml); + } + + @Test + public void testMisc31() { + Reader reader = new Reader(new SwaggerConfiguration().openAPI(new OpenAPI()).openAPI31(true)); + Set> classes = new HashSet<>(Arrays.asList(Misc31Resource.class)); + OpenAPI openAPI = reader.read(classes); + String yaml = "openapi: 3.1.0\n" + + "paths:\n" + + " /pet:\n" + + " put:\n" + + " operationId: updatePet\n" + + " responses:\n" + + " default:\n" + + " description: default response\n" + + " content:\n" + + " application/json:\n" + + " schema:\n" + + " $ref: '#/components/schemas/ModelWithOAS31Stuff'\n" + + " application/xml:\n" + + " schema:\n" + + " $ref: '#/components/schemas/ModelWithOAS31Stuff'\n" + + "components:\n" + + " schemas:\n" + + " ModelWithOAS31Stuff:\n" + + " type: object\n" + + " $comment: Random comment at schema level\n" + + " $id: http://yourdomain.com/schemas/myschema.json\n" + + " description: this is model for testing OAS 3.1 resolving\n" + + " properties:\n" + + " randomList:\n" + + " type: array\n" + + " contains:\n" + + " type: string\n" + + " items:\n" + + " type: string\n" + + " maxContains: 10\n" + + " minContains: 1\n" + + " prefixItems:\n" + + " - type: string\n" + + " unevaluatedItems:\n" + + " type: number\n" + + " status:\n" + + " type:\n" + + " - string\n" + + " - number\n" + + " intValue:\n" + + " type: integer\n" + + " format: int32\n" + + " $anchor: intValue\n" + + " $comment: comment at schema property level\n" + + " exclusiveMaximum: 100\n" + + " exclusiveMinimum: 1\n" + + " text:\n" + + " type: string\n" + + " contentEncoding: plan/text\n" + + " contentMediaType: base64\n" + + " encodedString:\n" + + " type: string\n" + + " contentMediaType: application/jwt\n" + + " contentSchema:\n" + + " $ref: '#/components/schemas/MultipleBaseBean'\n" + + " address:\n" + + " $ref: '#/components/schemas/Address'\n" + + " client:\n" + + " type: string\n" + + " dependentSchemas:\n" + + " creditCard:\n" + + " $ref: '#/components/schemas/CreditCard'\n" + + " MultipleBaseBean:\n" + + " description: MultipleBaseBean\n" + + " properties:\n" + + " beanType:\n" + + " type: string\n" + + " a:\n" + + " type: integer\n" + + " format: int32\n" + + " b:\n" + + " type: string\n" + + " MultipleSub1Bean:\n" + + " allOf:\n" + + " - $ref: '#/components/schemas/MultipleBaseBean'\n" + + " - type: object\n" + + " properties:\n" + + " c:\n" + + " type: integer\n" + + " format: int32\n" + + " description: MultipleSub1Bean\n" + + " MultipleSub2Bean:\n" + + " allOf:\n" + + " - $ref: '#/components/schemas/MultipleBaseBean'\n" + + " - type: object\n" + + " properties:\n" + + " d:\n" + + " type: integer\n" + + " format: int32\n" + + " description: MultipleSub2Bean\n" + + " Address:\n" + + " if:\n" + + " $ref: '#/components/schemas/AnnotatedCountry'\n" + + " then:\n" + + " $ref: '#/components/schemas/PostalCodeNumberPattern'\n" + + " else:\n" + + " $ref: '#/components/schemas/PostalCodePattern'\n" + + " dependentRequired:\n" + + " street:\n" + + " - country\n" + + " properties:\n" + + " street:\n" + + " type: string\n" + + " country:\n" + + " type: string\n" + + " enum:\n" + + " - United States of America\n" + + " - Canada\n" + + " propertyNames:\n" + + " $ref: '#/components/schemas/PropertyNamesPattern'\n" + + " AnnotatedCountry:\n" + + " properties:\n" + + " country:\n" + + " const: United States\n" + + " CreditCard:\n" + + " properties:\n" + + " billingAddress:\n" + + " type: string\n" + + " PostalCodeNumberPattern:\n" + + " properties:\n" + + " postalCode:\n" + + " pattern: \"[0-9]{5}(-[0-9]{4})?\"\n" + + " PostalCodePattern:\n" + + " properties:\n" + + " postalCode:\n" + + " pattern: \"[A-Z][0-9][A-Z] [0-9][A-Z][0-9]\"\n" + + " PropertyNamesPattern:\n" + + " pattern: \"^[A-Za-z_][A-Za-z0-9_]*$\"\n"; + SerializationMatchers.assertEqualsToYaml31(openAPI, yaml); + } + + @Test + public void test4446CyclicProp() { + Reader reader = new Reader(new OpenAPI()); + + OpenAPI openAPI = reader.read(Ticket4446Resource.class); + String yaml = "openapi: 3.0.1\n" + + "paths:\n" + + " /test/test:\n" + + " get:\n" + + " operationId: getCart\n" + + " responses:\n" + + " default:\n" + + " description: default response\n" + + " content:\n" + + " '*/*':\n" + + " schema:\n" + + " $ref: '#/components/schemas/MyPojo'\n" + + "components:\n" + + " schemas:\n" + + " MyPojo:\n" + + " type: object\n" + + " properties:\n" + + " someStrings:\n" + + " type: array\n" + + " items:\n" + + " type: string\n" + + " morePojos:\n" + + " type: array\n" + + " items:\n" + + " $ref: '#/components/schemas/MyPojo'\n"; + SerializationMatchers.assertEqualsToYaml(openAPI, yaml); + } } diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/Address.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/Address.java new file mode 100644 index 0000000000..5cbcff26c0 --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/Address.java @@ -0,0 +1,90 @@ +package io.swagger.v3.jaxrs2.resources; + +import io.swagger.v3.oas.annotations.media.DependentRequired; +import io.swagger.v3.oas.annotations.media.Schema; + +@Schema( + _if = Address.AnnotatedCountry.class, + then = PostalCodeNumberPattern.class, + _else = PostalCodePattern.class, + propertyNames = Address.PropertyNamesPattern.class, + dependentRequiredMap = { + @DependentRequired( + name = "street", + value = { "country" } + ) + } +) +public class Address { + + private String street; + private CountryEnum country; + + public enum CountryEnum { + UNITED_STATES_OF_AMERICA("United States of America"), + CANADA("Canada"); + + private String value; + + CountryEnum(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + public static CountryEnum fromValue(String value) { + for (CountryEnum b : CountryEnum.values()) { + if (b.value.equals(value)) { + return b; + } + } + return null; + } + } + + public String getStreet() { + return street; + } + + public void setStreet(String street) { + this.street = street; + } + + public CountryEnum getCountry() { + return country; + } + + public void setCountry(CountryEnum country) { + this.country = country; + } + + class AnnotatedCountry { + + private Object country; + + @Schema( + _const = "United States" + + ) + public Object getCountry() { + return country; + } + + public void setCountry(Object country) { + this.country = country; + } + } + + @Schema( + pattern = "^[A-Za-z_][A-Za-z0-9_]*$" + ) + class PropertyNamesPattern { + } +} diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/Client.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/Client.java new file mode 100644 index 0000000000..0590c05b7b --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/Client.java @@ -0,0 +1,23 @@ +package io.swagger.v3.jaxrs2.resources; + +public class Client { + + private String name; + private int creditCard; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getCreditCard() { + return creditCard; + } + + public void setCreditCard(int creditCard) { + this.creditCard = creditCard; + } +} diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/CreditCard.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/CreditCard.java new file mode 100644 index 0000000000..5bea0845de --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/CreditCard.java @@ -0,0 +1,14 @@ +package io.swagger.v3.jaxrs2.resources; + +public class CreditCard { + + private String billingAddress; + + public String getBillingAddress() { + return billingAddress; + } + + public void setBillingAddress(String billingAddress) { + this.billingAddress = billingAddress; + } +} diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/Misc31Resource.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/Misc31Resource.java new file mode 100644 index 0000000000..e06a3bb549 --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/Misc31Resource.java @@ -0,0 +1,13 @@ +package io.swagger.v3.jaxrs2.resources; + +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; + +@Path("/pet") +@Produces({"application/json", "application/xml"}) +public class Misc31Resource { + @PUT + public ModelWithOAS31Stuff updatePet(){ return null;} + +} diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/ModelWithOAS31Stuff.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/ModelWithOAS31Stuff.java new file mode 100644 index 0000000000..c74edd2198 --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/ModelWithOAS31Stuff.java @@ -0,0 +1,126 @@ +package io.swagger.v3.jaxrs2.resources; + +import io.swagger.v3.jaxrs2.resources.model.MultipleBaseBean; +import io.swagger.v3.oas.annotations.StringToClassMapItem; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Schema; + +import java.util.List; + +@Schema( + $id = "http://yourdomain.com/schemas/myschema.json", + description = "this is model for testing OAS 3.1 resolving", + $comment = "Random comment at schema level", + types = {"object"} +) +public class ModelWithOAS31Stuff { + + + + + private List randomList; + private Object status; + private int intValue; + private String text; + private String encodedString; + private Address address; + private Client client; + + @ArraySchema( + maxContains = 10, + minContains = 1, + contains = @Schema( + types = "string" + ), + unevaluatedItems = @Schema( + types = "number" + ), + prefixItems = { + @Schema( + types = "string" + ) + } + ) + public List getRandomList() { + return randomList; + } + + public void setRandomList(List randomList) { + this.randomList = randomList; + } + + @Schema(types = { + "string", + "number" + }) + public Object getStatus() { + return status; + } + + public void setStatus(Object status) { + this.status = status; + } + + @Schema( + $anchor = "intValue", + $comment = "comment at schema property level", + exclusiveMaximumValue = 100, + exclusiveMinimumValue = 1 + ) + public int getIntValue() { + return intValue; + } + + public void setIntValue(int intValue) { + this.intValue = intValue; + } + + @Schema( + contentEncoding = "plan/text", + contentMediaType = "base64" + ) + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + @Schema( + contentMediaType = "application/jwt", + contentSchema = MultipleBaseBean.class + ) + public String getEncodedString() { + return encodedString; + } + + public void setEncodedString(String encodedString) { + this.encodedString = encodedString; + } + + public Address getAddress() { + return address; + } + + public void setAddress(Address address) { + this.address = address; + } + + + @Schema( + dependentSchemas = { + @StringToClassMapItem( + key = "creditCard", + value = CreditCard.class + ) + } + ) + public String getClient() { + return null; + } + + public void setClient(String client) { + + } +} diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/PostalCodeNumberPattern.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/PostalCodeNumberPattern.java new file mode 100644 index 0000000000..8df10e618c --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/PostalCodeNumberPattern.java @@ -0,0 +1,20 @@ +package io.swagger.v3.jaxrs2.resources; + +import io.swagger.v3.oas.annotations.media.Schema; + + +public class PostalCodeNumberPattern { + + private Object postalCode; + + @Schema( + pattern = "[0-9]{5}(-[0-9]{4})?" + ) + public Object getPostalCode() { + return postalCode; + } + + public void setPostalCode(Object postalCode) { + this.postalCode = postalCode; + } +} diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/PostalCodePattern.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/PostalCodePattern.java new file mode 100644 index 0000000000..379be42ecd --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/PostalCodePattern.java @@ -0,0 +1,19 @@ +package io.swagger.v3.jaxrs2.resources; + +import io.swagger.v3.oas.annotations.media.Schema; + +public class PostalCodePattern { + + private Object postalCode; + + @Schema( + pattern = "[A-Z][0-9][A-Z] [0-9][A-Z][0-9]" + ) + public Object getPostalCode() { + return postalCode; + } + + public void setPostalCode(Object postalCode) { + this.postalCode = postalCode; + } +} diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/SiblingPropResource.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/SiblingPropResource.java new file mode 100644 index 0000000000..b2c30475c7 --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/SiblingPropResource.java @@ -0,0 +1,79 @@ +package io.swagger.v3.jaxrs2.resources; + +import io.swagger.v3.jaxrs2.resources.siblings.Pet; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.parameters.RequestBody; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; + +import javax.ws.rs.Consumes; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; + +@Path("/pet") +@Produces({"application/json", "application/xml"}) +public class SiblingPropResource { + @PUT + @Operation(summary = "Update an existing pet", + tags = {"pet"}, + security = { + @SecurityRequirement(name = "petstore_auth", scopes = {"write:pets", "read:pets"}), + @SecurityRequirement(name = "mutual_tls", scopes = {}) + }, + responses = { + @ApiResponse( + responseCode = "200", + description = "Successful operation", + useReturnTypeSchema = true, + content = { + @Content( + mediaType = "application/xml", + schema = @Schema( + accessMode = Schema.AccessMode.READ_ONLY, + description = "A Pet in XML Format" + ) + ), + @Content( + mediaType = "application/json", + schema = @Schema( + accessMode = Schema.AccessMode.READ_ONLY, + description = "A Pet in JSON Format" + ) + ) + } + ), + @ApiResponse(responseCode = "400", description = "Invalid ID supplied"), + @ApiResponse(responseCode = "404", description = "Pet not found"), + @ApiResponse(responseCode = "405", description = "Validation exception") }) + @Consumes({"application/json", "application/xml"}) + public Pet updatePet( + @RequestBody( + description = "Pet object that needs to be updated in the store", + required = true, + useParameterTypeSchema = true, + content = { + @Content( + mediaType = "application/json", + schema = @Schema( + accessMode = Schema.AccessMode.WRITE_ONLY, + description = "A Pet in JSON Format", + requiredProperties = {"id"} + ) + ), + @Content( + mediaType = "application/xml", + schema = @Schema( + accessMode = Schema.AccessMode.WRITE_ONLY, + description = "A Pet in XML Format", + requiredProperties = {"id"} + ) + ) + } + ) Pet pet) { + return null; + } + +} diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/Ticket4446Resource.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/Ticket4446Resource.java new file mode 100644 index 0000000000..46befa99bd --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/Ticket4446Resource.java @@ -0,0 +1,19 @@ +package io.swagger.v3.jaxrs2.resources; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import java.util.List; + +@Path("/test") +public class Ticket4446Resource { + @Path("test") + @GET + public MyPojo getCart() { + return null; + } + + public static class MyPojo { + public List someStrings; + public List morePojos; + } +} diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/WebHookResource.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/WebHookResource.java new file mode 100644 index 0000000000..5d44b011d9 --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/WebHookResource.java @@ -0,0 +1,37 @@ +package io.swagger.v3.jaxrs2.resources; + +import io.swagger.v3.jaxrs2.resources.siblings.Pet; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Webhook; +import io.swagger.v3.oas.annotations.Webhooks; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.parameters.RequestBody; +import io.swagger.v3.oas.annotations.responses.ApiResponse; + +@Webhooks({ + @Webhook( + name = "newPet", + operation = @Operation( + requestBody = @RequestBody( + description = "Information about a new pet in the system", + content = { + @Content( + mediaType = "application/json", + schema = @Schema( + description = "Webhook Pet", + implementation = Pet.class + ) + ) + } + ), + method = "post", + responses = @ApiResponse( + responseCode = "200", + description = "Return a 200 status to indicate that the data was received successfully" + ) + ) + ) +}) +public class WebHookResource { +} From fd61120863152522e0e6fddb905808f267247c9b Mon Sep 17 00:00:00 2001 From: frantuma Date: Mon, 3 Jul 2023 18:30:18 +0200 Subject: [PATCH 066/131] fix oas 3.1 extensions naming resolving --- .../io/swagger/v3/core/jackson/ModelResolver.java | 4 ++-- .../io/swagger/v3/core/util/AnnotationsUtils.java | 14 +++++++++----- .../swagger/v3/core/util/ParameterProcessor.java | 2 +- .../java/io/swagger/v3/jaxrs2/OperationParser.java | 4 ++-- .../src/main/java/io/swagger/v3/jaxrs2/Reader.java | 2 +- 5 files changed, 15 insertions(+), 11 deletions(-) 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 bf836605a0..dc1a237ca3 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 @@ -2152,7 +2152,7 @@ protected Map resolveExtensions(Annotated a, Annotation[] annota if (schema != null && schema.extensions() != null && schema.extensions().length > 0) { - return AnnotationsUtils.getExtensions(schema.extensions()); + return AnnotationsUtils.getExtensions(openapi31, schema.extensions()); } return null; } @@ -2346,7 +2346,7 @@ protected Map resolveExtensions(AnnotatedType a, io.swagger.v3.o if (arraySchema != null && arraySchema.extensions() != null && arraySchema.extensions().length > 0) { - return AnnotationsUtils.getExtensions(arraySchema.extensions()); + return AnnotationsUtils.getExtensions(openapi31, arraySchema.extensions()); } return null; } diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java index 2986b3287e..679a07c864 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java @@ -802,7 +802,7 @@ public static Optional getSchemaFromAnnotation( } if (schema.extensions().length > 0) { - Map extensions = AnnotationsUtils.getExtensions(schema.extensions()); + Map extensions = AnnotationsUtils.getExtensions(openapi31, schema.extensions()); if (extensions != null) { extensions.forEach(schemaObject::addExtension); } @@ -1739,7 +1739,8 @@ public static Map getExtensions(boolean openapi31, Extension... final Map map = new HashMap<>(); for (Extension extension : extensions) { final String name = extension.name(); - final String key = name.length() > 0 ? StringUtils.prependIfMissing(name, "x-") : name; + String decoratedName = openapi31 ? name : StringUtils.prependIfMissing(name, "x-"); + final String key = name.length() > 0 ? decoratedName : name; for (ExtensionProperty property : extension.properties()) { final String propertyName = property.name(); @@ -1755,12 +1756,15 @@ public static Map getExtensions(boolean openapi31, Extension... } else { processedValue = Json.mapper().readTree(propertyValue); } - map.put(StringUtils.prependIfMissing(propertyName, "x-"), processedValue); + decoratedName = openapi31 ? propertyName : StringUtils.prependIfMissing(propertyName, "x-"); + map.put(decoratedName, processedValue); } catch (Exception e) { - map.put(StringUtils.prependIfMissing(propertyName, "x-"), propertyValue); + decoratedName = openapi31 ? propertyName : StringUtils.prependIfMissing(propertyName, "x-"); + map.put(decoratedName, propertyValue); } } else { - map.put(StringUtils.prependIfMissing(propertyName, "x-"), propertyValue); + decoratedName = openapi31 ? propertyName : StringUtils.prependIfMissing(propertyName, "x-"); + map.put(decoratedName, propertyValue); } } else { Object value = map.get(key); diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/ParameterProcessor.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/ParameterProcessor.java index de969ff72c..e49ae8cc1a 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/ParameterProcessor.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/ParameterProcessor.java @@ -154,7 +154,7 @@ public static Parameter applyAnnotations( } if (p.extensions().length > 0) { - Map extensionMap = AnnotationsUtils.getExtensions(p.extensions()); + Map extensionMap = AnnotationsUtils.getExtensions(openapi31, p.extensions()); if (extensionMap != null && ! extensionMap.isEmpty()) { extensionMap.forEach(parameter::addExtension); } diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/OperationParser.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/OperationParser.java index 6ac39cea69..360a33ac14 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/OperationParser.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/OperationParser.java @@ -42,7 +42,7 @@ public static Optional getRequestBody(io.swagger.v3.oas.annotations isEmpty = false; } if (requestBody.extensions().length > 0) { - Map extensions = AnnotationsUtils.getExtensions(requestBody.extensions()); + Map extensions = AnnotationsUtils.getExtensions(openapi31, requestBody.extensions()); if (extensions != null) { extensions.forEach(requestBodyObject::addExtension); } @@ -85,7 +85,7 @@ public static Optional getApiResponses(final io.swagger.v3.oas.ann apiResponseObject.setDescription(response.description()); } if (response.extensions().length > 0) { - Map extensions = AnnotationsUtils.getExtensions(response.extensions()); + Map extensions = AnnotationsUtils.getExtensions(openapi31, response.extensions()); if (extensions != null) { extensions.forEach(apiResponseObject::addExtension); } diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java index a4e4e0ff53..be60e5f8af 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java @@ -335,7 +335,7 @@ public OpenAPI read(Class cls, // OpenApiDefinition extensions if (openAPIDefinition.extensions().length > 0) { openAPI.setExtensions(AnnotationsUtils - .getExtensions(openAPIDefinition.extensions())); + .getExtensions(config.isOpenAPI31(), openAPIDefinition.extensions())); } } From ae9a4f0ec91d4e06e85ff19d8f5a5877d3879fa8 Mon Sep 17 00:00:00 2001 From: frantuma Date: Tue, 4 Jul 2023 17:41:59 +0200 Subject: [PATCH 067/131] fix oas 3.1 parameter resolving --- .../v3/jaxrs2/DefaultParameterExtension.java | 3 +- .../java/io/swagger/v3/jaxrs2/ReaderTest.java | 29 ++++++++++++++ .../ParameterMaximumValueResource.java | 38 +++++++++++++++++++ 3 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/ParameterMaximumValueResource.java diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/DefaultParameterExtension.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/DefaultParameterExtension.java index e4f8b6795e..ed958c0a33 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/DefaultParameterExtension.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/DefaultParameterExtension.java @@ -140,7 +140,8 @@ public ResolvedParameter extractParameters(List annotations, components, classConsumes == null ? new String[0] : classConsumes.value(), methodConsumes == null ? new String[0] : methodConsumes.value(), - jsonViewAnnotation); + jsonViewAnnotation, + openapi31); if (processedParameter != null) { extractParametersResult.parameters.add(processedParameter); } diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java index bd1b99d1b8..7cd24d81c6 100644 --- a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java @@ -16,6 +16,7 @@ import io.swagger.v3.jaxrs2.petstore31.PetResource; import io.swagger.v3.jaxrs2.petstore31.TagResource; import io.swagger.v3.jaxrs2.resources.Misc31Resource; +import io.swagger.v3.jaxrs2.resources.ParameterMaximumValueResource; import io.swagger.v3.jaxrs2.resources.ResponseReturnTypeResource; import io.swagger.v3.jaxrs2.resources.SchemaPropertiesResource; import io.swagger.v3.jaxrs2.resources.SiblingPropResource; @@ -3940,4 +3941,32 @@ public void test4446CyclicProp() { " $ref: '#/components/schemas/MyPojo'\n"; SerializationMatchers.assertEqualsToYaml(openAPI, yaml); } + + @Test + public void testParameterMaximumValue() { + Reader reader = new Reader(new SwaggerConfiguration().openAPI(new OpenAPI()).openAPI31(true)); + + OpenAPI openAPI = reader.read(ParameterMaximumValueResource.class); + String yaml = "openapi: 3.1.0\n" + + "paths:\n" + + " /test/{petId}:\n" + + " get:\n" + + " operationId: getPetById\n" + + " parameters:\n" + + " - name: petId\n" + + " in: path\n" + + " description: ID of pet that needs to be fetched\n" + + " required: true\n" + + " schema:\n" + + " type: integer\n" + + " format: int64\n" + + " exclusiveMaximum: 10\n" + + " exclusiveMinimum: 1\n" + + " responses:\n" + + " default:\n" + + " description: default response\n" + + " content:\n" + + " '*/*': {}\n"; + SerializationMatchers.assertEqualsToYaml31(openAPI, yaml); + } } diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/ParameterMaximumValueResource.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/ParameterMaximumValueResource.java new file mode 100644 index 0000000000..cd02a32c0f --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/ParameterMaximumValueResource.java @@ -0,0 +1,38 @@ +package io.swagger.v3.jaxrs2.resources; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; + +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; +import javax.ws.rs.DefaultValue; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.Response; +import java.util.List; + +@Path("/test") +public class ParameterMaximumValueResource { + + @GET + @Path("/{petId}") + public Response getPetById( + @Parameter( + description = "ID of pet that needs to be fetched", + schema = @Schema( + type = "integer", + format = "int64", + exclusiveMinimumValue = 1, + exclusiveMaximumValue = 10 + ), + required = true) + @PathParam("petId") Long petId) { + return null; + } +} From 20ca53cf5643500c6e8d96d8b16d62bd38311b61 Mon Sep 17 00:00:00 2001 From: frantuma Date: Sat, 8 Jul 2023 11:02:56 +0000 Subject: [PATCH 068/131] prepare release 2.2.15 --- README.md | 5 +++-- modules/swagger-annotations/pom.xml | 2 +- modules/swagger-core/pom.xml | 2 +- .../swagger-eclipse-transformer-maven-plugin/pom.xml | 2 +- modules/swagger-gradle-plugin/README.md | 4 ++-- modules/swagger-gradle-plugin/gradle.properties | 2 +- .../io/swagger/v3/plugins/gradle/SwaggerPlugin.java | 2 +- .../v3/plugins/gradle/SwaggerResolveTest.java | 4 ++-- modules/swagger-integration/pom.xml | 2 +- .../swagger-jaxrs2-servlet-initializer-v2/pom.xml | 2 +- modules/swagger-jaxrs2-servlet-initializer/pom.xml | 2 +- modules/swagger-jaxrs2/pom.xml | 2 +- modules/swagger-maven-plugin/README.md | 12 ++++++------ modules/swagger-maven-plugin/pom.xml | 2 +- modules/swagger-models/pom.xml | 2 +- .../modules/swagger-annotations-jakarta/pom.xml | 2 +- .../modules/swagger-core-jakarta/pom.xml | 2 +- .../modules/swagger-integration-jakarta/pom.xml | 2 +- .../modules/swagger-jaxrs2-jakarta/pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../modules/swagger-maven-plugin-jakarta/pom.xml | 2 +- .../modules/swagger-models-jakarta/pom.xml | 2 +- modules/swagger-project-jakarta/pom.xml | 2 +- pom.xml | 2 +- 25 files changed, 34 insertions(+), 33 deletions(-) diff --git a/README.md b/README.md index 434eb59399..4e94ad488f 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,8 @@ The OpenAPI Specification has undergone several revisions since initial creation Swagger core Version | Release Date | OpenAPI Spec compatibility | Notes | Status ------------------------- | ------------ | -------------------------- | ----- | ---- -2.2.14 (**current stable**)| 2023-06-26 | 3.x | [tag v2.2.14](https://github.com/swagger-api/swagger-core/tree/v2.2.14) | Supported +2.2.15 (**current stable**)| 2023-07-08 | 3.x | [tag v2.2.15](https://github.com/swagger-api/swagger-core/tree/v2.2.15) | Supported +2.2.14 | 2023-06-26 | 3.x | [tag v2.2.14](https://github.com/swagger-api/swagger-core/tree/v2.2.14) | Supported 2.2.13 | 2023-06-24 | 3.x | [tag v2.2.13](https://github.com/swagger-api/swagger-core/tree/v2.2.13) | Supported 2.2.12 | 2023-06-13 | 3.x | [tag v2.2.12](https://github.com/swagger-api/swagger-core/tree/v2.2.12) | Supported 2.2.11 | 2023-06-01 | 3.x | [tag v2.2.11](https://github.com/swagger-api/swagger-core/tree/v2.2.11) | Supported @@ -100,7 +101,7 @@ You need the following installed and available in your $PATH: * Jackson 2.4.5 or greater -### To build from source (currently 2.2.15-SNAPSHOT) +### To build from source (currently 2.2.16-SNAPSHOT) ``` # first time building locally mvn -N diff --git a/modules/swagger-annotations/pom.xml b/modules/swagger-annotations/pom.xml index a9f9ac25b9..30f749b65c 100644 --- a/modules/swagger-annotations/pom.xml +++ b/modules/swagger-annotations/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.15-SNAPSHOT + 2.2.15 ../.. 4.0.0 diff --git a/modules/swagger-core/pom.xml b/modules/swagger-core/pom.xml index bb75d52fa4..efc16f4374 100644 --- a/modules/swagger-core/pom.xml +++ b/modules/swagger-core/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.15-SNAPSHOT + 2.2.15 ../.. 4.0.0 diff --git a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml index 83b58c30e4..a47308c5f6 100644 --- a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml +++ b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.15-SNAPSHOT + 2.2.15 ../.. 4.0.0 diff --git a/modules/swagger-gradle-plugin/README.md b/modules/swagger-gradle-plugin/README.md index bce7977479..4b36348077 100644 --- a/modules/swagger-gradle-plugin/README.md +++ b/modules/swagger-gradle-plugin/README.md @@ -26,7 +26,7 @@ Alternatively provide as value a classpath with the following dependencies (repl ``` plugins { - id "io.swagger.core.v3.swagger-gradle-plugin" version "2.2.14" + id "io.swagger.core.v3.swagger-gradle-plugin" version "2.2.15" } ``` ### Gradle 1.x and 2.0 @@ -43,7 +43,7 @@ buildscript { } } dependencies { - classpath "io.swagger.core.v3:swagger-gradle-plugin:2.2.14" + classpath "io.swagger.core.v3:swagger-gradle-plugin:2.2.15" } } diff --git a/modules/swagger-gradle-plugin/gradle.properties b/modules/swagger-gradle-plugin/gradle.properties index 4384fc45e8..8b9043972a 100644 --- a/modules/swagger-gradle-plugin/gradle.properties +++ b/modules/swagger-gradle-plugin/gradle.properties @@ -1,2 +1,2 @@ -version=2.2.15-SNAPSHOT +version=2.2.15 jettyVersion=9.4.49.v20220914 diff --git a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java index 8ec5f3d750..842dea0eba 100644 --- a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java +++ b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java @@ -16,7 +16,7 @@ public void apply(Project project) { config.defaultDependencies(new Action() { public void execute(DependencySet dependencies) { dependencies.add(project.getDependencies().create("org.apache.commons:commons-lang3:3.12.0")); - dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.15-SNAPSHOT")); + dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.15")); dependencies.add(project.getDependencies().create("javax.ws.rs:javax.ws.rs-api:2.1")); dependencies.add(project.getDependencies().create("javax.servlet:javax.servlet-api:3.1.0")); } diff --git a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java index 9c7ec4283b..b8089fe39a 100644 --- a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java +++ b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java @@ -81,7 +81,7 @@ public void testSwaggerResolveTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.15-SNAPSHOT'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.15'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + @@ -154,7 +154,7 @@ public void testSwaggerResolveWithOAS31OptionTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.15-SNAPSHOT'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.15'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + diff --git a/modules/swagger-integration/pom.xml b/modules/swagger-integration/pom.xml index e9d7b38f28..e88090e74d 100644 --- a/modules/swagger-integration/pom.xml +++ b/modules/swagger-integration/pom.xml @@ -6,7 +6,7 @@ io.swagger.core.v3 swagger-project - 2.2.15-SNAPSHOT + 2.2.15 ../.. swagger-integration diff --git a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml index 381f44d102..b600ffc519 100644 --- a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.15-SNAPSHOT + 2.2.15 ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2-servlet-initializer/pom.xml b/modules/swagger-jaxrs2-servlet-initializer/pom.xml index 5d923974db..d4c740177e 100644 --- a/modules/swagger-jaxrs2-servlet-initializer/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.15-SNAPSHOT + 2.2.15 ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2/pom.xml b/modules/swagger-jaxrs2/pom.xml index acd910394e..d68e51c6b3 100644 --- a/modules/swagger-jaxrs2/pom.xml +++ b/modules/swagger-jaxrs2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.15-SNAPSHOT + 2.2.15 ../../ 4.0.0 diff --git a/modules/swagger-maven-plugin/README.md b/modules/swagger-maven-plugin/README.md index 610f294f91..ce7fd2d1b5 100644 --- a/modules/swagger-maven-plugin/README.md +++ b/modules/swagger-maven-plugin/README.md @@ -22,7 +22,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin - 2.2.14 + 2.2.15 openapi ${project.build.directory}/generatedtest @@ -47,7 +47,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-jaxrs2 - 2.2.14 + 2.2.15 @@ -73,7 +73,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin-jakarta - 2.2.14 + 2.2.15 openapi ${project.build.directory}/generatedtest @@ -98,7 +98,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-jaxrs2-jakarta - 2.2.14 + 2.2.15 @@ -126,7 +126,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin - 2.2.14 + 2.2.15 openapi ${project.build.directory}/generatedtest @@ -155,7 +155,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin-jakarta - 2.2.14 + 2.2.15 openapi ${project.build.directory}/generatedtest diff --git a/modules/swagger-maven-plugin/pom.xml b/modules/swagger-maven-plugin/pom.xml index a08c2cbc75..fd27e18151 100644 --- a/modules/swagger-maven-plugin/pom.xml +++ b/modules/swagger-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.15-SNAPSHOT + 2.2.15 ../.. 4.0.0 diff --git a/modules/swagger-models/pom.xml b/modules/swagger-models/pom.xml index 841f0019e0..3ed03eccc2 100644 --- a/modules/swagger-models/pom.xml +++ b/modules/swagger-models/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.15-SNAPSHOT + 2.2.15 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml index 828aaf1dd5..72e60e9bcb 100644 --- a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.15-SNAPSHOT + 2.2.15 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml index 474f599bed..b4379016c0 100644 --- a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.15-SNAPSHOT + 2.2.15 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml index d56840dccd..3455d67993 100644 --- a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.15-SNAPSHOT + 2.2.15 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml index 1f36f6c6d4..76f05ddea3 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.15-SNAPSHOT + 2.2.15 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml index 66d9154c88..f1d99be8a5 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.15-SNAPSHOT + 2.2.15 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml index e03a4d9246..636caf9f04 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.15-SNAPSHOT + 2.2.15 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml index 83758a3778..d8a335a970 100644 --- a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.15-SNAPSHOT + 2.2.15 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml index 1998211879..1d75a92ab9 100644 --- a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.15-SNAPSHOT + 2.2.15 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/pom.xml b/modules/swagger-project-jakarta/pom.xml index a77153096e..a15f51e7a3 100644 --- a/modules/swagger-project-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/pom.xml @@ -6,7 +6,7 @@ pom swagger-project-jakarta swagger-project-jakarta - 2.2.15-SNAPSHOT + 2.2.15 https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git diff --git a/pom.xml b/pom.xml index 166898734c..61c358ad9a 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ pom swagger-project swagger-project - 2.2.15-SNAPSHOT + 2.2.15 https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git From 9fd0bc0b70ae6d0282ef46e299e773669f839f0e Mon Sep 17 00:00:00 2001 From: frantuma Date: Sat, 8 Jul 2023 11:22:23 +0000 Subject: [PATCH 069/131] bump snapshot 2.2.16-SNAPSHOT --- modules/swagger-annotations/pom.xml | 2 +- modules/swagger-core/pom.xml | 2 +- modules/swagger-eclipse-transformer-maven-plugin/pom.xml | 2 +- modules/swagger-gradle-plugin/gradle.properties | 2 +- .../main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java | 2 +- .../java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java | 4 ++-- modules/swagger-integration/pom.xml | 2 +- modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml | 2 +- modules/swagger-jaxrs2-servlet-initializer/pom.xml | 2 +- modules/swagger-jaxrs2/pom.xml | 2 +- modules/swagger-maven-plugin/pom.xml | 2 +- modules/swagger-models/pom.xml | 2 +- .../modules/swagger-annotations-jakarta/pom.xml | 2 +- .../modules/swagger-core-jakarta/pom.xml | 2 +- .../modules/swagger-integration-jakarta/pom.xml | 2 +- .../modules/swagger-jaxrs2-jakarta/pom.xml | 2 +- .../swagger-jaxrs2-servlet-initializer-jakarta/pom.xml | 2 +- .../swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml | 2 +- .../modules/swagger-maven-plugin-jakarta/pom.xml | 2 +- .../modules/swagger-models-jakarta/pom.xml | 2 +- modules/swagger-project-jakarta/pom.xml | 2 +- pom.xml | 2 +- 22 files changed, 23 insertions(+), 23 deletions(-) diff --git a/modules/swagger-annotations/pom.xml b/modules/swagger-annotations/pom.xml index 30f749b65c..570e217f5c 100644 --- a/modules/swagger-annotations/pom.xml +++ b/modules/swagger-annotations/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.15 + 2.2.16-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-core/pom.xml b/modules/swagger-core/pom.xml index efc16f4374..9d8b680625 100644 --- a/modules/swagger-core/pom.xml +++ b/modules/swagger-core/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.15 + 2.2.16-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml index a47308c5f6..63f55588c4 100644 --- a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml +++ b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.15 + 2.2.16-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-gradle-plugin/gradle.properties b/modules/swagger-gradle-plugin/gradle.properties index 8b9043972a..46efcb154e 100644 --- a/modules/swagger-gradle-plugin/gradle.properties +++ b/modules/swagger-gradle-plugin/gradle.properties @@ -1,2 +1,2 @@ -version=2.2.15 +version=2.2.16-SNAPSHOT jettyVersion=9.4.49.v20220914 diff --git a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java index 842dea0eba..19060acaf3 100644 --- a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java +++ b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java @@ -16,7 +16,7 @@ public void apply(Project project) { config.defaultDependencies(new Action() { public void execute(DependencySet dependencies) { dependencies.add(project.getDependencies().create("org.apache.commons:commons-lang3:3.12.0")); - dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.15")); + dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.16-SNAPSHOT")); dependencies.add(project.getDependencies().create("javax.ws.rs:javax.ws.rs-api:2.1")); dependencies.add(project.getDependencies().create("javax.servlet:javax.servlet-api:3.1.0")); } diff --git a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java index b8089fe39a..c19697bab2 100644 --- a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java +++ b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java @@ -81,7 +81,7 @@ public void testSwaggerResolveTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.15'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.16-SNAPSHOT'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + @@ -154,7 +154,7 @@ public void testSwaggerResolveWithOAS31OptionTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.15'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.16-SNAPSHOT'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + diff --git a/modules/swagger-integration/pom.xml b/modules/swagger-integration/pom.xml index e88090e74d..b763c5bdf5 100644 --- a/modules/swagger-integration/pom.xml +++ b/modules/swagger-integration/pom.xml @@ -6,7 +6,7 @@ io.swagger.core.v3 swagger-project - 2.2.15 + 2.2.16-SNAPSHOT ../.. swagger-integration diff --git a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml index b600ffc519..28cd232949 100644 --- a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.15 + 2.2.16-SNAPSHOT ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2-servlet-initializer/pom.xml b/modules/swagger-jaxrs2-servlet-initializer/pom.xml index d4c740177e..6656708a3b 100644 --- a/modules/swagger-jaxrs2-servlet-initializer/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.15 + 2.2.16-SNAPSHOT ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2/pom.xml b/modules/swagger-jaxrs2/pom.xml index d68e51c6b3..789f5fb2ee 100644 --- a/modules/swagger-jaxrs2/pom.xml +++ b/modules/swagger-jaxrs2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.15 + 2.2.16-SNAPSHOT ../../ 4.0.0 diff --git a/modules/swagger-maven-plugin/pom.xml b/modules/swagger-maven-plugin/pom.xml index fd27e18151..ddbe92576c 100644 --- a/modules/swagger-maven-plugin/pom.xml +++ b/modules/swagger-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.15 + 2.2.16-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-models/pom.xml b/modules/swagger-models/pom.xml index 3ed03eccc2..a22eedb54f 100644 --- a/modules/swagger-models/pom.xml +++ b/modules/swagger-models/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.15 + 2.2.16-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml index 72e60e9bcb..2a54c8dcd3 100644 --- a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.15 + 2.2.16-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml index b4379016c0..ceb15def7b 100644 --- a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.15 + 2.2.16-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml index 3455d67993..be3e8b8de0 100644 --- a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.15 + 2.2.16-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml index 76f05ddea3..01798fb9dd 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.15 + 2.2.16-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml index f1d99be8a5..726c3be173 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.15 + 2.2.16-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml index 636caf9f04..4a52ee4d8d 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.15 + 2.2.16-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml index d8a335a970..b511c86b3a 100644 --- a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.15 + 2.2.16-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml index 1d75a92ab9..bd04d06493 100644 --- a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.15 + 2.2.16-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/pom.xml b/modules/swagger-project-jakarta/pom.xml index a15f51e7a3..1b7b9bf16b 100644 --- a/modules/swagger-project-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/pom.xml @@ -6,7 +6,7 @@ pom swagger-project-jakarta swagger-project-jakarta - 2.2.15 + 2.2.16-SNAPSHOT https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git diff --git a/pom.xml b/pom.xml index 61c358ad9a..bb62f40021 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ pom swagger-project swagger-project - 2.2.15 + 2.2.16-SNAPSHOT https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git From f050d0a63c5992c991ad066b15867c32ae6ded1a Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Sat, 25 Mar 2023 01:49:26 +0900 Subject: [PATCH 070/131] add support of visibility of properties not annotated with jsonview by setting DEFAULT_VIEW_INCLUSION --- .../v3/core/converter/AnnotatedType.java | 14 ++++ .../v3/core/jackson/ModelResolver.java | 2 +- .../v3/core/resolving/JsonViewTest.java | 82 +++++++++++++++++++ .../resolving/resources/JsonViewObject.java | 34 ++++++++ 4 files changed, 131 insertions(+), 1 deletion(-) create mode 100644 modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/JsonViewTest.java create mode 100644 modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/resources/JsonViewObject.java diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/converter/AnnotatedType.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/converter/AnnotatedType.java index 96e634f0fb..da0b642f0d 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/converter/AnnotatedType.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/converter/AnnotatedType.java @@ -22,6 +22,7 @@ public class AnnotatedType { private Annotation[] ctxAnnotations; private boolean resolveAsRef; private JsonView jsonViewAnnotation; + private boolean includePropertiesWithoutJSONView = true; private boolean skipSchemaName; private boolean skipJsonIdentity; private String propertyName; @@ -191,6 +192,19 @@ public AnnotatedType jsonViewAnnotation(JsonView jsonViewAnnotation) { return this; } + public boolean isIncludePropertiesWithoutJSONView() { + return includePropertiesWithoutJSONView; + } + + public void setIncludePropertiesWithoutJSONView(boolean includePropertiesWithoutJSONView) { + this.includePropertiesWithoutJSONView = includePropertiesWithoutJSONView; + } + + public AnnotatedType includePropertiesWithoutJSONView(boolean includePropertiesWithoutJSONView) { + this.includePropertiesWithoutJSONView = includePropertiesWithoutJSONView; + return this; + } + /** * @since 2.0.4 */ 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 dc1a237ca3..ac92f91684 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 @@ -2879,7 +2879,7 @@ protected boolean hiddenByJsonView(Annotation[] annotations, return false; Class[] filters = jsonView.value(); - boolean containsJsonViewAnnotation = false; + boolean containsJsonViewAnnotation = !type.isIncludePropertiesWithoutJSONView(); for (Annotation ant : annotations) { if (ant instanceof JsonView) { containsJsonViewAnnotation = true; diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/JsonViewTest.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/JsonViewTest.java new file mode 100644 index 0000000000..3a35c4dfbc --- /dev/null +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/JsonViewTest.java @@ -0,0 +1,82 @@ +package io.swagger.v3.core.resolving; + +import com.fasterxml.jackson.annotation.JsonView; +import com.fasterxml.jackson.databind.MapperFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.swagger.v3.core.converter.AnnotatedType; +import io.swagger.v3.core.converter.ModelConverterContextImpl; +import io.swagger.v3.core.jackson.ModelResolver; +import io.swagger.v3.core.resolving.resources.JsonViewObject; +import io.swagger.v3.oas.models.media.Schema; +import org.junit.Test; +import org.testng.Assert; + +import java.lang.annotation.Annotation; +import java.util.Map; + +import static io.swagger.v3.core.resolving.SwaggerTestBase.mapper; + +public class JsonViewTest { + + @Test + @JsonView(JsonViewObject.View.Protected.class) + public void includePropertiesToWhichJsonviewIsNotAnnotated() throws NoSuchMethodException { + ObjectMapper mapper = mapper(); + final ModelResolver modelResolver = new ModelResolver(mapper); + final ModelConverterContextImpl context = new ModelConverterContextImpl(modelResolver); + + Schema model = context + .resolve(new AnnotatedType(JsonViewObject.Person.class) + .jsonViewAnnotation(new JsonView() { + public Class annotationType() { + return JsonView.class; + } + public Class[] value() { + return new Class[] {JsonViewObject.View.Protected.class}; + } + }) + .ctxAnnotations( + this.getClass() + .getMethod("includePropertiesToWhichJsonviewIsNotAnnotated") + .getAnnotations())); + + Map properties = model.getProperties(); + Assert.assertEquals(properties.size(), 4); + Assert.assertNotNull(properties.get("id")); + Assert.assertNotNull(properties.get("firstName")); + Assert.assertNotNull(properties.get("lastName")); + Assert.assertNotNull(properties.get("email")); + } + + @Test + @JsonView(JsonViewObject.View.Protected.class) + public void notIncludePropertiesToWhichJsonviewIsNotAnnotated() throws NoSuchMethodException { + ObjectMapper mapper = mapper(); + mapper.disable(MapperFeature.DEFAULT_VIEW_INCLUSION); + + final ModelResolver modelResolver = new ModelResolver(mapper); + final ModelConverterContextImpl context = new ModelConverterContextImpl(modelResolver); + + Schema model = context + .resolve(new AnnotatedType(JsonViewObject.Person.class) + .jsonViewAnnotation(new JsonView() { + public Class annotationType() { + return JsonView.class; + } + public Class[] value() { + return new Class[] {JsonViewObject.View.Protected.class}; + } + }) + .includePropertiesWithoutJSONView(false) + .ctxAnnotations( + this.getClass() + .getMethod("includePropertiesToWhichJsonviewIsNotAnnotated") + .getAnnotations())); + + Map properties = model.getProperties(); + Assert.assertEquals(properties.size(), 3); + Assert.assertNotNull(properties.get("id")); + Assert.assertNotNull(properties.get("firstName")); + Assert.assertNotNull(properties.get("lastName")); + } +} diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/resources/JsonViewObject.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/resources/JsonViewObject.java new file mode 100644 index 0000000000..b64cb24082 --- /dev/null +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/resources/JsonViewObject.java @@ -0,0 +1,34 @@ +package io.swagger.v3.core.resolving.resources; + +import com.fasterxml.jackson.annotation.JsonView; + +public class JsonViewObject { + public static class View { + + public interface Public { + } + + public interface Protected { + } + + public interface Private { + } + } + + public static class Person { + + @JsonView({View.Public.class, View.Protected.class, View.Private.class}) + public String id; + + @JsonView({View.Protected.class, View.Private.class}) + public String firstName; + + @JsonView({View.Protected.class, View.Private.class}) + public String lastName; + + @JsonView(View.Private.class) + public String address; + + public String email; + } +} From d0d584dd4be18ced7ff1e71aa768be699e1a8d21 Mon Sep 17 00:00:00 2001 From: Francesco Tumanischvili Date: Tue, 25 Jul 2023 18:49:49 +0200 Subject: [PATCH 071/131] fixes #4458 - correct invocation of setSkipResolveAppPath --- .../io/swagger/v3/oas/integration/SwaggerConfiguration.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/SwaggerConfiguration.java b/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/SwaggerConfiguration.java index a0f8367971..7b05c9e7de 100644 --- a/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/SwaggerConfiguration.java +++ b/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/SwaggerConfiguration.java @@ -307,7 +307,7 @@ public void setSkipResolveAppPath(Boolean skipResolveAppPath) { * @since 2.1.15 */ public SwaggerConfiguration skipResolveAppPath(Boolean skipResolveAppPath) { - setAlwaysResolveAppPath(skipResolveAppPath); + setSkipResolveAppPath(skipResolveAppPath); return this; } From 05f9129cbe1e242c436fcb9f0d606362edf38bc1 Mon Sep 17 00:00:00 2001 From: Hugo Mercado Date: Fri, 25 Aug 2023 23:57:41 -0500 Subject: [PATCH 072/131] allow null values for extensions properties in openapi object --- .../v3/core/jackson/mixin/OpenAPIMixin.java | 2 ++ .../serialization/JsonSerializationTest.java | 16 ++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/jackson/mixin/OpenAPIMixin.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/jackson/mixin/OpenAPIMixin.java index b2296e8b39..d495abf326 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/jackson/mixin/OpenAPIMixin.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/jackson/mixin/OpenAPIMixin.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.annotation.JsonAnyGetter; import com.fasterxml.jackson.annotation.JsonAnySetter; import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import io.swagger.v3.core.jackson.PathsSerializer; import io.swagger.v3.oas.models.PathItem; @@ -12,6 +13,7 @@ public abstract class OpenAPIMixin { @JsonAnyGetter + @JsonInclude public abstract Map getExtensions(); @JsonAnySetter diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/serialization/JsonSerializationTest.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/serialization/JsonSerializationTest.java index 2cc3c5deab..29163d0cca 100644 --- a/modules/swagger-core/src/test/java/io/swagger/v3/core/serialization/JsonSerializationTest.java +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/serialization/JsonSerializationTest.java @@ -18,6 +18,9 @@ import org.testng.annotations.Test; import org.yaml.snakeyaml.LoaderOptions; +import java.util.HashMap; +import java.util.Map; + import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertFalse; @@ -55,6 +58,19 @@ public void testExtension() throws Exception { } + @Test + public void testExtensionObjectWithProperties() throws Exception { + final Map extensionObjectProps = new HashMap<>(); + extensionObjectProps.put("x-foo-bar", "foo bar"); + extensionObjectProps.put("x-bar-foo", null); + + OpenAPI swagger = new OpenAPI(); + swagger.addExtension("x-extension-with-properties", extensionObjectProps); + + String swaggerJson = Json.mapper().writeValueAsString(swagger); + assertEquals(swaggerJson, "{\"openapi\":\"3.0.1\",\"x-extension-with-properties\":{\"x-foo-bar\":\"foo bar\",\"x-bar-foo\":null}}"); + } + @Test public void testSerializeASpecWithResponseReferences() throws Exception { OpenAPI swagger = new OpenAPI() From 33b9b9524928a5d5a651d5d83008af205e088cfa Mon Sep 17 00:00:00 2001 From: frantuma Date: Sun, 17 Sep 2023 21:04:18 +0200 Subject: [PATCH 073/131] refs #3080 - support array in additionalProperties annotation member --- .../v3/oas/annotations/media/Content.java | 14 ++- .../v3/core/util/AnnotationsUtils.java | 18 +++- .../java/io/swagger/v3/jaxrs2/ReaderTest.java | 70 +++++++++++++ .../SchemaAdditionalPropertiesResource.java | 98 +++++++++++++++++++ 4 files changed, 196 insertions(+), 4 deletions(-) create mode 100644 modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/SchemaAdditionalPropertiesResource.java diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Content.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Content.java index da4032e8ee..f4532f9c4a 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Content.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/Content.java @@ -56,13 +56,23 @@ SchemaProperty[] schemaProperties() default {}; /** - * The schema properties defined for schema provided in @Schema + * The additionalProperties schema defined for schema provided in @Schema + * If the additionalProperties schema is an array, use additionalPropertiesArraySchema * * @since 2.2.0 - * @return the schema properties + * @return the additionalProperties schema */ Schema additionalPropertiesSchema() default @Schema(); + /** + * The additionalProperties array schema defined for schema provided in @Schema + * If the additionalProperties schema is not an array, use additionalPropertiesSchema + * + * @since 2.2.16 + * @return the additionalProperties array schema + */ + ArraySchema additionalPropertiesArraySchema() default @ArraySchema(); + /** * The schema of the array that defines the type used for the content. * diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java index 679a07c864..9e9af0ab83 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java @@ -489,6 +489,9 @@ public static Optional getArraySchema(io.swagger.v3.oas.annotations return Optional.empty(); } public static Optional getArraySchema(io.swagger.v3.oas.annotations.media.ArraySchema arraySchema, Components components, JsonView jsonViewAnnotation, boolean openapi31, Schema existingSchema) { + return getArraySchema(arraySchema, components, jsonViewAnnotation, openapi31, existingSchema, false); + } + public static Optional getArraySchema(io.swagger.v3.oas.annotations.media.ArraySchema arraySchema, Components components, JsonView jsonViewAnnotation, boolean openapi31, Schema existingSchema, boolean processSchemaImplementation) { if (arraySchema == null || !hasArrayAnnotation(arraySchema)) { if (existingSchema == null) { return Optional.empty(); @@ -546,7 +549,9 @@ public static Optional getArraySchema(io.swagger.v3.oas.annotations.medi if (arraySchema.schema() != null) { if (arraySchema.schema().implementation().equals(Void.class)) { getSchemaFromAnnotation(arraySchema.schema(), components, jsonViewAnnotation, openapi31).ifPresent(arraySchemaObject::setItems); - } // if present, schema implementation handled upstream + } else if (processSchemaImplementation) { + getSchema(arraySchema.schema(), arraySchema, false, arraySchema.schema().implementation(), components, jsonViewAnnotation, openapi31).ifPresent(arraySchemaObject::setItems); + } } return Optional.of(arraySchemaObject); @@ -1500,7 +1505,15 @@ public static Optional getContent(io.swagger.v3.oas.annotations.media.C } } - if ( + Optional arraySchemaResult = getArraySchema(annotationContent.additionalPropertiesArraySchema(), components, jsonViewAnnotation, openapi31, null, true); + if (arraySchemaResult.isPresent()) { + if ("array".equals(mediaType.getSchema().getType())) { + mediaType.getSchema().getItems().additionalProperties(arraySchemaResult.get()); + } else { + mediaType.getSchema().additionalProperties(arraySchemaResult.get()); + } + } else { + if ( hasSchemaAnnotation(annotationContent.additionalPropertiesSchema()) && mediaType.getSchema() != null && !Boolean.TRUE.equals(mediaType.getSchema().getAdditionalProperties()) && @@ -1514,6 +1527,7 @@ public static Optional getContent(io.swagger.v3.oas.annotations.media.C } } ); + } } } else { mediaType.setSchema(schema); diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java index 7cd24d81c6..e136021158 100644 --- a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java @@ -18,6 +18,7 @@ import io.swagger.v3.jaxrs2.resources.Misc31Resource; import io.swagger.v3.jaxrs2.resources.ParameterMaximumValueResource; import io.swagger.v3.jaxrs2.resources.ResponseReturnTypeResource; +import io.swagger.v3.jaxrs2.resources.SchemaAdditionalPropertiesResource; import io.swagger.v3.jaxrs2.resources.SchemaPropertiesResource; import io.swagger.v3.jaxrs2.resources.SiblingPropResource; import io.swagger.v3.jaxrs2.resources.SiblingsResource; @@ -3011,6 +3012,75 @@ public void testSchemaProperties() { SerializationMatchers.assertEqualsToYaml(openAPI, yaml); } + @Test(description = "Test Schema AdditionalProperties annotations") + public void testSchemaAdditionalProperties() { + Reader reader = new Reader(new OpenAPI()); + + OpenAPI openAPI = reader.read(SchemaAdditionalPropertiesResource.class); + String yaml = "openapi: 3.0.1\n" + + "paths:\n" + + " /arraySchemaImpl:\n" + + " get:\n" + + " operationId: arraySchemaImpl\n" + + " responses:\n" + + " \"200\":\n" + + " description: voila!\n" + + " content:\n" + + " application/json:\n" + + " schema:\n" + + " type: object\n" + + " additionalProperties:\n" + + " type: array\n" + + " items:\n" + + " $ref: '#/components/schemas/Pet'\n" + + " /fromtResponseType:\n" + + " get:\n" + + " operationId: fromtResponseType\n" + + " responses:\n" + + " default:\n" + + " description: default response\n" + + " content:\n" + + " '*/*':\n" + + " schema:\n" + + " type: object\n" + + " additionalProperties:\n" + + " type: array\n" + + " items:\n" + + " $ref: '#/components/schemas/Pet'\n" + + " /schemaImpl:\n" + + " get:\n" + + " operationId: schemaImpl\n" + + " responses:\n" + + " \"200\":\n" + + " description: voila!\n" + + " content:\n" + + " application/json:\n" + + " schema:\n" + + " type: object\n" + + " additionalProperties:\n" + + " $ref: '#/components/schemas/Pet'\n" + + " /schemaNotImpl:\n" + + " get:\n" + + " operationId: schemaNotImpl\n" + + " responses:\n" + + " \"200\":\n" + + " description: voila!\n" + + " content:\n" + + " application/json:\n" + + " schema:\n" + + " type: object\n" + + " additionalProperties:\n" + + " $ref: '#/components/schemas/Pet'\n" + + "components:\n" + + " schemas:\n" + + " Pet:\n" + + " type: object\n" + + " properties:\n" + + " foo:\n" + + " type: string\n"; + SerializationMatchers.assertEqualsToYaml(openAPI, yaml); + } + @Test(description = "Responses schema resolved from return type") public void testResponseReturnType() { Reader reader = new Reader(new OpenAPI()); diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/SchemaAdditionalPropertiesResource.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/SchemaAdditionalPropertiesResource.java new file mode 100644 index 0000000000..a2c22b53b8 --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/SchemaAdditionalPropertiesResource.java @@ -0,0 +1,98 @@ +package io.swagger.v3.jaxrs2.resources; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.core.Response; +import java.util.List; +import java.util.Map; + +public class SchemaAdditionalPropertiesResource { + + static class Pet { + public String foo; + } + @GET + @Path("/fromtResponseType") + public Map> fromtResponseType() { + return null; + } + + @GET + @Path("/schemaNotImpl") + @Operation( + operationId = "schemaNotImpl", + responses = { + @ApiResponse( + responseCode = "200", + description = "voila!", + content = @Content( + mediaType = "application/json", + schema = @Schema( + type = "object" + ), + additionalPropertiesSchema = @Schema( + ref = "#/components/schemas/Pet" + ) + ) + ) + } + ) + public Response schemaNotImpl() { + return null; + } + + @GET + @Path("/schemaImpl") + @Operation( + operationId = "schemaImpl", + responses = { + @ApiResponse( + responseCode = "200", + description = "voila!", + content = @Content( + mediaType = "application/json", + schema = @Schema( + type = "object", + additionalPropertiesSchema = Pet.class + ) + ) + ) + } + ) + public Response schemaImpl() { + return null; + } + + @GET + @Path("/arraySchemaImpl") + @Operation( + operationId = "arraySchemaImpl", + responses = { + @ApiResponse( + responseCode = "200", + description = "voila!", + content = @Content( + mediaType = "application/json", + additionalPropertiesArraySchema = @ArraySchema( + schema = @Schema( + implementation = Pet.class + ) + ), + schema = @Schema( + type = "object" + ) + ) + ) + } + ) + public Response arraySchemaImpl() { + return null; + } + +} From bfe48182d37be31baa005b39a2d4cb1633125bd8 Mon Sep 17 00:00:00 2001 From: frantuma Date: Mon, 18 Sep 2023 08:11:40 +0200 Subject: [PATCH 074/131] fix python setup in release GH Action --- .github/workflows/prepare-release.yml | 4 ++-- .github/workflows/release.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index dfcc128ab8..c5d4bf0d56 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -16,10 +16,10 @@ jobs: with: app_id: ${{ secrets.APP_ID }} private_key: ${{ secrets.APP_PRIVATE_KEY }} - - name: Set up Python 2.7 + - name: Set up Python 2.7.18 uses: MatteoH2O1999/setup-python@v1 with: - python-version: 2.7 + python-version: 2.7.18 - name: Set up Java 11 uses: actions/setup-java@v1 with: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 491265c2a9..e58f629faf 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -16,10 +16,10 @@ jobs: with: app_id: ${{ secrets.APP_ID }} private_key: ${{ secrets.APP_PRIVATE_KEY }} - - name: Set up Python 2.7 + - name: Set up Python 2.7.18 uses: MatteoH2O1999/setup-python@v1 with: - python-version: 2.7 + python-version: 2.7.18 - name: Set up Java 11 uses: actions/setup-java@v1 with: From 7529fc5c09ed39e20422c78b7ac8467667faa4bf Mon Sep 17 00:00:00 2001 From: frantuma Date: Mon, 18 Sep 2023 08:31:12 +0200 Subject: [PATCH 075/131] downgrae GH release actions runs-on --- .github/workflows/prepare-release.yml | 2 +- .github/workflows/release.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index c5d4bf0d56..30847642cd 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -7,7 +7,7 @@ on: jobs: build: - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e58f629faf..3c0c6baf43 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -7,7 +7,7 @@ on: jobs: build: - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 From 444b34373edae0d4315cb0cf4c54017339c20680 Mon Sep 17 00:00:00 2001 From: frantuma Date: Mon, 18 Sep 2023 06:57:33 +0000 Subject: [PATCH 076/131] prepare release 2.2.16 --- README.md | 5 +++-- modules/swagger-annotations/pom.xml | 2 +- modules/swagger-core/pom.xml | 2 +- .../swagger-eclipse-transformer-maven-plugin/pom.xml | 2 +- modules/swagger-gradle-plugin/README.md | 4 ++-- modules/swagger-gradle-plugin/gradle.properties | 2 +- .../io/swagger/v3/plugins/gradle/SwaggerPlugin.java | 2 +- .../v3/plugins/gradle/SwaggerResolveTest.java | 4 ++-- modules/swagger-integration/pom.xml | 2 +- .../swagger-jaxrs2-servlet-initializer-v2/pom.xml | 2 +- modules/swagger-jaxrs2-servlet-initializer/pom.xml | 2 +- modules/swagger-jaxrs2/pom.xml | 2 +- modules/swagger-maven-plugin/README.md | 12 ++++++------ modules/swagger-maven-plugin/pom.xml | 2 +- modules/swagger-models/pom.xml | 2 +- .../modules/swagger-annotations-jakarta/pom.xml | 2 +- .../modules/swagger-core-jakarta/pom.xml | 2 +- .../modules/swagger-integration-jakarta/pom.xml | 2 +- .../modules/swagger-jaxrs2-jakarta/pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../modules/swagger-maven-plugin-jakarta/pom.xml | 2 +- .../modules/swagger-models-jakarta/pom.xml | 2 +- modules/swagger-project-jakarta/pom.xml | 2 +- pom.xml | 2 +- 25 files changed, 34 insertions(+), 33 deletions(-) diff --git a/README.md b/README.md index 4e94ad488f..e2c6c592e4 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,8 @@ The OpenAPI Specification has undergone several revisions since initial creation Swagger core Version | Release Date | OpenAPI Spec compatibility | Notes | Status ------------------------- | ------------ | -------------------------- | ----- | ---- -2.2.15 (**current stable**)| 2023-07-08 | 3.x | [tag v2.2.15](https://github.com/swagger-api/swagger-core/tree/v2.2.15) | Supported +2.2.16 (**current stable**)| 2023-09-18 | 3.x | [tag v2.2.16](https://github.com/swagger-api/swagger-core/tree/v2.2.16) | Supported +2.2.15 | 2023-07-08 | 3.x | [tag v2.2.15](https://github.com/swagger-api/swagger-core/tree/v2.2.15) | Supported 2.2.14 | 2023-06-26 | 3.x | [tag v2.2.14](https://github.com/swagger-api/swagger-core/tree/v2.2.14) | Supported 2.2.13 | 2023-06-24 | 3.x | [tag v2.2.13](https://github.com/swagger-api/swagger-core/tree/v2.2.13) | Supported 2.2.12 | 2023-06-13 | 3.x | [tag v2.2.12](https://github.com/swagger-api/swagger-core/tree/v2.2.12) | Supported @@ -101,7 +102,7 @@ You need the following installed and available in your $PATH: * Jackson 2.4.5 or greater -### To build from source (currently 2.2.16-SNAPSHOT) +### To build from source (currently 2.2.17-SNAPSHOT) ``` # first time building locally mvn -N diff --git a/modules/swagger-annotations/pom.xml b/modules/swagger-annotations/pom.xml index 570e217f5c..2ce950877a 100644 --- a/modules/swagger-annotations/pom.xml +++ b/modules/swagger-annotations/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.16-SNAPSHOT + 2.2.16 ../.. 4.0.0 diff --git a/modules/swagger-core/pom.xml b/modules/swagger-core/pom.xml index 9d8b680625..33098c5d46 100644 --- a/modules/swagger-core/pom.xml +++ b/modules/swagger-core/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.16-SNAPSHOT + 2.2.16 ../.. 4.0.0 diff --git a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml index 63f55588c4..d47ab01c3c 100644 --- a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml +++ b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.16-SNAPSHOT + 2.2.16 ../.. 4.0.0 diff --git a/modules/swagger-gradle-plugin/README.md b/modules/swagger-gradle-plugin/README.md index 4b36348077..9e2615cc17 100644 --- a/modules/swagger-gradle-plugin/README.md +++ b/modules/swagger-gradle-plugin/README.md @@ -26,7 +26,7 @@ Alternatively provide as value a classpath with the following dependencies (repl ``` plugins { - id "io.swagger.core.v3.swagger-gradle-plugin" version "2.2.15" + id "io.swagger.core.v3.swagger-gradle-plugin" version "2.2.16" } ``` ### Gradle 1.x and 2.0 @@ -43,7 +43,7 @@ buildscript { } } dependencies { - classpath "io.swagger.core.v3:swagger-gradle-plugin:2.2.15" + classpath "io.swagger.core.v3:swagger-gradle-plugin:2.2.16" } } diff --git a/modules/swagger-gradle-plugin/gradle.properties b/modules/swagger-gradle-plugin/gradle.properties index 46efcb154e..578737696e 100644 --- a/modules/swagger-gradle-plugin/gradle.properties +++ b/modules/swagger-gradle-plugin/gradle.properties @@ -1,2 +1,2 @@ -version=2.2.16-SNAPSHOT +version=2.2.16 jettyVersion=9.4.49.v20220914 diff --git a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java index 19060acaf3..73cbbb2cf4 100644 --- a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java +++ b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java @@ -16,7 +16,7 @@ public void apply(Project project) { config.defaultDependencies(new Action() { public void execute(DependencySet dependencies) { dependencies.add(project.getDependencies().create("org.apache.commons:commons-lang3:3.12.0")); - dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.16-SNAPSHOT")); + dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.16")); dependencies.add(project.getDependencies().create("javax.ws.rs:javax.ws.rs-api:2.1")); dependencies.add(project.getDependencies().create("javax.servlet:javax.servlet-api:3.1.0")); } diff --git a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java index c19697bab2..6a4740f3ec 100644 --- a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java +++ b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java @@ -81,7 +81,7 @@ public void testSwaggerResolveTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.16-SNAPSHOT'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.16'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + @@ -154,7 +154,7 @@ public void testSwaggerResolveWithOAS31OptionTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.16-SNAPSHOT'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.16'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + diff --git a/modules/swagger-integration/pom.xml b/modules/swagger-integration/pom.xml index b763c5bdf5..f5a0376e93 100644 --- a/modules/swagger-integration/pom.xml +++ b/modules/swagger-integration/pom.xml @@ -6,7 +6,7 @@ io.swagger.core.v3 swagger-project - 2.2.16-SNAPSHOT + 2.2.16 ../.. swagger-integration diff --git a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml index 28cd232949..0b3646f12d 100644 --- a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.16-SNAPSHOT + 2.2.16 ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2-servlet-initializer/pom.xml b/modules/swagger-jaxrs2-servlet-initializer/pom.xml index 6656708a3b..8eae70859e 100644 --- a/modules/swagger-jaxrs2-servlet-initializer/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.16-SNAPSHOT + 2.2.16 ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2/pom.xml b/modules/swagger-jaxrs2/pom.xml index 789f5fb2ee..d26bde69a7 100644 --- a/modules/swagger-jaxrs2/pom.xml +++ b/modules/swagger-jaxrs2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.16-SNAPSHOT + 2.2.16 ../../ 4.0.0 diff --git a/modules/swagger-maven-plugin/README.md b/modules/swagger-maven-plugin/README.md index ce7fd2d1b5..140fee753d 100644 --- a/modules/swagger-maven-plugin/README.md +++ b/modules/swagger-maven-plugin/README.md @@ -22,7 +22,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin - 2.2.15 + 2.2.16 openapi ${project.build.directory}/generatedtest @@ -47,7 +47,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-jaxrs2 - 2.2.15 + 2.2.16 @@ -73,7 +73,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin-jakarta - 2.2.15 + 2.2.16 openapi ${project.build.directory}/generatedtest @@ -98,7 +98,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-jaxrs2-jakarta - 2.2.15 + 2.2.16 @@ -126,7 +126,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin - 2.2.15 + 2.2.16 openapi ${project.build.directory}/generatedtest @@ -155,7 +155,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin-jakarta - 2.2.15 + 2.2.16 openapi ${project.build.directory}/generatedtest diff --git a/modules/swagger-maven-plugin/pom.xml b/modules/swagger-maven-plugin/pom.xml index ddbe92576c..423c91400b 100644 --- a/modules/swagger-maven-plugin/pom.xml +++ b/modules/swagger-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.16-SNAPSHOT + 2.2.16 ../.. 4.0.0 diff --git a/modules/swagger-models/pom.xml b/modules/swagger-models/pom.xml index a22eedb54f..b36673dd78 100644 --- a/modules/swagger-models/pom.xml +++ b/modules/swagger-models/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.16-SNAPSHOT + 2.2.16 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml index 2a54c8dcd3..49b9b33ed4 100644 --- a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.16-SNAPSHOT + 2.2.16 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml index ceb15def7b..141e71229f 100644 --- a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.16-SNAPSHOT + 2.2.16 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml index be3e8b8de0..035f545e3c 100644 --- a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.16-SNAPSHOT + 2.2.16 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml index 01798fb9dd..7e947b20ee 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.16-SNAPSHOT + 2.2.16 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml index 726c3be173..e85194663a 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.16-SNAPSHOT + 2.2.16 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml index 4a52ee4d8d..2d0c3c05dd 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.16-SNAPSHOT + 2.2.16 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml index b511c86b3a..e41e6d07b5 100644 --- a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.16-SNAPSHOT + 2.2.16 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml index bd04d06493..e46fffb3d9 100644 --- a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.16-SNAPSHOT + 2.2.16 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/pom.xml b/modules/swagger-project-jakarta/pom.xml index 1b7b9bf16b..796c3f2341 100644 --- a/modules/swagger-project-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/pom.xml @@ -6,7 +6,7 @@ pom swagger-project-jakarta swagger-project-jakarta - 2.2.16-SNAPSHOT + 2.2.16 https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git diff --git a/pom.xml b/pom.xml index bb62f40021..fdd0f876f5 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ pom swagger-project swagger-project - 2.2.16-SNAPSHOT + 2.2.16 https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git From f8c7eb04d829ba544188b14e95b51be32f25712a Mon Sep 17 00:00:00 2001 From: frantuma Date: Mon, 18 Sep 2023 07:19:43 +0000 Subject: [PATCH 077/131] bump snapshot 2.2.17-SNAPSHOT --- modules/swagger-annotations/pom.xml | 2 +- modules/swagger-core/pom.xml | 2 +- modules/swagger-eclipse-transformer-maven-plugin/pom.xml | 2 +- modules/swagger-gradle-plugin/gradle.properties | 2 +- .../main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java | 2 +- .../java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java | 4 ++-- modules/swagger-integration/pom.xml | 2 +- modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml | 2 +- modules/swagger-jaxrs2-servlet-initializer/pom.xml | 2 +- modules/swagger-jaxrs2/pom.xml | 2 +- modules/swagger-maven-plugin/pom.xml | 2 +- modules/swagger-models/pom.xml | 2 +- .../modules/swagger-annotations-jakarta/pom.xml | 2 +- .../modules/swagger-core-jakarta/pom.xml | 2 +- .../modules/swagger-integration-jakarta/pom.xml | 2 +- .../modules/swagger-jaxrs2-jakarta/pom.xml | 2 +- .../swagger-jaxrs2-servlet-initializer-jakarta/pom.xml | 2 +- .../swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml | 2 +- .../modules/swagger-maven-plugin-jakarta/pom.xml | 2 +- .../modules/swagger-models-jakarta/pom.xml | 2 +- modules/swagger-project-jakarta/pom.xml | 2 +- pom.xml | 2 +- 22 files changed, 23 insertions(+), 23 deletions(-) diff --git a/modules/swagger-annotations/pom.xml b/modules/swagger-annotations/pom.xml index 2ce950877a..43188b103f 100644 --- a/modules/swagger-annotations/pom.xml +++ b/modules/swagger-annotations/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.16 + 2.2.17-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-core/pom.xml b/modules/swagger-core/pom.xml index 33098c5d46..f0a9a46f71 100644 --- a/modules/swagger-core/pom.xml +++ b/modules/swagger-core/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.16 + 2.2.17-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml index d47ab01c3c..dc7838b1a7 100644 --- a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml +++ b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.16 + 2.2.17-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-gradle-plugin/gradle.properties b/modules/swagger-gradle-plugin/gradle.properties index 578737696e..af151a2b95 100644 --- a/modules/swagger-gradle-plugin/gradle.properties +++ b/modules/swagger-gradle-plugin/gradle.properties @@ -1,2 +1,2 @@ -version=2.2.16 +version=2.2.17-SNAPSHOT jettyVersion=9.4.49.v20220914 diff --git a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java index 73cbbb2cf4..ba229e2854 100644 --- a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java +++ b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java @@ -16,7 +16,7 @@ public void apply(Project project) { config.defaultDependencies(new Action() { public void execute(DependencySet dependencies) { dependencies.add(project.getDependencies().create("org.apache.commons:commons-lang3:3.12.0")); - dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.16")); + dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.17-SNAPSHOT")); dependencies.add(project.getDependencies().create("javax.ws.rs:javax.ws.rs-api:2.1")); dependencies.add(project.getDependencies().create("javax.servlet:javax.servlet-api:3.1.0")); } diff --git a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java index 6a4740f3ec..8521fafdf3 100644 --- a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java +++ b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java @@ -81,7 +81,7 @@ public void testSwaggerResolveTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.16'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.17-SNAPSHOT'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + @@ -154,7 +154,7 @@ public void testSwaggerResolveWithOAS31OptionTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.16'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.17-SNAPSHOT'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + diff --git a/modules/swagger-integration/pom.xml b/modules/swagger-integration/pom.xml index f5a0376e93..4b67080e0b 100644 --- a/modules/swagger-integration/pom.xml +++ b/modules/swagger-integration/pom.xml @@ -6,7 +6,7 @@ io.swagger.core.v3 swagger-project - 2.2.16 + 2.2.17-SNAPSHOT ../.. swagger-integration diff --git a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml index 0b3646f12d..c15939ecd7 100644 --- a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.16 + 2.2.17-SNAPSHOT ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2-servlet-initializer/pom.xml b/modules/swagger-jaxrs2-servlet-initializer/pom.xml index 8eae70859e..343c0b7ec2 100644 --- a/modules/swagger-jaxrs2-servlet-initializer/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.16 + 2.2.17-SNAPSHOT ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2/pom.xml b/modules/swagger-jaxrs2/pom.xml index d26bde69a7..d17c631684 100644 --- a/modules/swagger-jaxrs2/pom.xml +++ b/modules/swagger-jaxrs2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.16 + 2.2.17-SNAPSHOT ../../ 4.0.0 diff --git a/modules/swagger-maven-plugin/pom.xml b/modules/swagger-maven-plugin/pom.xml index 423c91400b..e2ac28fef0 100644 --- a/modules/swagger-maven-plugin/pom.xml +++ b/modules/swagger-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.16 + 2.2.17-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-models/pom.xml b/modules/swagger-models/pom.xml index b36673dd78..9d71c403f4 100644 --- a/modules/swagger-models/pom.xml +++ b/modules/swagger-models/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.16 + 2.2.17-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml index 49b9b33ed4..c88423cc2f 100644 --- a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.16 + 2.2.17-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml index 141e71229f..6cd0584989 100644 --- a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.16 + 2.2.17-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml index 035f545e3c..0f727e12c4 100644 --- a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.16 + 2.2.17-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml index 7e947b20ee..99b0b4f7f7 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.16 + 2.2.17-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml index e85194663a..0da1acd3f8 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.16 + 2.2.17-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml index 2d0c3c05dd..62f37b4246 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.16 + 2.2.17-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml index e41e6d07b5..fcfec6b821 100644 --- a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.16 + 2.2.17-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml index e46fffb3d9..15b041a848 100644 --- a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.16 + 2.2.17-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/pom.xml b/modules/swagger-project-jakarta/pom.xml index 796c3f2341..7e605ed94f 100644 --- a/modules/swagger-project-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/pom.xml @@ -6,7 +6,7 @@ pom swagger-project-jakarta swagger-project-jakarta - 2.2.16 + 2.2.17-SNAPSHOT https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git diff --git a/pom.xml b/pom.xml index fdd0f876f5..4283bd729a 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ pom swagger-project swagger-project - 2.2.16 + 2.2.17-SNAPSHOT https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git From 90488439dc62073f83811c1a42b0612f36563d96 Mon Sep 17 00:00:00 2001 From: Gustavo Bazan Date: Mon, 18 Sep 2023 15:47:51 +0100 Subject: [PATCH 078/131] fix: compare string using equals instead of == --- .../java/io/swagger/v3/jaxrs2/Reader.java | 55 +++++++++---------- 1 file changed, 27 insertions(+), 28 deletions(-) diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java index be60e5f8af..fb683de4ea 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java @@ -165,7 +165,7 @@ public OpenAPI read(Set> classes) { for (Class cls : sortedClasses) { if (ReaderListener.class.isAssignableFrom(cls) && !listeners.containsKey(cls)) { try { - listeners.put(cls, (ReaderListener) cls.newInstance()); + listeners.put(cls, (ReaderListener) cls.getDeclaredConstructor().newInstance()); } catch (Exception e) { LOGGER.error("Failed to create ReaderListener", e); } @@ -259,8 +259,6 @@ protected String resolveApplicationPath() { } m = innerApp.getClass().getMethod("getApplication"); } - } catch (NoSuchMethodException e) { - // no inner application found } catch (Exception e) { // no inner application found } @@ -348,7 +346,7 @@ public OpenAPI read(Class cls, Map securitySchemeMap = new HashMap<>(); if (StringUtils.isNotBlank(securityScheme.get().key)) { securitySchemeMap.put(securityScheme.get().key, securityScheme.get().securityScheme); - if (components.getSecuritySchemes() != null && components.getSecuritySchemes().size() != 0) { + if (components.getSecuritySchemes() != null && !components.getSecuritySchemes().isEmpty()) { components.getSecuritySchemes().putAll(securitySchemeMap); } else { components.setSecuritySchemes(securitySchemeMap); @@ -584,7 +582,7 @@ public OpenAPI read(Class cls, } // if we have form parameters, need to merge them into single schema and use as request body.. if (!formParameters.isEmpty()) { - Schema mergedSchema = new ObjectSchema(); + Schema mergedSchema = new ObjectSchema(); Map encoding = new LinkedHashMap<>(); for (Parameter formParam: formParameters) { if (formParam.getExplode() != null || (formParam.getStyle() != null) && Encoding.StyleEnum.fromString(formParam.getStyle().toString()) != null) { @@ -597,7 +595,7 @@ public OpenAPI read(Class cls, } encoding.put(formParam.getName(), e); } - mergedSchema.addProperties(formParam.getName(), formParam.getSchema()); + mergedSchema.addProperty(formParam.getName(), formParam.getSchema()); if (formParam.getSchema() != null && StringUtils.isNotBlank(formParam.getDescription()) && StringUtils.isBlank(formParam.getSchema().getDescription())) { @@ -730,10 +728,10 @@ protected void applyPathParamsPatterns(Operation operation, Map .filter(p -> p.getSchema() != null) .filter(p -> StringUtils.isBlank(p.getSchema().getPattern())) .filter(p -> !Parameter.StyleEnum.MATRIX.equals(p.getStyle())) - .filter(p -> "string" == p.getSchema().getType() || (p.getSchema().getTypes() != null && p.getSchema().getTypes().contains("string"))) + .filter(p -> "string".equals(p.getSchema().getType()) || (p.getSchema().getTypes() != null && p.getSchema().getTypes().contains("string"))) .forEach(p -> p.getSchema().setPattern(patternsMap.get(p.getName()))); } - protected Content processContent(Content content, Schema schema, Consumes methodConsumes, Consumes classConsumes) { + protected Content processContent(Content content, Schema schema, Consumes methodConsumes, Consumes classConsumes) { if (content == null) { content = new Content(); } @@ -785,7 +783,7 @@ protected void processRequestBody(Parameter requestBodyParameter, Operation oper } else if (mediaType.getSchema() != null && requestBodyAnnotation.useParameterTypeSchema()) { if (requestBodyParameter.getSchema() != null) { MediaType newMediaType = clone(mediaType); - Schema parameterSchema = clone(requestBodyParameter.getSchema()); + Schema parameterSchema = clone(requestBodyParameter.getSchema()); Optional content = Arrays.stream(requestBodyAnnotation.content()).filter(c -> c.mediaType().equals(key)).findFirst(); if (content.isPresent()) { Optional reResolvedSchema = AnnotationsUtils.getSchemaFromAnnotation(content.get().schema(), components, null, config.isOpenAPI31(), parameterSchema); @@ -863,7 +861,7 @@ private io.swagger.v3.oas.annotations.parameters.RequestBody getRequestBody(List return null; } - private void setMediaTypeToContent(Schema schema, Content content, String value) { + private void setMediaTypeToContent(Schema schema, Content content, String value) { MediaType mediaTypeObject = new MediaType(); mediaTypeObject.setSchema(schema); content.addMediaType(value, mediaTypeObject); @@ -1016,7 +1014,7 @@ protected Operation parseMethod( callbacks.putAll(currentCallbacks); } } - if (callbacks.size() > 0) { + if (!callbacks.isEmpty()) { operation.setCallbacks(callbacks); } @@ -1202,7 +1200,8 @@ protected Operation parseMethod( if (apiResponses != null) { resolveResponseSchemaFromReturnType( operation, - apiResponses.stream().toArray(io.swagger.v3.oas.annotations.responses.ApiResponse[]::new), + apiResponses.toArray( + new io.swagger.v3.oas.annotations.responses.ApiResponse[0]), returnTypeSchema, classProduces, methodProduces); @@ -1250,14 +1249,14 @@ private MediaType clone(MediaType mediaType) { } return mediaType; } - private Schema clone(Schema schema) { + private Schema clone(Schema schema) { return AnnotationsUtils.clone(schema, config.isOpenAPI31()); } protected void resolveResponseSchemaFromReturnType( Operation operation, io.swagger.v3.oas.annotations.responses.ApiResponse[] responses, - Schema schema, + Schema schema, Produces classProduces, Produces methodProduces) { if (responses != null) { for (io.swagger.v3.oas.annotations.responses.ApiResponse response: responses) { @@ -1268,7 +1267,7 @@ protected void resolveResponseSchemaFromReturnType( if (opResponse.getContent() != null) { for (String key : opResponse.getContent().keySet()) { MediaType mediaType = clone(opResponse.getContent().get(key)); - Schema existingSchema = clone(schema); + Schema existingSchema = clone(schema); Optional content = Arrays.stream(response.content()).filter(c -> c.mediaType().equals(key)).findFirst(); if (content.isPresent()) { Optional reResolvedSchema = AnnotationsUtils.getSchemaFromAnnotation(content.get().schema(), components, null, config.isOpenAPI31(), existingSchema); @@ -1550,37 +1549,37 @@ private boolean isEmptyComponents(Components components) { if (components == null) { return true; } - if (components.getSchemas() != null && components.getSchemas().size() > 0) { + if (components.getSchemas() != null && !components.getSchemas().isEmpty()) { return false; } - if (components.getSecuritySchemes() != null && components.getSecuritySchemes().size() > 0) { + if (components.getSecuritySchemes() != null && !components.getSecuritySchemes().isEmpty()) { return false; } - if (components.getCallbacks() != null && components.getCallbacks().size() > 0) { + if (components.getCallbacks() != null && !components.getCallbacks().isEmpty()) { return false; } - if (components.getExamples() != null && components.getExamples().size() > 0) { + if (components.getExamples() != null && !components.getExamples().isEmpty()) { return false; } - if (components.getExtensions() != null && components.getExtensions().size() > 0) { + if (components.getExtensions() != null && !components.getExtensions().isEmpty()) { return false; } - if (components.getHeaders() != null && components.getHeaders().size() > 0) { + if (components.getHeaders() != null && !components.getHeaders().isEmpty()) { return false; } - if (components.getLinks() != null && components.getLinks().size() > 0) { + if (components.getLinks() != null && !components.getLinks().isEmpty()) { return false; } - if (components.getParameters() != null && components.getParameters().size() > 0) { + if (components.getParameters() != null && !components.getParameters().isEmpty()) { return false; } - if (components.getRequestBodies() != null && components.getRequestBodies().size() > 0) { + if (components.getRequestBodies() != null && !components.getRequestBodies().isEmpty()) { return false; } - if (components.getResponses() != null && components.getResponses().size() > 0) { + if (components.getResponses() != null && !components.getResponses().isEmpty()) { return false; } - if (components.getPathItems() != null && components.getPathItems().size() > 0) { + if (components.getPathItems() != null && !components.getPathItems().isEmpty()) { return false; } @@ -1627,7 +1626,7 @@ protected boolean ignoreOperationPathStrict(String path, String parentPath) { } else if (StringUtils.isBlank(path) && StringUtils.isNotBlank(parentPath)) { return false; } - if (parentPath != null && !"".equals(parentPath) && !"/".equals(parentPath)) { + if (parentPath != null && !parentPath.isEmpty() && !"/".equals(parentPath)) { if (!parentPath.startsWith("/")) { parentPath = "/" + parentPath; } @@ -1635,7 +1634,7 @@ protected boolean ignoreOperationPathStrict(String path, String parentPath) { parentPath = parentPath.substring(0, parentPath.length() - 1); } } - if (path != null && !"".equals(path) && !"/".equals(path)) { + if (path != null && !path.isEmpty() && !"/".equals(path)) { if (!path.startsWith("/")) { path = "/" + path; } From fab5000141536a5a6e9e068211fde1ec1603492b Mon Sep 17 00:00:00 2001 From: frantuma Date: Tue, 26 Sep 2023 17:11:43 +0200 Subject: [PATCH 079/131] refs #4455 - add config properties for default response status code --- modules/swagger-gradle-plugin/README.md | 3 +- .../v3/plugins/gradle/tasks/ResolveTask.java | 23 +++++++++++++++ .../integration/GenericOpenApiContext.java | 3 ++ .../oas/integration/SwaggerConfiguration.java | 16 ++++++++++ .../integration/api/OpenAPIConfiguration.java | 5 ++++ .../io/swagger/v3/jaxrs2/OperationParser.java | 6 ++-- .../java/io/swagger/v3/jaxrs2/Reader.java | 29 ++++++++++++------- .../ServletConfigContextUtils.java | 5 ++++ .../ServletOpenApiConfigurationLoader.java | 5 ++++ .../v3/jaxrs2/integration/SwaggerLoader.java | 16 ++++++++++ .../java/io/swagger/v3/jaxrs2/ReaderTest.java | 22 ++++++++++++++ .../resources/DefaultResponseResource.java | 14 +++++++++ modules/swagger-maven-plugin/README.md | 2 ++ .../swagger/v3/plugin/maven/SwaggerMojo.java | 8 +++++ .../v3/oas/models/responses/ApiResponses.java | 4 ++- 15 files changed, 145 insertions(+), 16 deletions(-) create mode 100644 modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/DefaultResponseResource.java diff --git a/modules/swagger-gradle-plugin/README.md b/modules/swagger-gradle-plugin/README.md index 9e2615cc17..b6f4338298 100644 --- a/modules/swagger-gradle-plugin/README.md +++ b/modules/swagger-gradle-plugin/README.md @@ -96,7 +96,7 @@ Parameter | Description | Required | Default `modelConverterClasses`|see [configuration property](https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Integration-and-Configuration#configuration-properties)|false| `contextId`|see [Context](https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Integration-and-Configuration#context)|false| `outputPath`|**DEPRECATED** output path where file(s) are saved|false| - +`defaultResponseCode`|see [configuration property](https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Integration-and-Configuration#configuration-properties)|false| **Note** parameter `openApiFile` corresponds to [config](https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Integration-and-Configuration#configuration-properties) openAPI. It points to a location of a file in YAML or JSON format representing the input spec that will be merged with the resolved spec. Typically used to add Info section, or any other meta data. An example of such file: @@ -122,3 +122,4 @@ Since version 2.1.6, `sortOutput` parameter is available, allowing to sort objec Since version 2.1.6, `objectMapperProcessorClass` allows to configure also the ObjectMapper instance used to serialize the resolved OpenAPI Since version 2.1.9, `alwaysResolveAppPath` parameter is available, allowing to trigger resolving of Application Path from annotation also not in runtime (e.g. using servlet in separate application, or in maven plugin at build time, etc) Since version 2.1.15, `skipResolveAppPath` parameter is available, allowing to skip resolving of Application Path from annotation +Since version 2.2.17, `defaultResponseCode` parameter is available, allowing to set the code used when resolving responses with no http status code annotation \ No newline at end of file diff --git a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/tasks/ResolveTask.java b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/tasks/ResolveTask.java index 7200a8b31e..87fcdc415f 100644 --- a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/tasks/ResolveTask.java +++ b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/tasks/ResolveTask.java @@ -77,6 +77,8 @@ public enum Format {JSON, YAML, JSONANDYAML}; private Boolean convertToOpenAPI31 = false; + private String defaultResponseCode; + @Input @Optional public String getOutputFileName() { @@ -227,6 +229,22 @@ public void setObjectMapperProcessorClass(String objectMapperProcessorClass) { this.objectMapperProcessorClass = objectMapperProcessorClass; } + /** + * @since 2.2.17 + */ + @Input + @Optional + public String getDefaultResponseCode() { + return defaultResponseCode; + } + + /** + * @since 2.2.17 + */ + public void setDefaultResponseCode(String defaultResponseCode) { + this.defaultResponseCode = defaultResponseCode; + } + /** * @since 2.0.6 */ @@ -461,6 +479,11 @@ public void resolve() throws GradleException { method.invoke(swaggerLoader, objectMapperProcessorClass); } + if (StringUtils.isNotBlank(defaultResponseCode)) { + method=swaggerLoaderClass.getDeclaredMethod("setDefaultResponseCode",String.class); + method.invoke(swaggerLoader, defaultResponseCode); + } + method=swaggerLoaderClass.getDeclaredMethod("setPrettyPrint", Boolean.class); method.invoke(swaggerLoader, prettyPrint); diff --git a/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/GenericOpenApiContext.java b/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/GenericOpenApiContext.java index 4a56148e1e..2ec0e829f1 100644 --- a/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/GenericOpenApiContext.java +++ b/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/GenericOpenApiContext.java @@ -630,6 +630,9 @@ private OpenAPIConfiguration mergeParentConfiguration(OpenAPIConfiguration confi if (merged.isConvertToOpenAPI31() == null) { merged.setConvertToOpenAPI31(parentConfig.isConvertToOpenAPI31()); } + if (merged.getDefaultResponseCode() == null) { + merged.setDefaultResponseCode(parentConfig.getDefaultResponseCode()); + } return merged; } diff --git a/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/SwaggerConfiguration.java b/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/SwaggerConfiguration.java index 7b05c9e7de..1bd9041905 100644 --- a/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/SwaggerConfiguration.java +++ b/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/SwaggerConfiguration.java @@ -40,6 +40,22 @@ public class SwaggerConfiguration implements OpenAPIConfiguration { private Boolean convertToOpenAPI31; + @Override + public String getDefaultResponseCode() { + return defaultResponseCode; + } + + public void setDefaultResponseCode(String defaultResponseCode) { + this.defaultResponseCode = defaultResponseCode; + } + + public SwaggerConfiguration defaultResponseCode(String defaultResponseCode) { + this.defaultResponseCode = defaultResponseCode; + return this; + } + + private String defaultResponseCode; + public Long getCacheTTL() { return cacheTTL; } diff --git a/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/api/OpenAPIConfiguration.java b/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/api/OpenAPIConfiguration.java index 5c8b66a9bf..ae52702a9c 100644 --- a/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/api/OpenAPIConfiguration.java +++ b/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/api/OpenAPIConfiguration.java @@ -63,4 +63,9 @@ public interface OpenAPIConfiguration { * @since 2.2.12 */ Boolean isConvertToOpenAPI31(); + + /** + * @since 2.2.17 + */ + public String getDefaultResponseCode(); } diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/OperationParser.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/OperationParser.java index 360a33ac14..b3f803e62f 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/OperationParser.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/OperationParser.java @@ -62,10 +62,10 @@ public static Optional getRequestBody(io.swagger.v3.oas.annotations } public static Optional getApiResponses(final io.swagger.v3.oas.annotations.responses.ApiResponse[] responses, Produces classProduces, Produces methodProduces, Components components, JsonView jsonViewAnnotation) { - return getApiResponses(responses, classProduces, methodProduces, components, jsonViewAnnotation, false); + return getApiResponses(responses, classProduces, methodProduces, components, jsonViewAnnotation, false, ApiResponses.DEFAULT); } - public static Optional getApiResponses(final io.swagger.v3.oas.annotations.responses.ApiResponse[] responses, Produces classProduces, Produces methodProduces, Components components, JsonView jsonViewAnnotation, boolean openapi31) { + public static Optional getApiResponses(final io.swagger.v3.oas.annotations.responses.ApiResponse[] responses, Produces classProduces, Produces methodProduces, Components components, JsonView jsonViewAnnotation, boolean openapi31, String defaultResponseKey) { if (responses == null) { return Optional.empty(); } @@ -103,7 +103,7 @@ public static Optional getApiResponses(final io.swagger.v3.oas.ann if (StringUtils.isNotBlank(response.responseCode())) { apiResponsesObject.addApiResponse(response.responseCode(), apiResponseObject); } else { - apiResponsesObject._default(apiResponseObject); + apiResponsesObject.addApiResponse(defaultResponseKey, apiResponseObject); } } } diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java index fb683de4ea..6290ee854c 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java @@ -88,6 +88,8 @@ public class Reader implements OpenApiReader { private Paths paths; private Set openApiTags; + private String defaultResponseKey = ApiResponses.DEFAULT; + private static final String GET_METHOD = "get"; private static final String POST_METHOD = "post"; private static final String PUT_METHOD = "put"; @@ -216,6 +218,7 @@ public void setConfiguration(OpenAPIConfiguration openApiConfiguration) { this.components = this.openAPI.getComponents(); } } + this.defaultResponseKey = StringUtils.isBlank(config.getDefaultResponseCode()) ? ApiResponses.DEFAULT : config.getDefaultResponseCode(); } } @@ -1083,7 +1086,9 @@ protected Operation parseMethod( classProduces, methodProduces, components, - jsonViewAnnotation + jsonViewAnnotation, + config.isOpenAPI31(), + defaultResponseKey ).ifPresent(responses -> { if (operation.getResponses() == null) { operation.setResponses(responses); @@ -1104,7 +1109,9 @@ protected Operation parseMethod( classProduces, methodProduces, components, - jsonViewAnnotation + jsonViewAnnotation, + config.isOpenAPI31(), + defaultResponseKey ).ifPresent(responses -> { if (operation.getResponses() == null) { operation.setResponses(responses); @@ -1164,20 +1171,20 @@ protected Operation parseMethod( methodProduces == null ? new String[0] : methodProduces.value(), content, mediaType); if (operation.getResponses() == null) { operation.responses( - new ApiResponses()._default( + new ApiResponses().addApiResponse(defaultResponseKey, new ApiResponse().description(DEFAULT_DESCRIPTION) .content(content) ) ); } - if (operation.getResponses().getDefault() != null && - StringUtils.isBlank(operation.getResponses().getDefault().get$ref())) { - if (operation.getResponses().getDefault().getContent() == null) { - operation.getResponses().getDefault().content(content); + if (operation.getResponses().get(defaultResponseKey) != null && + StringUtils.isBlank(operation.getResponses().get(defaultResponseKey).get$ref())) { + if (operation.getResponses().get(defaultResponseKey).getContent() == null) { + operation.getResponses().get(defaultResponseKey).content(content); } else { - for (String key : operation.getResponses().getDefault().getContent().keySet()) { - if (operation.getResponses().getDefault().getContent().get(key).getSchema() == null) { - operation.getResponses().getDefault().getContent().get(key).setSchema(returnTypeSchema); + for (String key : operation.getResponses().get(defaultResponseKey).getContent().keySet()) { + if (operation.getResponses().get(defaultResponseKey).getContent().get(key).getSchema() == null) { + operation.getResponses().get(defaultResponseKey).getContent().get(key).setSchema(returnTypeSchema); } } } @@ -1414,7 +1421,7 @@ protected void setOperationObjectFromApiOperationAnnotation( AnnotationsUtils.getExternalDocumentation(apiOperation.externalDocs(), openapi31).ifPresent(operation::setExternalDocs); } - OperationParser.getApiResponses(apiOperation.responses(), classProduces, methodProduces, components, jsonViewAnnotation, openapi31).ifPresent(responses -> { + OperationParser.getApiResponses(apiOperation.responses(), classProduces, methodProduces, components, jsonViewAnnotation, openapi31, defaultResponseKey).ifPresent(responses -> { if (operation.getResponses() == null) { operation.setResponses(responses); } else { diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/ServletConfigContextUtils.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/ServletConfigContextUtils.java index f5a8ab2ee7..aa26058aaa 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/ServletConfigContextUtils.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/ServletConfigContextUtils.java @@ -46,6 +46,11 @@ public class ServletConfigContextUtils { */ public static final String OPENAPI_CONFIGURATION_OBJECT_MAPPER_PROCESSOR_KEY = "openApi.configuration.objectMapperProcessorClass"; + /** + * @since 2.2.17 + */ + public static final String OPENAPI_CONFIGURATION_DEFAULT_RESPONSE_CODE_KEY = "openApi.configuration.defaultResponseCode"; + /** * @since 2.0.6 */ diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/ServletOpenApiConfigurationLoader.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/ServletOpenApiConfigurationLoader.java index 4620a2c667..baeb5dce76 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/ServletOpenApiConfigurationLoader.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/ServletOpenApiConfigurationLoader.java @@ -17,6 +17,7 @@ import static io.swagger.v3.jaxrs2.integration.ServletConfigContextUtils.OPENAPI_CONFIGURATION_CACHE_TTL_KEY; import static io.swagger.v3.jaxrs2.integration.ServletConfigContextUtils.OPENAPI_CONFIGURATION_FILTER_KEY; import static io.swagger.v3.jaxrs2.integration.ServletConfigContextUtils.OPENAPI_CONFIGURATION_OBJECT_MAPPER_PROCESSOR_KEY; +import static io.swagger.v3.jaxrs2.integration.ServletConfigContextUtils.OPENAPI_CONFIGURATION_DEFAULT_RESPONSE_CODE_KEY; import static io.swagger.v3.jaxrs2.integration.ServletConfigContextUtils.OPENAPI_CONFIGURATION_OPENAPI_31_KEY; import static io.swagger.v3.jaxrs2.integration.ServletConfigContextUtils.OPENAPI_CONFIGURATION_CONVERT_TO_OPENAPI_31_KEY; import static io.swagger.v3.jaxrs2.integration.ServletConfigContextUtils.OPENAPI_CONFIGURATION_PRETTYPRINT_KEY; @@ -65,6 +66,7 @@ public OpenAPIConfiguration load(String path) throws IOException { .cacheTTL(getLongInitParam(servletConfig, OPENAPI_CONFIGURATION_CACHE_TTL_KEY)) .scannerClass(getInitParam(servletConfig, OPENAPI_CONFIGURATION_SCANNER_KEY)) .objectMapperProcessorClass(getInitParam(servletConfig, OPENAPI_CONFIGURATION_OBJECT_MAPPER_PROCESSOR_KEY)) + .defaultResponseCode(getInitParam(servletConfig, OPENAPI_CONFIGURATION_DEFAULT_RESPONSE_CODE_KEY)) .openAPI31(getBooleanInitParam(servletConfig, OPENAPI_CONFIGURATION_OPENAPI_31_KEY)) .convertToOpenAPI31(getBooleanInitParam(servletConfig, OPENAPI_CONFIGURATION_CONVERT_TO_OPENAPI_31_KEY)) .modelConverterClasses(resolveModelConverterClasses(servletConfig)); @@ -138,6 +140,9 @@ public boolean exists(String path) { if (getInitParam(servletConfig, OPENAPI_CONFIGURATION_OBJECT_MAPPER_PROCESSOR_KEY) != null) { return true; } + if (getInitParam(servletConfig, OPENAPI_CONFIGURATION_DEFAULT_RESPONSE_CODE_KEY) != null) { + return true; + } if (getInitParam(servletConfig, OPENAPI_CONFIGURATION_CONVERT_TO_OPENAPI_31_KEY) != null) { return true; } diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/SwaggerLoader.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/SwaggerLoader.java index 9023e7c273..c9375dbe5d 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/SwaggerLoader.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/SwaggerLoader.java @@ -36,6 +36,7 @@ public class SwaggerLoader { private String openapiAsString; private String objectMapperProcessorClass; + private String defaultResponseCode; private String modelConverterClasses; private Boolean sortOutput = false; @@ -62,6 +63,20 @@ public void setObjectMapperProcessorClass(String objectMapperProcessorClass) { this.objectMapperProcessorClass = objectMapperProcessorClass; } + /** + * @since 2.2.17 + */ + public String getDefaultResponseCode() { + return defaultResponseCode; + } + + /** + * @since 2.2.17 + */ + public void setDefaultResponseCode(String defaultResponseCode) { + this.defaultResponseCode = defaultResponseCode; + } + /** * @since 2.0.6 */ @@ -279,6 +294,7 @@ public Map resolve() throws Exception{ .resourceClasses(resourceClassesSet) .resourcePackages(resourcePackagesSet) .objectMapperProcessorClass(objectMapperProcessorClass) + .defaultResponseCode(defaultResponseCode) .modelConverterClasses(modelConverterSet) .sortOutput(sortOutput) .alwaysResolveAppPath(alwaysResolveAppPath) diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java index e136021158..35278fb899 100644 --- a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java @@ -15,6 +15,7 @@ import io.swagger.v3.jaxrs2.matchers.SerializationMatchers; import io.swagger.v3.jaxrs2.petstore31.PetResource; import io.swagger.v3.jaxrs2.petstore31.TagResource; +import io.swagger.v3.jaxrs2.resources.DefaultResponseResource; import io.swagger.v3.jaxrs2.resources.Misc31Resource; import io.swagger.v3.jaxrs2.resources.ParameterMaximumValueResource; import io.swagger.v3.jaxrs2.resources.ResponseReturnTypeResource; @@ -3148,6 +3149,27 @@ public void testResponseReturnType() { SerializationMatchers.assertEqualsToYaml(openAPI, yaml); } + @Test(description = "Responses Default Status") + public void testResponseDefaultStatus() { + SwaggerConfiguration config = new SwaggerConfiguration().defaultResponseCode("200"); + Reader reader = new Reader(config); + + OpenAPI openAPI = reader.read(DefaultResponseResource.class); + String yaml = "openapi: 3.0.1\n" + + "paths:\n" + + " /:\n" + + " get:\n" + + " operationId: test\n" + + " responses:\n" + + " \"200\":\n" + + " description: default response\n" + + " content:\n" + + " '*/*':\n" + + " schema:\n" + + " type: string\n"; + SerializationMatchers.assertEqualsToYaml(openAPI, yaml); + } + @Test public void test4412PathWildcards() { Reader reader = new Reader(new OpenAPI()); diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/DefaultResponseResource.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/DefaultResponseResource.java new file mode 100644 index 0000000000..869590a7d3 --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/DefaultResponseResource.java @@ -0,0 +1,14 @@ +package io.swagger.v3.jaxrs2.resources; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; + +public class DefaultResponseResource { + + @GET + @Path("/") + public String test() { + return null; + } + +} diff --git a/modules/swagger-maven-plugin/README.md b/modules/swagger-maven-plugin/README.md index 140fee753d..86d769d876 100644 --- a/modules/swagger-maven-plugin/README.md +++ b/modules/swagger-maven-plugin/README.md @@ -197,6 +197,7 @@ Parameter | Description | Required | Default `readAllResources`|see [configuration property](https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Integration-and-Configuration#configuration-properties)|false| `ignoredRoutes`|see [configuration property](https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Integration-and-Configuration#configuration-properties)|false| `objectMapperProcessorClass`|see [configuration property](https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Integration-and-Configuration#configuration-properties)|false| +`defaultResponseCode`|see [configuration property](https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Integration-and-Configuration#configuration-properties)|false| `modelConverterClasses`|see [configuration property](https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Integration-and-Configuration#configuration-properties)|false| `contextId`|see [Context](https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Integration-and-Configuration#context)|false|${project.artifactId} @@ -208,3 +209,4 @@ Since version 2.1.6, `sortOutput` parameter is available, allowing to sort objec Since version 2.1.6, `objectMapperProcessorClass` allows to configure also the ObjectMapper instance used to serialize the resolved OpenAPI Since version 2.1.9, `alwaysResolveAppPath` parameter is available, allowing to trigger resolving of Application Path from annotaion also not in runtime (e.g. using servlet in separate application, or in maven plugin at build time, etc) Since version 2.1.15, `skipResolveAppPath` parameter is available, allowing to skip resolving of Application Path from annotation +Since version 2.2.17, `defaultResponseCode` parameter is available, allowing to set the code used when resolving responses with no http status code annotation diff --git a/modules/swagger-maven-plugin/src/main/java/io/swagger/v3/plugin/maven/SwaggerMojo.java b/modules/swagger-maven-plugin/src/main/java/io/swagger/v3/plugin/maven/SwaggerMojo.java index 3452443bc5..05911233d7 100644 --- a/modules/swagger-maven-plugin/src/main/java/io/swagger/v3/plugin/maven/SwaggerMojo.java +++ b/modules/swagger-maven-plugin/src/main/java/io/swagger/v3/plugin/maven/SwaggerMojo.java @@ -345,6 +345,9 @@ private SwaggerConfiguration mergeConfig(OpenAPI openAPIInput, SwaggerConfigurat if (StringUtils.isNotBlank(objectMapperProcessorClass)) { config.objectMapperProcessorClass(objectMapperProcessorClass); } + if (StringUtils.isNotBlank(defaultResponseCode)) { + config.defaultResponseCode(defaultResponseCode); + } if (isCollectionNotBlank(modelConverterClasses)) { config.modelConverterClasses(modelConverterClasses); } @@ -385,6 +388,11 @@ private boolean isCollectionNotBlank(Collection collection) { */ @Parameter( property = "resolve.objectMapperProcessorClass" ) private String objectMapperProcessorClass; + /** + * @since 2.2.17 + */ + @Parameter( property = "resolve.defaultResponseCode" ) + private String defaultResponseCode; @Parameter(property = "resolve.prettyPrint") private Boolean prettyPrint; @Parameter(property = "resolve.readAllResources") diff --git a/modules/swagger-models/src/main/java/io/swagger/v3/oas/models/responses/ApiResponses.java b/modules/swagger-models/src/main/java/io/swagger/v3/oas/models/responses/ApiResponses.java index 4d049e30af..892c62dc77 100644 --- a/modules/swagger-models/src/main/java/io/swagger/v3/oas/models/responses/ApiResponses.java +++ b/modules/swagger-models/src/main/java/io/swagger/v3/oas/models/responses/ApiResponses.java @@ -28,15 +28,17 @@ public ApiResponses addApiResponse(String name, ApiResponse item) { * * @return ApiResponse _default **/ - + @Deprecated public ApiResponse getDefault() { return this.get(DEFAULT); } + @Deprecated public void setDefault(ApiResponse _default) { addApiResponse(DEFAULT, _default); } + @Deprecated public ApiResponses _default(ApiResponse _default) { setDefault(_default); return this; From 19b82de7c4917c7a468347bb58c3c2a6a39d4e85 Mon Sep 17 00:00:00 2001 From: frantuma Date: Thu, 12 Oct 2023 12:38:35 +0200 Subject: [PATCH 080/131] update dependencies --- .../pom.xml | 10 ++--- modules/swagger-gradle-plugin/build.gradle | 8 ++-- .../swagger-gradle-plugin/gradle.properties | 2 +- modules/swagger-jaxrs2/pom.xml | 2 +- modules/swagger-maven-plugin/pom.xml | 18 ++++---- .../swagger-maven-plugin-jakarta/pom.xml | 6 +-- modules/swagger-project-jakarta/pom.xml | 42 +++++++++---------- pom.xml | 32 +++++++------- 8 files changed, 60 insertions(+), 60 deletions(-) diff --git a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml index dc7838b1a7..b35e8d2e99 100644 --- a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml +++ b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml @@ -94,7 +94,7 @@ org.apache.maven.plugin-tools maven-plugin-annotations - 3.7.0 + 3.9.0 provided @@ -106,7 +106,7 @@ org.codehaus.plexus plexus-archiver - 4.1.0 + 4.8.0 test @@ -122,12 +122,12 @@ org.codehaus.plexus plexus-utils - 3.5.0 + 4.0.0 org.codehaus.plexus plexus-component-annotations - 2.1.0 + 2.1.1 org.apache.maven @@ -138,7 +138,7 @@ commons-cli commons-cli - 1.4 + 1.5.0 org.apache.maven diff --git a/modules/swagger-gradle-plugin/build.gradle b/modules/swagger-gradle-plugin/build.gradle index f9485b96f3..6354428330 100644 --- a/modules/swagger-gradle-plugin/build.gradle +++ b/modules/swagger-gradle-plugin/build.gradle @@ -24,7 +24,7 @@ compileJava { dependencies { implementation gradleApi() - implementation 'org.apache.commons:commons-lang3:3.12.0' + implementation 'org.apache.commons:commons-lang3:3.13.0' testImplementation gradleTestKit() testImplementation('com.github.tomakehurst:wiremock:2.27.2') { @@ -39,7 +39,7 @@ dependencies { exclude group: 'com.github.jknack', module: 'handlebars-helpers' } testImplementation 'javax.servlet:javax.servlet-api:3.1.0' - testImplementation 'com.google.guava:guava:31.1-jre' + testImplementation 'com.google.guava:guava:32.1.3-jre' testImplementation 'javax.ws.rs:javax.ws.rs-api:2.1.1' testImplementation "io.swagger.core.v3:swagger-jaxrs2:${project.version}" testImplementation 'junit:junit:4+' @@ -49,8 +49,8 @@ dependencies { testImplementation "org.eclipse.jetty:jetty-webapp:${project.jettyVersion}" testImplementation "org.eclipse.jetty:jetty-proxy:${project.jettyVersion}" testImplementation "org.apache.httpcomponents:httpclient:4.5.13" - testImplementation "commons-codec:commons-codec:1.15" - testImplementation "commons-io:commons-io:2.11.0" + testImplementation "commons-codec:commons-codec:1.16.0" + testImplementation "commons-io:commons-io:2.14.0" testImplementation "org.apache.commons:commons-compress:1.21" testImplementation "com.github.jknack:handlebars:4.3.1" testImplementation "com.github.jknack:handlebars-helpers:4.3.1" diff --git a/modules/swagger-gradle-plugin/gradle.properties b/modules/swagger-gradle-plugin/gradle.properties index af151a2b95..c236dededb 100644 --- a/modules/swagger-gradle-plugin/gradle.properties +++ b/modules/swagger-gradle-plugin/gradle.properties @@ -1,2 +1,2 @@ version=2.2.17-SNAPSHOT -jettyVersion=9.4.49.v20220914 +jettyVersion=9.4.53.v20231009 diff --git a/modules/swagger-jaxrs2/pom.xml b/modules/swagger-jaxrs2/pom.xml index d17c631684..8a140feef1 100644 --- a/modules/swagger-jaxrs2/pom.xml +++ b/modules/swagger-jaxrs2/pom.xml @@ -239,7 +239,7 @@ org.jboss.arquillian.testng arquillian-testng-container - 1.7.0.Alpha14 + 1.7.1.Final test diff --git a/modules/swagger-maven-plugin/pom.xml b/modules/swagger-maven-plugin/pom.xml index e2ac28fef0..6c2956d5fa 100644 --- a/modules/swagger-maven-plugin/pom.xml +++ b/modules/swagger-maven-plugin/pom.xml @@ -88,7 +88,7 @@ org.apache.maven.plugin-tools maven-plugin-annotations - 3.7.0 + 3.9.0 provided @@ -100,7 +100,7 @@ org.codehaus.plexus plexus-archiver - 4.1.0 + 4.8.0 test @@ -145,12 +145,12 @@ org.codehaus.plexus plexus-utils - 3.5.0 + 3.5.1 org.codehaus.plexus plexus-component-annotations - 2.1.0 + 2.1.1 io.swagger.core.v3 @@ -279,20 +279,20 @@ com.github.jknack handlebars-helpers test - 4.2.1 + 4.3.1 com.github.jknack handlebars test - 4.2.1 + 4.3.1 UTF-8 3.8.4 - 4.13.1 - 9.4.43.v20210629 - 1.21 + 4.13.2 + 9.4.53.v20231009 + 1.24.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml index fcfec6b821..2e441903bc 100644 --- a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml @@ -140,7 +140,7 @@ org.apache.maven.plugin-tools maven-plugin-annotations - 3.7.0 + 3.9.0 provided @@ -157,12 +157,12 @@ org.codehaus.plexus plexus-utils - 3.5.0 + 3.5.1 org.codehaus.plexus plexus-component-annotations - 2.1.0 + 2.1.1 diff --git a/modules/swagger-project-jakarta/pom.xml b/modules/swagger-project-jakarta/pom.xml index 7e605ed94f..8da2c0724e 100644 --- a/modules/swagger-project-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/pom.xml @@ -132,7 +132,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.1.1 + 3.5.0 true 1.8 @@ -156,7 +156,7 @@ org.apache.maven.plugins maven-jar-plugin - 3.2.0 + 3.3.0 empty-javadoc-jar @@ -335,7 +335,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.0.0 + 3.5.0 true 1.8 @@ -562,35 +562,35 @@ 8 - 1.9.2 - 2.12.2 - 2.0 + 2.2.3 + 2.12.5 + 2.2 3.1.0 3.0.2 3.0.0 - 2.1.1 - 5.2.0 + 2.1.2 + 6.4.0 5.0.0 - 3.0.1 + 3.1.3 4.13.2 - 2.15.1 - 2.15.1 - 1.4.5 - 4.8.154 - 31.1-jre + 2.15.2 + 2.15.2 + 1.4.11 + 4.8.162 + 32.1.3-jre 1.10.13 - 3.12.0 - 2.11.0 - 1.7.35 - 9.4.49.v20220914 - 7.7.1 + 3.13.0 + 2.14.0 + 2.0.9 + 9.4.53.v20231009 + 7.8.0 2.28.2 4.3.2 4.5.14 - 1.15 + 1.16.0 2.22.2 - 3.0.0-M2 + 3.2.1 2.22.2 0.90 diff --git a/pom.xml b/pom.xml index 4283bd729a..a0029d4248 100644 --- a/pom.xml +++ b/pom.xml @@ -318,7 +318,7 @@ org.glassfish.jersey.containers jersey-container-servlet - 2.30.1 + ${jersey2-version} org.javassist @@ -640,16 +640,16 @@ org.codehaus.groovy groovy - 3.0.15 + 3.0.19 test 8 - 1.9.2 - 2.12.2 - 2.0 + 2.2.3 + 2.12.5 + 2.2 2.1.6 2.3.3 1.2.2 @@ -657,21 +657,21 @@ 4.0.3 2.39 4.13.2 - 2.15.1 - 2.15.1 - 1.4.5 - 4.8.154 - 31.1-jre + 2.15.2 + 2.15.2 + 1.4.11 + 4.8.162 + 32.1.3-jre 1.10.13 - 3.12.0 - 2.11.0 - 1.7.36 - 9.4.49.v20220914 - 7.7.1 + 3.13.0 + 2.14.0 + 2.0.9 + 9.4.53.v20231009 + 7.8.0 2.28.2 4.3.2 4.5.14 - 1.15 + 1.16.0 2.22.2 3.2.1 From 99ef1a13461178545013c820a155ad1407d70ccf Mon Sep 17 00:00:00 2001 From: frantuma Date: Thu, 12 Oct 2023 19:46:04 +0200 Subject: [PATCH 081/131] update pythom CI --- .github/workflows/prepare-release.yml | 8 ++--- .github/workflows/release.yml | 8 ++--- CI/ghApiClient.py | 47 ++++++++++++++------------- CI/releaseNotes.py | 15 +++++---- 4 files changed, 40 insertions(+), 38 deletions(-) diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index 30847642cd..749999c969 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -7,7 +7,7 @@ on: jobs: build: - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 @@ -16,10 +16,10 @@ jobs: with: app_id: ${{ secrets.APP_ID }} private_key: ${{ secrets.APP_PRIVATE_KEY }} - - name: Set up Python 2.7.18 - uses: MatteoH2O1999/setup-python@v1 + - name: Set up Python 3.10 + uses: actions/setup-python@v4 with: - python-version: 2.7.18 + python-version: '3.10' - name: Set up Java 11 uses: actions/setup-java@v1 with: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3c0c6baf43..7987db007d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -7,7 +7,7 @@ on: jobs: build: - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 @@ -16,10 +16,10 @@ jobs: with: app_id: ${{ secrets.APP_ID }} private_key: ${{ secrets.APP_PRIVATE_KEY }} - - name: Set up Python 2.7.18 - uses: MatteoH2O1999/setup-python@v1 + - name: Set up Python 3.10 + uses: actions/setup-python@v4 with: - python-version: 2.7.18 + python-version: '3.10' - name: Set up Java 11 uses: actions/setup-java@v1 with: diff --git a/CI/ghApiClient.py b/CI/ghApiClient.py index 09209073df..173574959d 100755 --- a/CI/ghApiClient.py +++ b/CI/ghApiClient.py @@ -2,8 +2,8 @@ import os import time -import urllib2 -import httplib +import urllib.request, urllib.error, urllib.parse +import http.client import json GH_BASE_URL = "https://api.github.com/" @@ -13,46 +13,47 @@ def readUrl(name): try: - request = urllib2.Request(GH_BASE_URL + name) + request = urllib.request.Request(GH_BASE_URL + name) request.add_header("Authorization", GH_AUTH) - content = urllib2.urlopen(request).read() + content = urllib.request.urlopen(request).read() jcont = json.loads(content) - return jcont; - except urllib2.HTTPError as e: - print ('HTTPError = ' + str(e.code)) + return jcont + except urllib.error.HTTPError as e: + print(('HTTPError = ' + str(e.code))) raise e - except urllib2.URLError as e: - print ('URLError = ' + str(e.reason)) + except urllib.error.URLError as e: + print(('URLError = ' + str(e.reason))) raise e - except httplib.HTTPException as e: - print ('HTTPException = ' + str(e)) + except http.client.HTTPException as e: + print(('HTTPException = ' + str(e))) raise e except Exception: import traceback - print ('generic exception: ' + traceback.format_exc()) + print(('generic exception: ' + traceback.format_exc())) raise IOError def postUrl(name, body): global GH_BASE_URL try: time.sleep(0.05) - request = urllib2.Request(GH_BASE_URL + name) + request = urllib.request.Request(GH_BASE_URL + name) request.add_header("Authorization", GH_AUTH) request.add_header("Accept", "application/vnd.github.v3+json") - content = urllib2.urlopen(request, body).read() + content = urllib.request.urlopen(request, body).read() jcont = json.loads(content) - return jcont; - except urllib2.HTTPError as e: - print ('HTTPError = ' + str(e.code)) - print (str(e)) + return jcont + except urllib.error.HTTPError as e: + print(('HTTPError = ' + str(e.code))) + print((str(e))) raise e - except urllib2.URLError as e: - print ('URLError = ' + str(e.reason)) + except urllib.error.URLError as e: + print(('URLError = ' + str(e.reason))) raise e - except httplib.HTTPException as e: - print ('HTTPException = ' + str(e)) + except http.client.HTTPException as e: + print(('HTTPException = ' + str(e))) raise e except Exception: import traceback - print ('generic exception: ' + traceback.format_exc()) + print(('generic exception: ' + traceback.format_exc())) raise IOError + diff --git a/CI/releaseNotes.py b/CI/releaseNotes.py index d1022048b4..bf617239e6 100755 --- a/CI/releaseNotes.py +++ b/CI/releaseNotes.py @@ -12,13 +12,13 @@ def allPulls(releaseDate): baseurl = "https://api.github.com/repos/swagger-api/swagger-core/pulls/" content = ghApiClient.readUrl('repos/swagger-api/swagger-core/pulls?state=closed&base=master&per_page=100') for l in content: - stripped = l["url"][len(baseurl):] - mergedAt = l["merged_at"] - if mergedAt is not None: - if datetime.strptime(mergedAt, '%Y-%m-%dT%H:%M:%SZ') > releaseDate: - if not l['title'].startswith("bump snap"): - result += '\n' - result += "* " + l['title'] + " (#" + stripped + ")" + stripped = l["url"][len(baseurl):] + mergedAt = l["merged_at"] + if mergedAt is not None: + if datetime.strptime(mergedAt, '%Y-%m-%dT%H:%M:%SZ') > releaseDate: + if not l['title'].startswith("bump snap"): + result += '\n' + result += "* " + l['title'] + " (#" + stripped + ")" return result @@ -49,3 +49,4 @@ def main(last_release, release_title, tag): # here start main main(sys.argv[1], sys.argv[2], sys.argv[3]) + From ed069e05ca9e41fe608de77aa8040af0df2cd952 Mon Sep 17 00:00:00 2001 From: frantuma Date: Thu, 12 Oct 2023 20:31:01 +0200 Subject: [PATCH 082/131] python CI - encode request body --- CI/ghApiClient.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CI/ghApiClient.py b/CI/ghApiClient.py index 173574959d..60fbf230ee 100755 --- a/CI/ghApiClient.py +++ b/CI/ghApiClient.py @@ -39,7 +39,8 @@ def postUrl(name, body): request = urllib.request.Request(GH_BASE_URL + name) request.add_header("Authorization", GH_AUTH) request.add_header("Accept", "application/vnd.github.v3+json") - content = urllib.request.urlopen(request, body).read() + data = urllib.parse.urlencode(body).encode("utf-8") + content = urllib.request.urlopen(request, data).read() jcont = json.loads(content) return jcont except urllib.error.HTTPError as e: @@ -56,4 +57,3 @@ def postUrl(name, body): import traceback print(('generic exception: ' + traceback.format_exc())) raise IOError - From 4d367e307eed955faa811e1166217215bcb749d4 Mon Sep 17 00:00:00 2001 From: frantuma Date: Thu, 12 Oct 2023 21:11:41 +0200 Subject: [PATCH 083/131] python CI - encode request body --- CI/ghApiClient.py | 2 +- CI/test.py | 60 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 1 deletion(-) create mode 100755 CI/test.py diff --git a/CI/ghApiClient.py b/CI/ghApiClient.py index 60fbf230ee..fcec1eace8 100755 --- a/CI/ghApiClient.py +++ b/CI/ghApiClient.py @@ -39,7 +39,7 @@ def postUrl(name, body): request = urllib.request.Request(GH_BASE_URL + name) request.add_header("Authorization", GH_AUTH) request.add_header("Accept", "application/vnd.github.v3+json") - data = urllib.parse.urlencode(body).encode("utf-8") + data = body.encode('utf-8') content = urllib.request.urlopen(request, data).read() jcont = json.loads(content) return jcont diff --git a/CI/test.py b/CI/test.py new file mode 100755 index 0000000000..4c8d625973 --- /dev/null +++ b/CI/test.py @@ -0,0 +1,60 @@ +#!/usr/bin/python + +import sys +import json +from datetime import datetime +import ghApiClient + +def allPulls(releaseDate): + + result = "" + + baseurl = "https://api.github.com/repos/swagger-api/swagger-core/pulls/" + content = ghApiClient.readUrl('repos/swagger-api/swagger-core/pulls?state=closed&base=master&per_page=100') + for l in content: + stripped = l["url"][len(baseurl):] + mergedAt = l["merged_at"] + if mergedAt is not None: + if datetime.strptime(mergedAt, '%Y-%m-%dT%H:%M:%SZ') > releaseDate: + if not l['title'].startswith("bump snap"): + result += '\n' + result += "* " + l['title'] + " (#" + stripped + ")" + return result + + +def lastReleaseDate(tag): + content = ghApiClient.readUrl('repos/swagger-api/swagger-core/releases/tags/' + tag) + publishedAt = content["published_at"] + return datetime.strptime(publishedAt, '%Y-%m-%dT%H:%M:%SZ') + + +def addRelease(release_title, tag, content): + payload = "{\"tag_name\":\"" + tag + "\", " + payload += "\"name\":" + json.dumps(release_title) + ", " + payload += "\"body\":" + json.dumps(content) + ", " + payload += "\"draft\":" + "true" + ", " + payload += "\"prerelease\":" + "false" + ", " + payload += "\"target_commitish\":\"" + "master" + "\"}" + content = ghApiClient.postUrl('repos/swagger-api/swagger-core/releases', payload) + return content + +def getReleases(): + content = ghApiClient.readUrl('repos/swagger-api/swagger-core/releases') + return content + +# main +def main(last_release, release_title, tag): + baseurl = "https://api.github.com/repos/swagger-api/swagger-core/pulls/" + payload = "{\"tag_name\":\"" + tag + "\", " + payload += "\"name\":" + json.dumps(release_title) + ", " + payload += "\"body\":" + json.dumps(content) + ", " + payload += "\"draft\":" + "true" + ", " + payload += "\"prerelease\":" + "false" + ", " + payload += "\"target_commitish\":\"" + "master" + "\"}" + content = ghApiClient.postUrl('repos/swagger-api/swagger-core/releases', payload) + result = allPulls(lastReleaseDate('v' + last_release)) + addRelease (release_title, tag, result) + +# here start main +main(sys.argv[1], sys.argv[2], sys.argv[3]) + From 7266a89fcb3476076ad6c149582cfb6740fd1dee Mon Sep 17 00:00:00 2001 From: frantuma Date: Thu, 12 Oct 2023 19:39:37 +0000 Subject: [PATCH 084/131] prepare release 2.2.17 --- README.md | 5 +++-- modules/swagger-annotations/pom.xml | 2 +- modules/swagger-core/pom.xml | 2 +- .../swagger-eclipse-transformer-maven-plugin/pom.xml | 2 +- modules/swagger-gradle-plugin/README.md | 4 ++-- modules/swagger-gradle-plugin/gradle.properties | 2 +- .../io/swagger/v3/plugins/gradle/SwaggerPlugin.java | 2 +- .../v3/plugins/gradle/SwaggerResolveTest.java | 4 ++-- modules/swagger-integration/pom.xml | 2 +- .../swagger-jaxrs2-servlet-initializer-v2/pom.xml | 2 +- modules/swagger-jaxrs2-servlet-initializer/pom.xml | 2 +- modules/swagger-jaxrs2/pom.xml | 2 +- modules/swagger-maven-plugin/README.md | 12 ++++++------ modules/swagger-maven-plugin/pom.xml | 2 +- modules/swagger-models/pom.xml | 2 +- .../modules/swagger-annotations-jakarta/pom.xml | 2 +- .../modules/swagger-core-jakarta/pom.xml | 2 +- .../modules/swagger-integration-jakarta/pom.xml | 2 +- .../modules/swagger-jaxrs2-jakarta/pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../modules/swagger-maven-plugin-jakarta/pom.xml | 2 +- .../modules/swagger-models-jakarta/pom.xml | 2 +- modules/swagger-project-jakarta/pom.xml | 2 +- pom.xml | 2 +- 25 files changed, 34 insertions(+), 33 deletions(-) diff --git a/README.md b/README.md index e2c6c592e4..67a609df34 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,8 @@ The OpenAPI Specification has undergone several revisions since initial creation Swagger core Version | Release Date | OpenAPI Spec compatibility | Notes | Status ------------------------- | ------------ | -------------------------- | ----- | ---- -2.2.16 (**current stable**)| 2023-09-18 | 3.x | [tag v2.2.16](https://github.com/swagger-api/swagger-core/tree/v2.2.16) | Supported +2.2.17 (**current stable**)| 2023-10-12 | 3.x | [tag v2.2.17](https://github.com/swagger-api/swagger-core/tree/v2.2.17) | Supported +2.2.16 | 2023-09-18 | 3.x | [tag v2.2.16](https://github.com/swagger-api/swagger-core/tree/v2.2.16) | Supported 2.2.15 | 2023-07-08 | 3.x | [tag v2.2.15](https://github.com/swagger-api/swagger-core/tree/v2.2.15) | Supported 2.2.14 | 2023-06-26 | 3.x | [tag v2.2.14](https://github.com/swagger-api/swagger-core/tree/v2.2.14) | Supported 2.2.13 | 2023-06-24 | 3.x | [tag v2.2.13](https://github.com/swagger-api/swagger-core/tree/v2.2.13) | Supported @@ -102,7 +103,7 @@ You need the following installed and available in your $PATH: * Jackson 2.4.5 or greater -### To build from source (currently 2.2.17-SNAPSHOT) +### To build from source (currently 2.2.18-SNAPSHOT) ``` # first time building locally mvn -N diff --git a/modules/swagger-annotations/pom.xml b/modules/swagger-annotations/pom.xml index 43188b103f..1168f1b9c0 100644 --- a/modules/swagger-annotations/pom.xml +++ b/modules/swagger-annotations/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.17-SNAPSHOT + 2.2.17 ../.. 4.0.0 diff --git a/modules/swagger-core/pom.xml b/modules/swagger-core/pom.xml index f0a9a46f71..7d0e632540 100644 --- a/modules/swagger-core/pom.xml +++ b/modules/swagger-core/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.17-SNAPSHOT + 2.2.17 ../.. 4.0.0 diff --git a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml index b35e8d2e99..546f7b3155 100644 --- a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml +++ b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.17-SNAPSHOT + 2.2.17 ../.. 4.0.0 diff --git a/modules/swagger-gradle-plugin/README.md b/modules/swagger-gradle-plugin/README.md index b6f4338298..b8e9a74540 100644 --- a/modules/swagger-gradle-plugin/README.md +++ b/modules/swagger-gradle-plugin/README.md @@ -26,7 +26,7 @@ Alternatively provide as value a classpath with the following dependencies (repl ``` plugins { - id "io.swagger.core.v3.swagger-gradle-plugin" version "2.2.16" + id "io.swagger.core.v3.swagger-gradle-plugin" version "2.2.17" } ``` ### Gradle 1.x and 2.0 @@ -43,7 +43,7 @@ buildscript { } } dependencies { - classpath "io.swagger.core.v3:swagger-gradle-plugin:2.2.16" + classpath "io.swagger.core.v3:swagger-gradle-plugin:2.2.17" } } diff --git a/modules/swagger-gradle-plugin/gradle.properties b/modules/swagger-gradle-plugin/gradle.properties index c236dededb..130a5b8801 100644 --- a/modules/swagger-gradle-plugin/gradle.properties +++ b/modules/swagger-gradle-plugin/gradle.properties @@ -1,2 +1,2 @@ -version=2.2.17-SNAPSHOT +version=2.2.17 jettyVersion=9.4.53.v20231009 diff --git a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java index ba229e2854..b1bf4cdd7e 100644 --- a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java +++ b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java @@ -16,7 +16,7 @@ public void apply(Project project) { config.defaultDependencies(new Action() { public void execute(DependencySet dependencies) { dependencies.add(project.getDependencies().create("org.apache.commons:commons-lang3:3.12.0")); - dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.17-SNAPSHOT")); + dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.17")); dependencies.add(project.getDependencies().create("javax.ws.rs:javax.ws.rs-api:2.1")); dependencies.add(project.getDependencies().create("javax.servlet:javax.servlet-api:3.1.0")); } diff --git a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java index 8521fafdf3..195f39de5b 100644 --- a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java +++ b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java @@ -81,7 +81,7 @@ public void testSwaggerResolveTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.17-SNAPSHOT'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.17'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + @@ -154,7 +154,7 @@ public void testSwaggerResolveWithOAS31OptionTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.17-SNAPSHOT'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.17'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + diff --git a/modules/swagger-integration/pom.xml b/modules/swagger-integration/pom.xml index 4b67080e0b..25a9a5686f 100644 --- a/modules/swagger-integration/pom.xml +++ b/modules/swagger-integration/pom.xml @@ -6,7 +6,7 @@ io.swagger.core.v3 swagger-project - 2.2.17-SNAPSHOT + 2.2.17 ../.. swagger-integration diff --git a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml index c15939ecd7..ca252df014 100644 --- a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.17-SNAPSHOT + 2.2.17 ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2-servlet-initializer/pom.xml b/modules/swagger-jaxrs2-servlet-initializer/pom.xml index 343c0b7ec2..4b9c029853 100644 --- a/modules/swagger-jaxrs2-servlet-initializer/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.17-SNAPSHOT + 2.2.17 ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2/pom.xml b/modules/swagger-jaxrs2/pom.xml index 8a140feef1..0898e3f6e3 100644 --- a/modules/swagger-jaxrs2/pom.xml +++ b/modules/swagger-jaxrs2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.17-SNAPSHOT + 2.2.17 ../../ 4.0.0 diff --git a/modules/swagger-maven-plugin/README.md b/modules/swagger-maven-plugin/README.md index 86d769d876..09ed0b00fd 100644 --- a/modules/swagger-maven-plugin/README.md +++ b/modules/swagger-maven-plugin/README.md @@ -22,7 +22,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin - 2.2.16 + 2.2.17 openapi ${project.build.directory}/generatedtest @@ -47,7 +47,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-jaxrs2 - 2.2.16 + 2.2.17 @@ -73,7 +73,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin-jakarta - 2.2.16 + 2.2.17 openapi ${project.build.directory}/generatedtest @@ -98,7 +98,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-jaxrs2-jakarta - 2.2.16 + 2.2.17 @@ -126,7 +126,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin - 2.2.16 + 2.2.17 openapi ${project.build.directory}/generatedtest @@ -155,7 +155,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin-jakarta - 2.2.16 + 2.2.17 openapi ${project.build.directory}/generatedtest diff --git a/modules/swagger-maven-plugin/pom.xml b/modules/swagger-maven-plugin/pom.xml index 6c2956d5fa..1a94297ad8 100644 --- a/modules/swagger-maven-plugin/pom.xml +++ b/modules/swagger-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.17-SNAPSHOT + 2.2.17 ../.. 4.0.0 diff --git a/modules/swagger-models/pom.xml b/modules/swagger-models/pom.xml index 9d71c403f4..6d8abfc3c4 100644 --- a/modules/swagger-models/pom.xml +++ b/modules/swagger-models/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.17-SNAPSHOT + 2.2.17 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml index c88423cc2f..813b0932ec 100644 --- a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.17-SNAPSHOT + 2.2.17 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml index 6cd0584989..0f46dd8e99 100644 --- a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.17-SNAPSHOT + 2.2.17 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml index 0f727e12c4..a44069e715 100644 --- a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.17-SNAPSHOT + 2.2.17 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml index 99b0b4f7f7..a124e44c70 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.17-SNAPSHOT + 2.2.17 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml index 0da1acd3f8..8fedecad1a 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.17-SNAPSHOT + 2.2.17 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml index 62f37b4246..2e8d6e2660 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.17-SNAPSHOT + 2.2.17 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml index 2e441903bc..9293ed88ed 100644 --- a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.17-SNAPSHOT + 2.2.17 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml index 15b041a848..cca7456559 100644 --- a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.17-SNAPSHOT + 2.2.17 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/pom.xml b/modules/swagger-project-jakarta/pom.xml index 8da2c0724e..73ced062ab 100644 --- a/modules/swagger-project-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/pom.xml @@ -6,7 +6,7 @@ pom swagger-project-jakarta swagger-project-jakarta - 2.2.17-SNAPSHOT + 2.2.17 https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git diff --git a/pom.xml b/pom.xml index a0029d4248..1cc5b4d177 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ pom swagger-project swagger-project - 2.2.17-SNAPSHOT + 2.2.17 https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git From 7cf0deb89a6359e541222631457406cf9a6b8d0e Mon Sep 17 00:00:00 2001 From: frantuma Date: Thu, 12 Oct 2023 20:00:54 +0000 Subject: [PATCH 085/131] bump snapshot 2.2.18-SNAPSHOT --- modules/swagger-annotations/pom.xml | 2 +- modules/swagger-core/pom.xml | 2 +- modules/swagger-eclipse-transformer-maven-plugin/pom.xml | 2 +- modules/swagger-gradle-plugin/gradle.properties | 2 +- .../main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java | 2 +- .../java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java | 4 ++-- modules/swagger-integration/pom.xml | 2 +- modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml | 2 +- modules/swagger-jaxrs2-servlet-initializer/pom.xml | 2 +- modules/swagger-jaxrs2/pom.xml | 2 +- modules/swagger-maven-plugin/pom.xml | 2 +- modules/swagger-models/pom.xml | 2 +- .../modules/swagger-annotations-jakarta/pom.xml | 2 +- .../modules/swagger-core-jakarta/pom.xml | 2 +- .../modules/swagger-integration-jakarta/pom.xml | 2 +- .../modules/swagger-jaxrs2-jakarta/pom.xml | 2 +- .../swagger-jaxrs2-servlet-initializer-jakarta/pom.xml | 2 +- .../swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml | 2 +- .../modules/swagger-maven-plugin-jakarta/pom.xml | 2 +- .../modules/swagger-models-jakarta/pom.xml | 2 +- modules/swagger-project-jakarta/pom.xml | 2 +- pom.xml | 2 +- 22 files changed, 23 insertions(+), 23 deletions(-) diff --git a/modules/swagger-annotations/pom.xml b/modules/swagger-annotations/pom.xml index 1168f1b9c0..139db4a64b 100644 --- a/modules/swagger-annotations/pom.xml +++ b/modules/swagger-annotations/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.17 + 2.2.18-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-core/pom.xml b/modules/swagger-core/pom.xml index 7d0e632540..4c56de9a6c 100644 --- a/modules/swagger-core/pom.xml +++ b/modules/swagger-core/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.17 + 2.2.18-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml index 546f7b3155..92467ee6c5 100644 --- a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml +++ b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.17 + 2.2.18-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-gradle-plugin/gradle.properties b/modules/swagger-gradle-plugin/gradle.properties index 130a5b8801..d7e1dd3462 100644 --- a/modules/swagger-gradle-plugin/gradle.properties +++ b/modules/swagger-gradle-plugin/gradle.properties @@ -1,2 +1,2 @@ -version=2.2.17 +version=2.2.18-SNAPSHOT jettyVersion=9.4.53.v20231009 diff --git a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java index b1bf4cdd7e..0a41880afd 100644 --- a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java +++ b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java @@ -16,7 +16,7 @@ public void apply(Project project) { config.defaultDependencies(new Action() { public void execute(DependencySet dependencies) { dependencies.add(project.getDependencies().create("org.apache.commons:commons-lang3:3.12.0")); - dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.17")); + dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.18-SNAPSHOT")); dependencies.add(project.getDependencies().create("javax.ws.rs:javax.ws.rs-api:2.1")); dependencies.add(project.getDependencies().create("javax.servlet:javax.servlet-api:3.1.0")); } diff --git a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java index 195f39de5b..bb594f9edc 100644 --- a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java +++ b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java @@ -81,7 +81,7 @@ public void testSwaggerResolveTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.17'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.18-SNAPSHOT'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + @@ -154,7 +154,7 @@ public void testSwaggerResolveWithOAS31OptionTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.17'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.18-SNAPSHOT'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + diff --git a/modules/swagger-integration/pom.xml b/modules/swagger-integration/pom.xml index 25a9a5686f..41848f5254 100644 --- a/modules/swagger-integration/pom.xml +++ b/modules/swagger-integration/pom.xml @@ -6,7 +6,7 @@ io.swagger.core.v3 swagger-project - 2.2.17 + 2.2.18-SNAPSHOT ../.. swagger-integration diff --git a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml index ca252df014..70a5fae4c8 100644 --- a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.17 + 2.2.18-SNAPSHOT ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2-servlet-initializer/pom.xml b/modules/swagger-jaxrs2-servlet-initializer/pom.xml index 4b9c029853..55b5952dbb 100644 --- a/modules/swagger-jaxrs2-servlet-initializer/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.17 + 2.2.18-SNAPSHOT ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2/pom.xml b/modules/swagger-jaxrs2/pom.xml index 0898e3f6e3..db777fa58b 100644 --- a/modules/swagger-jaxrs2/pom.xml +++ b/modules/swagger-jaxrs2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.17 + 2.2.18-SNAPSHOT ../../ 4.0.0 diff --git a/modules/swagger-maven-plugin/pom.xml b/modules/swagger-maven-plugin/pom.xml index 1a94297ad8..77eba772f9 100644 --- a/modules/swagger-maven-plugin/pom.xml +++ b/modules/swagger-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.17 + 2.2.18-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-models/pom.xml b/modules/swagger-models/pom.xml index 6d8abfc3c4..5cb913bdc1 100644 --- a/modules/swagger-models/pom.xml +++ b/modules/swagger-models/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.17 + 2.2.18-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml index 813b0932ec..ff97ed9041 100644 --- a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.17 + 2.2.18-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml index 0f46dd8e99..43958275f0 100644 --- a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.17 + 2.2.18-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml index a44069e715..76577dbf09 100644 --- a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.17 + 2.2.18-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml index a124e44c70..a583a4d6fe 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.17 + 2.2.18-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml index 8fedecad1a..0cb3085924 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.17 + 2.2.18-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml index 2e8d6e2660..d6bf8e45bf 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.17 + 2.2.18-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml index 9293ed88ed..69c6265782 100644 --- a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.17 + 2.2.18-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml index cca7456559..da5f9161e4 100644 --- a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.17 + 2.2.18-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/pom.xml b/modules/swagger-project-jakarta/pom.xml index 73ced062ab..726f1bd090 100644 --- a/modules/swagger-project-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/pom.xml @@ -6,7 +6,7 @@ pom swagger-project-jakarta swagger-project-jakarta - 2.2.17 + 2.2.18-SNAPSHOT https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git diff --git a/pom.xml b/pom.xml index 1cc5b4d177..c89e58d53e 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ pom swagger-project swagger-project - 2.2.17 + 2.2.18-SNAPSHOT https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git From 03c81437aef15a9b1aad0dc07c8e8dadc988d730 Mon Sep 17 00:00:00 2001 From: Francesco Tumanischvili Date: Fri, 13 Oct 2023 13:46:00 +0200 Subject: [PATCH 086/131] Update README.md versions list --- README.md | 123 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 64 insertions(+), 59 deletions(-) diff --git a/README.md b/README.md index 67a609df34..e1ef67b08f 100644 --- a/README.md +++ b/README.md @@ -31,65 +31,70 @@ Swagger core Version | Release Date | OpenAPI Spec compatibility | Notes | 2.2.12 | 2023-06-13 | 3.x | [tag v2.2.12](https://github.com/swagger-api/swagger-core/tree/v2.2.12) | Supported 2.2.11 | 2023-06-01 | 3.x | [tag v2.2.11](https://github.com/swagger-api/swagger-core/tree/v2.2.11) | Supported 2.2.10 | 2023-05-15 | 3.x | [tag v2.2.10](https://github.com/swagger-api/swagger-core/tree/v2.2.10) | Supported -2.2.9 | 2023-03-20 | 3.x | [tag v2.2.9](https://github.com/swagger-api/swagger-core/tree/v2.2.9) | Supported -2.2.8 | 2023-01-06 | 3.x | [tag v2.2.8](https://github.com/swagger-api/swagger-core/tree/v2.2.8) | Supported -2.2.7 | 2022-11-15 | 3.x | [tag v2.2.7](https://github.com/swagger-api/swagger-core/tree/v2.2.7) | Supported -2.2.6 | 2022-11-02 | 3.x | [tag v2.2.6](https://github.com/swagger-api/swagger-core/tree/v2.2.6) | Supported -2.2.5 | 2022-11-02 | 3.x | [tag v2.2.5](https://github.com/swagger-api/swagger-core/tree/v2.2.5) | Supported -2.2.4 | 2022-10-16 | 3.x | [tag v2.2.4](https://github.com/swagger-api/swagger-core/tree/v2.2.4) | Supported -2.2.3 | 2022-09-27 | 3.x | [tag v2.2.3](https://github.com/swagger-api/swagger-core/tree/v2.2.3) | Supported -2.2.2 | 2022-07-20 | 3.x | [tag v2.2.2](https://github.com/swagger-api/swagger-core/tree/v2.2.2) | Supported -2.2.1 | 2022-06-15 | 3.x | [tag v2.2.1](https://github.com/swagger-api/swagger-core/tree/v2.2.1) | Supported -2.2.0 | 2022-04-04 | 3.x | [tag v2.2.0](https://github.com/swagger-api/swagger-core/tree/v2.2.0) | Supported -2.1.13 | 2022-02-07 | 3.0 | [tag v2.1.13](https://github.com/swagger-api/swagger-core/tree/v2.1.13) | Supported -2.1.12 | 2021-12-23 | 3.0 | [tag v2.1.12](https://github.com/swagger-api/swagger-core/tree/v2.1.12) | Supported -2.1.11 | 2021-09-29 | 3.0 | [tag v2.1.11](https://github.com/swagger-api/swagger-core/tree/v2.1.11) | Supported** -2.1.10 | 2021-06-28 | 3.0 | [tag v2.1.10](https://github.com/swagger-api/swagger-core/tree/v2.1.10) | Supported -2.1.9 | 2021-04-20 | 3.0 | [tag v2.1.9](https://github.com/swagger-api/swagger-core/tree/v2.1.9) | Supported -2.1.8 | 2021-04-18 | 3.0 | [tag v2.1.8](https://github.com/swagger-api/swagger-core/tree/v2.1.8) | Supported -2.1.7 | 2021-02-18 | 3.0 | [tag v2.1.7](https://github.com/swagger-api/swagger-core/tree/v2.1.7) | Supported -2.1.6 | 2020-12-04 | 3.0 | [tag v2.1.6](https://github.com/swagger-api/swagger-core/tree/v2.1.6) | Supported -2.1.5 | 2020-10-01 | 3.0 | [tag v2.1.5](https://github.com/swagger-api/swagger-core/tree/v2.1.5) | Supported -2.1.4 | 2020-07-24 | 3.0 | [tag v2.1.4](https://github.com/swagger-api/swagger-core/tree/v2.1.4) | Supported -2.1.3 | 2020-06-27 | 3.0 | [tag v2.1.3](https://github.com/swagger-api/swagger-core/tree/v2.1.3) | Supported -2.1.2 | 2020-04-01 | 3.0 | [tag v2.1.2](https://github.com/swagger-api/swagger-core/tree/v2.1.2) | Supported -2.1.1 | 2020-01-02 | 3.0 | [tag v2.1.1](https://github.com/swagger-api/swagger-core/tree/v2.1.1) | Supported -2.1.0 | 2019-11-16 | 3.0 | [tag v2.1.0](https://github.com/swagger-api/swagger-core/tree/v2.1.0) | Supported -2.0.10 | 2019-10-11 | 3.0 | [tag v2.0.10](https://github.com/swagger-api/swagger-core/tree/v2.0.10) | Supported -2.0.9 | 2019-08-22 | 3.0 | [tag v2.0.9](https://github.com/swagger-api/swagger-core/tree/v2.0.9) | Supported -2.0.8 | 2019-04-24 | 3.0 | [tag v2.0.8](https://github.com/swagger-api/swagger-core/tree/v2.0.8) | Supported -2.0.7 | 2019-02-18 | 3.0 | [tag v2.0.7](https://github.com/swagger-api/swagger-core/tree/v2.0.7) | Supported -2.0.6 | 2018-11-27 | 3.0 | [tag v2.0.6](https://github.com/swagger-api/swagger-core/tree/v2.0.6) | Supported -2.0.5 | 2018-09-19 | 3.0 | [tag v2.0.5](https://github.com/swagger-api/swagger-core/tree/v2.0.5) | Supported -2.0.4 | 2018-09-05 | 3.0 | [tag v2.0.4](https://github.com/swagger-api/swagger-core/tree/v2.0.4) | Supported -2.0.3 | 2018-08-09 | 3.0 | [tag v2.0.3](https://github.com/swagger-api/swagger-core/tree/v2.0.3) | Supported -1.6.7 (**current stable**)| 2022-09-27 | 2.0 | [tag v1.6.7](https://github.com/swagger-api/swagger-core/tree/v1.6.7) | Supported -1.6.6 | 2022-04-04 | 2.0 | [tag v1.6.6](https://github.com/swagger-api/swagger-core/tree/v1.6.6) | Supported -1.6.5 | 2022-02-07 | 2.0 | [tag v1.6.5](https://github.com/swagger-api/swagger-core/tree/v1.6.5) | Supported -1.6.4 | 2021-12-23 | 2.0 | [tag v1.6.4](https://github.com/swagger-api/swagger-core/tree/v1.6.4) | Supported -1.6.3 | 2021-09-29 | 2.0 | [tag v1.6.3](https://github.com/swagger-api/swagger-core/tree/v1.6.3) | Supported -1.6.2 | 2020-07-01 | 2.0 | [tag v1.6.2](https://github.com/swagger-api/swagger-core/tree/v1.6.2) | Supported -1.6.1 | 2020-04-01 | 2.0 | [tag v1.6.1](https://github.com/swagger-api/swagger-core/tree/v1.6.1) | Supported -1.6.0 | 2019-11-16 | 2.0 | [tag v1.6.0](https://github.com/swagger-api/swagger-core/tree/v1.6.0) | Supported -1.5.24 | 2019-10-11 | 2.0 | [tag v1.5.24](https://github.com/swagger-api/swagger-core/tree/v1.5.24) | Supported -1.5.23 | 2019-08-22 | 2.0 | [tag v1.5.23](https://github.com/swagger-api/swagger-core/tree/v1.5.23) | Supported -1.5.22 | 2019-02-18 | 2.0 | [tag v1.5.22](https://github.com/swagger-api/swagger-core/tree/v1.5.22) | Supported -1.5.21 | 2018-08-09 | 2.0 | [tag v1.5.21](https://github.com/swagger-api/swagger-core/tree/v1.5.21) | Supported -1.5.20 | 2018-05-23 | 2.0 | [tag v1.5.20](https://github.com/swagger-api/swagger-core/tree/v1.5.20) | Supported -2.0.2 | 2018-05-23 | 3.0 | [tag v2.0.2](https://github.com/swagger-api/swagger-core/tree/v2.0.2) | Supported -2.0.1 | 2018-04-16 | 3.0 | [tag v2.0.1](https://github.com/swagger-api/swagger-core/tree/v2.0.1) | Supported -1.5.19 | 2018-04-16 | 2.0 | [tag v1.5.19](https://github.com/swagger-api/swagger-core/tree/v1.5.19) | Supported -2.0.0 | 2018-03-20 | 3.0 | [tag v2.0.0](https://github.com/swagger-api/swagger-core/tree/v2.0.0) | Supported -2.0.0-rc4 | 2018-01-22 | 3.0 | [tag v2.0.0-rc4](https://github.com/swagger-api/swagger-core/tree/v2.0.0-rc4) | Supported -2.0.0-rc3 | 2017-11-21 | 3.0 | [tag v2.0.0-rc3](https://github.com/swagger-api/swagger-core/tree/v2.0.0-rc3) | Supported -2.0.0-rc2 | 2017-09-29 | 3.0 | [tag v2.0.0-rc2](https://github.com/swagger-api/swagger-core/tree/v2.0.0-rc2) | Supported -2.0.0-rc1 | 2017-08-17 | 3.0 | [tag v2.0.0-rc1](https://github.com/swagger-api/swagger-core/tree/v2.0.0-rc1) | Supported -1.5.18 | 2018-01-22 | 2.0 | [tag v1.5.18](https://github.com/swagger-api/swagger-core/tree/v1.5.18) | Supported -1.5.17 | 2017-11-21 | 2.0 | [tag v1.5.17](https://github.com/swagger-api/swagger-core/tree/v1.5.17) | Supported -1.5.16 | 2017-07-15 | 2.0 | [tag v1.5.16](https://github.com/swagger-api/swagger-core/tree/v1.5.16) | Supported -1.3.12 | 2014-12-23 | 1.2 | [tag v1.3.12](https://github.com/swagger-api/swagger-core/tree/v1.3.12) | Supported -1.2.4 | 2013-06-19 | 1.1 | [tag swagger-project_2.10.0-1.2.4](https://github.com/swagger-api/swagger-core/tree/swagger-project_2.10.0-1.2.4) | Deprecated -1.0.0 | 2011-10-16 | 1.0 | [tag v1.0](https://github.com/swagger-api/swagger-core/tree/v1.0) | Deprecated +2.2.9 | 2023-03-20 | 3.x | [tag v2.2.9](https://github.com/swagger-api/swagger-core/tree/v2.2.9) | Supported +2.2.8 | 2023-01-06 | 3.x | [tag v2.2.8](https://github.com/swagger-api/swagger-core/tree/v2.2.8) | Supported +2.2.7 | 2022-11-15 | 3.0 | [tag v2.2.7](https://github.com/swagger-api/swagger-core/tree/v2.2.7) | Supported +2.2.6 | 2022-11-02 | 3.0 | [tag v2.2.6](https://github.com/swagger-api/swagger-core/tree/v2.2.6) | Supported +2.2.5 | 2022-11-02 | 3.0 | [tag v2.2.5](https://github.com/swagger-api/swagger-core/tree/v2.2.5) | Supported +2.2.4 | 2022-10-16 | 3.0 | [tag v2.2.4](https://github.com/swagger-api/swagger-core/tree/v2.2.4) | Supported +2.2.3 | 2022-09-27 | 3.0 | [tag v2.2.3](https://github.com/swagger-api/swagger-core/tree/v2.2.3) | Supported +2.2.2 | 2022-07-20 | 3.0 | [tag v2.2.2](https://github.com/swagger-api/swagger-core/tree/v2.2.2) | Supported +2.2.1 | 2022-06-15 | 3.0 | [tag v2.2.1](https://github.com/swagger-api/swagger-core/tree/v2.2.1) | Supported +2.2.0 | 2022-04-04 | 3.0 | [tag v2.2.0](https://github.com/swagger-api/swagger-core/tree/v2.2.0) | Supported +2.1.13 | 2022-02-07 | 3.0 | [tag v2.1.13](https://github.com/swagger-api/swagger-core/tree/v2.1.13) | Supported +2.1.12 | 2021-12-23 | 3.0 | [tag v2.1.12](https://github.com/swagger-api/swagger-core/tree/v2.1.12) | Supported +2.1.11 | 2021-09-29 | 3.0 | [tag v2.1.11](https://github.com/swagger-api/swagger-core/tree/v2.1.11) | Supported +2.1.10 | 2021-06-28 | 3.0 | [tag v2.1.10](https://github.com/swagger-api/swagger-core/tree/v2.1.10) | Supported +2.1.9 | 2021-04-20 | 3.0 | [tag v2.1.9](https://github.com/swagger-api/swagger-core/tree/v2.1.9) | Supported +2.1.8 | 2021-04-18 | 3.0 | [tag v2.1.8](https://github.com/swagger-api/swagger-core/tree/v2.1.8) | Supported +2.1.7 | 2021-02-18 | 3.0 | [tag v2.1.7](https://github.com/swagger-api/swagger-core/tree/v2.1.7) | Supported +2.1.6 | 2020-12-04 | 3.0 | [tag v2.1.6](https://github.com/swagger-api/swagger-core/tree/v2.1.6) | Supported +2.1.5 | 2020-10-01 | 3.0 | [tag v2.1.5](https://github.com/swagger-api/swagger-core/tree/v2.1.5) | Supported +2.1.4 | 2020-07-24 | 3.0 | [tag v2.1.4](https://github.com/swagger-api/swagger-core/tree/v2.1.4) | Supported +2.1.3 | 2020-06-27 | 3.0 | [tag v2.1.3](https://github.com/swagger-api/swagger-core/tree/v2.1.3) | Supported +2.1.2 | 2020-04-01 | 3.0 | [tag v2.1.2](https://github.com/swagger-api/swagger-core/tree/v2.1.2) | Supported +2.1.1 | 2020-01-02 | 3.0 | [tag v2.1.1](https://github.com/swagger-api/swagger-core/tree/v2.1.1) | Supported +2.1.0 | 2019-11-16 | 3.0 | [tag v2.1.0](https://github.com/swagger-api/swagger-core/tree/v2.1.0) | Supported +2.0.10 | 2019-10-11 | 3.0 | [tag v2.0.10](https://github.com/swagger-api/swagger-core/tree/v2.0.10) | Supported +2.0.9 | 2019-08-22 | 3.0 | [tag v2.0.9](https://github.com/swagger-api/swagger-core/tree/v2.0.9) | Supported +2.0.8 | 2019-04-24 | 3.0 | [tag v2.0.8](https://github.com/swagger-api/swagger-core/tree/v2.0.8) | Supported +2.0.7 | 2019-02-18 | 3.0 | [tag v2.0.7](https://github.com/swagger-api/swagger-core/tree/v2.0.7) | Supported +2.0.6 | 2018-11-27 | 3.0 | [tag v2.0.6](https://github.com/swagger-api/swagger-core/tree/v2.0.6) | Supported +2.0.5 | 2018-09-19 | 3.0 | [tag v2.0.5](https://github.com/swagger-api/swagger-core/tree/v2.0.5) | Supported +2.0.4 | 2018-09-05 | 3.0 | [tag v2.0.4](https://github.com/swagger-api/swagger-core/tree/v2.0.4) | Supported +2.0.3 | 2018-08-09 | 3.0 | [tag v2.0.3](https://github.com/swagger-api/swagger-core/tree/v2.0.3) | Supported +1.6.12 (**current stable**)| 2023-10-14 | 2.0 | [tag v1.6.12](https://github.com/swagger-api/swagger-core/tree/v1.6.12) | Supported +1.6.11 | 2023-05-15 | 2.0 | [tag v1.6.11](https://github.com/swagger-api/swagger-core/tree/v1.6.11) | Supported +1.6.10 | 2023-03-21 | 2.0 | [tag v1.6.10](https://github.com/swagger-api/swagger-core/tree/v1.6.10) | Supported +1.6.9 | 2022-11-15 | 2.0 | [tag v1.6.9](https://github.com/swagger-api/swagger-core/tree/v1.6.9) | Supported +1.6.8 | 2022-10-16 | 2.0 | [tag v1.6.8](https://github.com/swagger-api/swagger-core/tree/v1.6.8) | Supported +1.6.7 | 2022-09-27 | 2.0 | [tag v1.6.7](https://github.com/swagger-api/swagger-core/tree/v1.6.7) | Supported +1.6.6 | 2022-04-04 | 2.0 | [tag v1.6.6](https://github.com/swagger-api/swagger-core/tree/v1.6.6) | Supported +1.6.5 | 2022-02-07 | 2.0 | [tag v1.6.5](https://github.com/swagger-api/swagger-core/tree/v1.6.5) | Supported +1.6.4 | 2021-12-23 | 2.0 | [tag v1.6.4](https://github.com/swagger-api/swagger-core/tree/v1.6.4) | Supported +1.6.3 | 2021-09-29 | 2.0 | [tag v1.6.3](https://github.com/swagger-api/swagger-core/tree/v1.6.3) | Supported +1.6.2 | 2020-07-01 | 2.0 | [tag v1.6.2](https://github.com/swagger-api/swagger-core/tree/v1.6.2) | Supported +1.6.1 | 2020-04-01 | 2.0 | [tag v1.6.1](https://github.com/swagger-api/swagger-core/tree/v1.6.1) | Supported +1.6.0 | 2019-11-16 | 2.0 | [tag v1.6.0](https://github.com/swagger-api/swagger-core/tree/v1.6.0) | Supported +1.5.24 | 2019-10-11 | 2.0 | [tag v1.5.24](https://github.com/swagger-api/swagger-core/tree/v1.5.24) | Supported +1.5.23 | 2019-08-22 | 2.0 | [tag v1.5.23](https://github.com/swagger-api/swagger-core/tree/v1.5.23) | Supported +1.5.22 | 2019-02-18 | 2.0 | [tag v1.5.22](https://github.com/swagger-api/swagger-core/tree/v1.5.22) | Supported +1.5.21 | 2018-08-09 | 2.0 | [tag v1.5.21](https://github.com/swagger-api/swagger-core/tree/v1.5.21) | Supported +1.5.20 | 2018-05-23 | 2.0 | [tag v1.5.20](https://github.com/swagger-api/swagger-core/tree/v1.5.20) | Supported +2.0.2 | 2018-05-23 | 3.0 | [tag v2.0.2](https://github.com/swagger-api/swagger-core/tree/v2.0.2) | Supported +2.0.1 | 2018-04-16 | 3.0 | [tag v2.0.1](https://github.com/swagger-api/swagger-core/tree/v2.0.1) | Supported +1.5.19 | 2018-04-16 | 2.0 | [tag v1.5.19](https://github.com/swagger-api/swagger-core/tree/v1.5.19) | Supported +2.0.0 | 2018-03-20 | 3.0 | [tag v2.0.0](https://github.com/swagger-api/swagger-core/tree/v2.0.0) | Supported +2.0.0-rc4 | 2018-01-22 | 3.0 | [tag v2.0.0-rc4](https://github.com/swagger-api/swagger-core/tree/v2.0.0-rc4) | Supported +2.0.0-rc3 | 2017-11-21 | 3.0 | [tag v2.0.0-rc3](https://github.com/swagger-api/swagger-core/tree/v2.0.0-rc3) | Supported +2.0.0-rc2 | 2017-09-29 | 3.0 | [tag v2.0.0-rc2](https://github.com/swagger-api/swagger-core/tree/v2.0.0-rc2) | Supported +2.0.0-rc1 | 2017-08-17 | 3.0 | [tag v2.0.0-rc1](https://github.com/swagger-api/swagger-core/tree/v2.0.0-rc1) | Supported +1.5.18 | 2018-01-22 | 2.0 | [tag v1.5.18](https://github.com/swagger-api/swagger-core/tree/v1.5.18) | Supported +1.5.17 | 2017-11-21 | 2.0 | [tag v1.5.17](https://github.com/swagger-api/swagger-core/tree/v1.5.17) | Supported +1.5.16 | 2017-07-15 | 2.0 | [tag v1.5.16](https://github.com/swagger-api/swagger-core/tree/v1.5.16) | Supported +1.3.12 | 2014-12-23 | 1.2 | [tag v1.3.12](https://github.com/swagger-api/swagger-core/tree/v1.3.12) | Supported +1.2.4 | 2013-06-19 | 1.1 | [tag swagger-project_2.10.0-1.2.4](https://github.com/swagger-api/swagger-core/tree/swagger-project_2.10.0-1.2.4) | Deprecated +1.0.0 | 2011-10-16 | 1.0 | [tag v1.0](https://github.com/swagger-api/swagger-core/tree/v1.0) | Deprecated ### Change History From 006b1ae68e466329f4db4e81326b6b493bd6fd4b Mon Sep 17 00:00:00 2001 From: Timon Back Date: Fri, 6 Oct 2023 18:43:02 +0200 Subject: [PATCH 087/131] feat: add getUseFqn to TypeNameResolver Co-authored-by: sam0r040 <93372330+sam0r040@users.noreply.github.com> --- .../java/io/swagger/v3/core/jackson/TypeNameResolver.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/jackson/TypeNameResolver.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/jackson/TypeNameResolver.java index a18f362aa0..808a6e94fb 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/jackson/TypeNameResolver.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/jackson/TypeNameResolver.java @@ -22,6 +22,10 @@ public class TypeNameResolver { protected TypeNameResolver() { } + public boolean getUseFqn() { + return this.useFqn; + } + public void setUseFqn(boolean useFqn) { this.useFqn = useFqn; } From 6d3602c55009f8d3fe0bca875c11e534741c173d Mon Sep 17 00:00:00 2001 From: frantuma Date: Tue, 24 Oct 2023 15:00:26 +0200 Subject: [PATCH 088/131] refs #4462 - exclude javax.validation annotations from container values processing --- .../java/io/swagger/v3/core/jackson/ModelResolver.java | 2 +- .../converting/override/ModelPropertyOverrideTest.java | 8 +++++++- .../v3/core/resolving/resources/BidimensionalArray.java | 4 ++++ 3 files changed, 12 insertions(+), 2 deletions(-) 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 ac92f91684..9fbaab06f7 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 @@ -432,7 +432,7 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context if (annotatedType.getCtxAnnotations() != null) { strippedCtxAnnotations.addAll(Arrays.stream( annotatedType.getCtxAnnotations()).filter( - ass -> !ass.annotationType().getName().startsWith("io.swagger") + ass -> !ass.annotationType().getName().startsWith("io.swagger") && !ass.annotationType().getName().startsWith("javax.validation.constraints") ).collect(Collectors.toList())); } diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/converting/override/ModelPropertyOverrideTest.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/converting/override/ModelPropertyOverrideTest.java index 638f51d0b6..a4d992c189 100644 --- a/modules/swagger-core/src/test/java/io/swagger/v3/core/converting/override/ModelPropertyOverrideTest.java +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/converting/override/ModelPropertyOverrideTest.java @@ -93,7 +93,13 @@ public void customAnnotationTest() throws Exception { " maxItems: 2\n" + " type: array\n" + " items:\n" + - " type: string\n"; + " type: string\n" + + " sized:\n" + + " maxItems: 2\n" + + " minItems: 0\n" + + " type: array\n" + + " items:\n" + + " type: string\n"; SerializationMatchers.assertEqualsToYaml(model, expected); } } diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/resources/BidimensionalArray.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/resources/BidimensionalArray.java index ccb18c8c8f..8f95134f8c 100644 --- a/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/resources/BidimensionalArray.java +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/resources/BidimensionalArray.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import io.swagger.v3.oas.annotations.media.ArraySchema; +import javax.validation.constraints.Size; import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -23,6 +24,9 @@ public static interface Foo extends List { } + @Size(max = 2) + public List sized; + @Retention(RetentionPolicy.RUNTIME) @Inherited public static @interface MySizeAnnotation { From a4cec9b4c637e846c01de366fbc9c6d635af4f27 Mon Sep 17 00:00:00 2001 From: frantuma Date: Wed, 25 Oct 2023 15:08:28 +0200 Subject: [PATCH 089/131] refs #4483 - fix NullPointer for @ApiResponse missing description --- .../java/io/swagger/v3/jaxrs2/Reader.java | 4 +- .../java/io/swagger/v3/jaxrs2/ReaderTest.java | 82 +++++++++++++++++++ .../jaxrs2/resources/Ticket4483Resource.java | 71 ++++++++++++++++ 3 files changed, 155 insertions(+), 2 deletions(-) create mode 100644 modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/Ticket4483Resource.java diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java index 6290ee854c..6b92eb7c2b 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java @@ -1200,7 +1200,7 @@ protected Operation parseMethod( Content content = resolveEmptyContent(classProduces, methodProduces); ApiResponse apiResponseObject = new ApiResponse().description(DEFAULT_DESCRIPTION).content(content); - operation.setResponses(new ApiResponses()._default(apiResponseObject)); + operation.setResponses(new ApiResponses().addApiResponse(defaultResponseKey, apiResponseObject)); } if (returnTypeSchema != null) { resolveResponseSchemaFromReturnType(operation, classResponses, returnTypeSchema, classProduces, methodProduces); @@ -1296,8 +1296,8 @@ protected void resolveResponseSchemaFromReturnType( } opResponse.content(content); } + opResponse.getContent().putAll(reresolvedMediaTypes); } - opResponse.getContent().putAll(reresolvedMediaTypes); } } } diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java index 35278fb899..0f32a4dd30 100644 --- a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java @@ -80,6 +80,7 @@ import io.swagger.v3.jaxrs2.resources.Ticket3731Resource; import io.swagger.v3.jaxrs2.resources.Ticket4412Resource; import io.swagger.v3.jaxrs2.resources.Ticket4446Resource; +import io.swagger.v3.jaxrs2.resources.Ticket4483Resource; import io.swagger.v3.jaxrs2.resources.UploadResource; import io.swagger.v3.jaxrs2.resources.UrlEncodedResourceWithEncodings; import io.swagger.v3.jaxrs2.resources.UserAnnotationResource; @@ -4061,4 +4062,85 @@ public void testParameterMaximumValue() { " '*/*': {}\n"; SerializationMatchers.assertEqualsToYaml31(openAPI, yaml); } + + @Test + public void test4483Response() { + Reader reader = new Reader(new OpenAPI()); + + OpenAPI openAPI = reader.read(Ticket4483Resource.class); + String yaml = "openapi: 3.0.1\n" + + "tags:\n" + + "- name: Dummy\n" + + " description: Dummy resource for testing setup\n" + + "paths:\n" + + " /test:\n" + + " get:\n" + + " tags:\n" + + " - Dummy\n" + + " description: Dummy GET\n" + + " operationId: dummy\n" + + " responses:\n" + + " \"401\":\n" + + " description: Authentication is required\n" + + " content:\n" + + " application/json:\n" + + " schema:\n" + + " type: array\n" + + " items:\n" + + " $ref: '#/components/schemas/LocalizedError'\n" + + " \"200\":\n" + + " description: test\n" + + " content:\n" + + " application/json:\n" + + " schema:\n" + + " type: object\n" + + " additionalProperties:\n" + + " type: boolean\n" + + " /test/opresp:\n" + + " get:\n" + + " tags:\n" + + " - Dummy\n" + + " operationId: dummyopresp\n" + + " responses:\n" + + " \"401\":\n" + + " description: Authentication is required\n" + + " content:\n" + + " application/json:\n" + + " schema:\n" + + " type: array\n" + + " items:\n" + + " $ref: '#/components/schemas/LocalizedError'\n" + + " \"200\":\n" + + " description: Dummy GET opresp\n" + + " content:\n" + + " application/json:\n" + + " schema:\n" + + " type: object\n" + + " additionalProperties:\n" + + " type: boolean\n" + + " /test/oprespnodesc:\n" + + " get:\n" + + " tags:\n" + + " - Dummy\n" + + " operationId: oprespnodesc\n" + + " responses:\n" + + " \"401\":\n" + + " description: Authentication is required\n" + + " content:\n" + + " application/json:\n" + + " schema:\n" + + " type: array\n" + + " items:\n" + + " $ref: '#/components/schemas/LocalizedError'\n" + + "components:\n" + + " schemas:\n" + + " LocalizedError:\n" + + " type: object\n" + + " properties:\n" + + " code:\n" + + " type: string\n" + + " message:\n" + + " type: string\n"; + SerializationMatchers.assertEqualsToYaml(openAPI, yaml); + } } diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/Ticket4483Resource.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/Ticket4483Resource.java new file mode 100644 index 0000000000..4d42b037ff --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/Ticket4483Resource.java @@ -0,0 +1,71 @@ +package io.swagger.v3.jaxrs2.resources; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; + +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; +import java.util.Map; + +/* + + */ +@Tag( + name = "Dummy", + description = "Dummy resource for testing setup" +) +@Path("test") +@Consumes({MediaType.APPLICATION_JSON}) +@Produces({MediaType.APPLICATION_JSON}) +@ApiResponses({ + @ApiResponse(responseCode = "401", description = "Authentication is required", content = @Content(array = @ArraySchema(schema = @Schema(implementation = Ticket4483Resource.LocalizedError.class)))) +}) +public class Ticket4483Resource { + @GET + @Operation( + description = "Dummy GET" + ) + @ApiResponse(responseCode = "200", description = "test", useReturnTypeSchema = true) + public Map dummy() { + Map map = new java.util.HashMap(); + map.put("success", Boolean.TRUE); + return map; + } + + + + @Path("/opresp") + @GET + @Operation( + responses = { + @ApiResponse(responseCode = "200", description = "Dummy GET opresp", useReturnTypeSchema = true)}) + public Map dummyopresp() { + Map map = new java.util.HashMap(); + map.put("success", Boolean.TRUE); + return map; + } + + @Path("/oprespnodesc") + @GET + @Operation( + responses = { + @ApiResponse(responseCode = "200", useReturnTypeSchema = true)}) + public Map oprespnodesc() { + Map map = new java.util.HashMap(); + map.put("success", Boolean.TRUE); + return map; + } + + public static class LocalizedError { + public String code; + public String message; + } +} From 74d826dee89e8af0a87e664cd4e5485141877047 Mon Sep 17 00:00:00 2001 From: frantuma Date: Wed, 25 Oct 2023 14:10:41 +0000 Subject: [PATCH 090/131] prepare release 2.2.18 --- README.md | 5 +++-- modules/swagger-annotations/pom.xml | 2 +- modules/swagger-core/pom.xml | 2 +- .../swagger-eclipse-transformer-maven-plugin/pom.xml | 2 +- modules/swagger-gradle-plugin/README.md | 4 ++-- modules/swagger-gradle-plugin/gradle.properties | 2 +- .../io/swagger/v3/plugins/gradle/SwaggerPlugin.java | 2 +- .../v3/plugins/gradle/SwaggerResolveTest.java | 4 ++-- modules/swagger-integration/pom.xml | 2 +- .../swagger-jaxrs2-servlet-initializer-v2/pom.xml | 2 +- modules/swagger-jaxrs2-servlet-initializer/pom.xml | 2 +- modules/swagger-jaxrs2/pom.xml | 2 +- modules/swagger-maven-plugin/README.md | 12 ++++++------ modules/swagger-maven-plugin/pom.xml | 2 +- modules/swagger-models/pom.xml | 2 +- .../modules/swagger-annotations-jakarta/pom.xml | 2 +- .../modules/swagger-core-jakarta/pom.xml | 2 +- .../modules/swagger-integration-jakarta/pom.xml | 2 +- .../modules/swagger-jaxrs2-jakarta/pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../modules/swagger-maven-plugin-jakarta/pom.xml | 2 +- .../modules/swagger-models-jakarta/pom.xml | 2 +- modules/swagger-project-jakarta/pom.xml | 2 +- pom.xml | 2 +- 25 files changed, 34 insertions(+), 33 deletions(-) diff --git a/README.md b/README.md index e1ef67b08f..6b2cdd490b 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,8 @@ The OpenAPI Specification has undergone several revisions since initial creation Swagger core Version | Release Date | OpenAPI Spec compatibility | Notes | Status ------------------------- | ------------ | -------------------------- | ----- | ---- -2.2.17 (**current stable**)| 2023-10-12 | 3.x | [tag v2.2.17](https://github.com/swagger-api/swagger-core/tree/v2.2.17) | Supported +2.2.18 (**current stable**)| 2023-10-25 | 3.x | [tag v2.2.18](https://github.com/swagger-api/swagger-core/tree/v2.2.18) | Supported +2.2.17 | 2023-10-12 | 3.x | [tag v2.2.17](https://github.com/swagger-api/swagger-core/tree/v2.2.17) | Supported 2.2.16 | 2023-09-18 | 3.x | [tag v2.2.16](https://github.com/swagger-api/swagger-core/tree/v2.2.16) | Supported 2.2.15 | 2023-07-08 | 3.x | [tag v2.2.15](https://github.com/swagger-api/swagger-core/tree/v2.2.15) | Supported 2.2.14 | 2023-06-26 | 3.x | [tag v2.2.14](https://github.com/swagger-api/swagger-core/tree/v2.2.14) | Supported @@ -108,7 +109,7 @@ You need the following installed and available in your $PATH: * Jackson 2.4.5 or greater -### To build from source (currently 2.2.18-SNAPSHOT) +### To build from source (currently 2.2.19-SNAPSHOT) ``` # first time building locally mvn -N diff --git a/modules/swagger-annotations/pom.xml b/modules/swagger-annotations/pom.xml index 139db4a64b..b88e4f8f94 100644 --- a/modules/swagger-annotations/pom.xml +++ b/modules/swagger-annotations/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.18-SNAPSHOT + 2.2.18 ../.. 4.0.0 diff --git a/modules/swagger-core/pom.xml b/modules/swagger-core/pom.xml index 4c56de9a6c..6c17adf2c1 100644 --- a/modules/swagger-core/pom.xml +++ b/modules/swagger-core/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.18-SNAPSHOT + 2.2.18 ../.. 4.0.0 diff --git a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml index 92467ee6c5..65c63653ad 100644 --- a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml +++ b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.18-SNAPSHOT + 2.2.18 ../.. 4.0.0 diff --git a/modules/swagger-gradle-plugin/README.md b/modules/swagger-gradle-plugin/README.md index b8e9a74540..0a84ded72f 100644 --- a/modules/swagger-gradle-plugin/README.md +++ b/modules/swagger-gradle-plugin/README.md @@ -26,7 +26,7 @@ Alternatively provide as value a classpath with the following dependencies (repl ``` plugins { - id "io.swagger.core.v3.swagger-gradle-plugin" version "2.2.17" + id "io.swagger.core.v3.swagger-gradle-plugin" version "2.2.18" } ``` ### Gradle 1.x and 2.0 @@ -43,7 +43,7 @@ buildscript { } } dependencies { - classpath "io.swagger.core.v3:swagger-gradle-plugin:2.2.17" + classpath "io.swagger.core.v3:swagger-gradle-plugin:2.2.18" } } diff --git a/modules/swagger-gradle-plugin/gradle.properties b/modules/swagger-gradle-plugin/gradle.properties index d7e1dd3462..73310b1084 100644 --- a/modules/swagger-gradle-plugin/gradle.properties +++ b/modules/swagger-gradle-plugin/gradle.properties @@ -1,2 +1,2 @@ -version=2.2.18-SNAPSHOT +version=2.2.18 jettyVersion=9.4.53.v20231009 diff --git a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java index 0a41880afd..a4c5d1f52c 100644 --- a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java +++ b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java @@ -16,7 +16,7 @@ public void apply(Project project) { config.defaultDependencies(new Action() { public void execute(DependencySet dependencies) { dependencies.add(project.getDependencies().create("org.apache.commons:commons-lang3:3.12.0")); - dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.18-SNAPSHOT")); + dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.18")); dependencies.add(project.getDependencies().create("javax.ws.rs:javax.ws.rs-api:2.1")); dependencies.add(project.getDependencies().create("javax.servlet:javax.servlet-api:3.1.0")); } diff --git a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java index bb594f9edc..418e46e2c0 100644 --- a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java +++ b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java @@ -81,7 +81,7 @@ public void testSwaggerResolveTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.18-SNAPSHOT'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.18'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + @@ -154,7 +154,7 @@ public void testSwaggerResolveWithOAS31OptionTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.18-SNAPSHOT'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.18'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + diff --git a/modules/swagger-integration/pom.xml b/modules/swagger-integration/pom.xml index 41848f5254..61e2ebac49 100644 --- a/modules/swagger-integration/pom.xml +++ b/modules/swagger-integration/pom.xml @@ -6,7 +6,7 @@ io.swagger.core.v3 swagger-project - 2.2.18-SNAPSHOT + 2.2.18 ../.. swagger-integration diff --git a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml index 70a5fae4c8..37c5ab3fe9 100644 --- a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.18-SNAPSHOT + 2.2.18 ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2-servlet-initializer/pom.xml b/modules/swagger-jaxrs2-servlet-initializer/pom.xml index 55b5952dbb..7b32eba22a 100644 --- a/modules/swagger-jaxrs2-servlet-initializer/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.18-SNAPSHOT + 2.2.18 ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2/pom.xml b/modules/swagger-jaxrs2/pom.xml index db777fa58b..c0bc2181d4 100644 --- a/modules/swagger-jaxrs2/pom.xml +++ b/modules/swagger-jaxrs2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.18-SNAPSHOT + 2.2.18 ../../ 4.0.0 diff --git a/modules/swagger-maven-plugin/README.md b/modules/swagger-maven-plugin/README.md index 09ed0b00fd..f852a7d0ce 100644 --- a/modules/swagger-maven-plugin/README.md +++ b/modules/swagger-maven-plugin/README.md @@ -22,7 +22,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin - 2.2.17 + 2.2.18 openapi ${project.build.directory}/generatedtest @@ -47,7 +47,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-jaxrs2 - 2.2.17 + 2.2.18 @@ -73,7 +73,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin-jakarta - 2.2.17 + 2.2.18 openapi ${project.build.directory}/generatedtest @@ -98,7 +98,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-jaxrs2-jakarta - 2.2.17 + 2.2.18 @@ -126,7 +126,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin - 2.2.17 + 2.2.18 openapi ${project.build.directory}/generatedtest @@ -155,7 +155,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin-jakarta - 2.2.17 + 2.2.18 openapi ${project.build.directory}/generatedtest diff --git a/modules/swagger-maven-plugin/pom.xml b/modules/swagger-maven-plugin/pom.xml index 77eba772f9..6def012011 100644 --- a/modules/swagger-maven-plugin/pom.xml +++ b/modules/swagger-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.18-SNAPSHOT + 2.2.18 ../.. 4.0.0 diff --git a/modules/swagger-models/pom.xml b/modules/swagger-models/pom.xml index 5cb913bdc1..73c2e975e6 100644 --- a/modules/swagger-models/pom.xml +++ b/modules/swagger-models/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.18-SNAPSHOT + 2.2.18 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml index ff97ed9041..e47cafcc7c 100644 --- a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.18-SNAPSHOT + 2.2.18 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml index 43958275f0..e8ccabca35 100644 --- a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.18-SNAPSHOT + 2.2.18 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml index 76577dbf09..e2d71f05c2 100644 --- a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.18-SNAPSHOT + 2.2.18 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml index a583a4d6fe..f687bb56b9 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.18-SNAPSHOT + 2.2.18 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml index 0cb3085924..98dc6f811f 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.18-SNAPSHOT + 2.2.18 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml index d6bf8e45bf..5c96d90652 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.18-SNAPSHOT + 2.2.18 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml index 69c6265782..9eaad7daa4 100644 --- a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.18-SNAPSHOT + 2.2.18 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml index da5f9161e4..a55adbb577 100644 --- a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.18-SNAPSHOT + 2.2.18 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/pom.xml b/modules/swagger-project-jakarta/pom.xml index 726f1bd090..8d15a1a664 100644 --- a/modules/swagger-project-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/pom.xml @@ -6,7 +6,7 @@ pom swagger-project-jakarta swagger-project-jakarta - 2.2.18-SNAPSHOT + 2.2.18 https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git diff --git a/pom.xml b/pom.xml index c89e58d53e..cca1f9f467 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ pom swagger-project swagger-project - 2.2.18-SNAPSHOT + 2.2.18 https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git From 707be72b3a7f2166e64b9dbe3cd9d0df5ff82f33 Mon Sep 17 00:00:00 2001 From: frantuma Date: Tue, 7 Nov 2023 18:33:32 +0100 Subject: [PATCH 091/131] add deps update CI --- .github/dependabot.yml | 18 ++++++++++++++++++ .github/workflows/dependency-review.yml | 16 ++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 .github/dependabot.yml create mode 100644 .github/workflows/dependency-review.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000000..bf50a63f91 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,18 @@ +version: 2 +updates: + - package-ecosystem: "maven" + target-branch: "master" + directory: "/" + schedule: + interval: "daily" + ignore: + - dependency-name: "*" + update-types: ["version-update:semver-major"] + - package-ecosystem: "maven" + target-branch: "1.5" + directory: "/" + schedule: + interval: "daily" + ignore: + - dependency-name: "*" + update-types: ["version-update:semver-major"] \ No newline at end of file diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml new file mode 100644 index 0000000000..f67f5a42c2 --- /dev/null +++ b/.github/workflows/dependency-review.yml @@ -0,0 +1,16 @@ +name: 'Dependency Review' +on: [pull_request] + +permissions: + contents: read + +jobs: + dependency-review: + runs-on: ubuntu-latest + steps: + - name: 'Checkout Repository' + uses: actions/checkout@v4 + - name: Dependency Review + uses: actions/dependency-review-action@v3 + with: + fail-on-severity: high From de1fb4f6a92dd0c8007d1b7dd1e2f71aa49271b6 Mon Sep 17 00:00:00 2001 From: frantuma Date: Wed, 25 Oct 2023 14:49:05 +0000 Subject: [PATCH 092/131] bump snapshot 2.2.19-SNAPSHOT --- modules/swagger-annotations/pom.xml | 2 +- modules/swagger-core/pom.xml | 2 +- modules/swagger-eclipse-transformer-maven-plugin/pom.xml | 2 +- modules/swagger-gradle-plugin/gradle.properties | 2 +- .../main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java | 2 +- .../java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java | 4 ++-- modules/swagger-integration/pom.xml | 2 +- modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml | 2 +- modules/swagger-jaxrs2-servlet-initializer/pom.xml | 2 +- modules/swagger-jaxrs2/pom.xml | 2 +- modules/swagger-maven-plugin/pom.xml | 2 +- modules/swagger-models/pom.xml | 2 +- .../modules/swagger-annotations-jakarta/pom.xml | 2 +- .../modules/swagger-core-jakarta/pom.xml | 2 +- .../modules/swagger-integration-jakarta/pom.xml | 2 +- .../modules/swagger-jaxrs2-jakarta/pom.xml | 2 +- .../swagger-jaxrs2-servlet-initializer-jakarta/pom.xml | 2 +- .../swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml | 2 +- .../modules/swagger-maven-plugin-jakarta/pom.xml | 2 +- .../modules/swagger-models-jakarta/pom.xml | 2 +- modules/swagger-project-jakarta/pom.xml | 2 +- pom.xml | 2 +- 22 files changed, 23 insertions(+), 23 deletions(-) diff --git a/modules/swagger-annotations/pom.xml b/modules/swagger-annotations/pom.xml index b88e4f8f94..aed44b7142 100644 --- a/modules/swagger-annotations/pom.xml +++ b/modules/swagger-annotations/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.18 + 2.2.19-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-core/pom.xml b/modules/swagger-core/pom.xml index 6c17adf2c1..a6a34f494e 100644 --- a/modules/swagger-core/pom.xml +++ b/modules/swagger-core/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.18 + 2.2.19-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml index 65c63653ad..b123355fcc 100644 --- a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml +++ b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.18 + 2.2.19-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-gradle-plugin/gradle.properties b/modules/swagger-gradle-plugin/gradle.properties index 73310b1084..e835f09046 100644 --- a/modules/swagger-gradle-plugin/gradle.properties +++ b/modules/swagger-gradle-plugin/gradle.properties @@ -1,2 +1,2 @@ -version=2.2.18 +version=2.2.19-SNAPSHOT jettyVersion=9.4.53.v20231009 diff --git a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java index a4c5d1f52c..f05c376a98 100644 --- a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java +++ b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java @@ -16,7 +16,7 @@ public void apply(Project project) { config.defaultDependencies(new Action() { public void execute(DependencySet dependencies) { dependencies.add(project.getDependencies().create("org.apache.commons:commons-lang3:3.12.0")); - dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.18")); + dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.19-SNAPSHOT")); dependencies.add(project.getDependencies().create("javax.ws.rs:javax.ws.rs-api:2.1")); dependencies.add(project.getDependencies().create("javax.servlet:javax.servlet-api:3.1.0")); } diff --git a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java index 418e46e2c0..0088b09288 100644 --- a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java +++ b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java @@ -81,7 +81,7 @@ public void testSwaggerResolveTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.18'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.19-SNAPSHOT'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + @@ -154,7 +154,7 @@ public void testSwaggerResolveWithOAS31OptionTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.18'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.19-SNAPSHOT'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + diff --git a/modules/swagger-integration/pom.xml b/modules/swagger-integration/pom.xml index 61e2ebac49..ba89f0de69 100644 --- a/modules/swagger-integration/pom.xml +++ b/modules/swagger-integration/pom.xml @@ -6,7 +6,7 @@ io.swagger.core.v3 swagger-project - 2.2.18 + 2.2.19-SNAPSHOT ../.. swagger-integration diff --git a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml index 37c5ab3fe9..642c7cac92 100644 --- a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.18 + 2.2.19-SNAPSHOT ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2-servlet-initializer/pom.xml b/modules/swagger-jaxrs2-servlet-initializer/pom.xml index 7b32eba22a..649af36e57 100644 --- a/modules/swagger-jaxrs2-servlet-initializer/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.18 + 2.2.19-SNAPSHOT ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2/pom.xml b/modules/swagger-jaxrs2/pom.xml index c0bc2181d4..11684c55c6 100644 --- a/modules/swagger-jaxrs2/pom.xml +++ b/modules/swagger-jaxrs2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.18 + 2.2.19-SNAPSHOT ../../ 4.0.0 diff --git a/modules/swagger-maven-plugin/pom.xml b/modules/swagger-maven-plugin/pom.xml index 6def012011..bb6be67fca 100644 --- a/modules/swagger-maven-plugin/pom.xml +++ b/modules/swagger-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.18 + 2.2.19-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-models/pom.xml b/modules/swagger-models/pom.xml index 73c2e975e6..c32f6fa745 100644 --- a/modules/swagger-models/pom.xml +++ b/modules/swagger-models/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.18 + 2.2.19-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml index e47cafcc7c..f12efa6450 100644 --- a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.18 + 2.2.19-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml index e8ccabca35..64b592ffa8 100644 --- a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.18 + 2.2.19-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml index e2d71f05c2..3f786bf573 100644 --- a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.18 + 2.2.19-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml index f687bb56b9..fa066bd6a1 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.18 + 2.2.19-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml index 98dc6f811f..4c3c39b1f3 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.18 + 2.2.19-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml index 5c96d90652..75aeee3d7f 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.18 + 2.2.19-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml index 9eaad7daa4..d7c4bea457 100644 --- a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.18 + 2.2.19-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml index a55adbb577..cf23e6360f 100644 --- a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.18 + 2.2.19-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/pom.xml b/modules/swagger-project-jakarta/pom.xml index 8d15a1a664..26ed8f8708 100644 --- a/modules/swagger-project-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/pom.xml @@ -6,7 +6,7 @@ pom swagger-project-jakarta swagger-project-jakarta - 2.2.18 + 2.2.19-SNAPSHOT https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git diff --git a/pom.xml b/pom.xml index cca1f9f467..7a9290a089 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ pom swagger-project swagger-project - 2.2.18 + 2.2.19-SNAPSHOT https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git From 0f921d635dc4c21179aa06161b4eac4ff0e6573f Mon Sep 17 00:00:00 2001 From: frantuma Date: Wed, 8 Nov 2023 08:41:57 +0100 Subject: [PATCH 093/131] update dependencies --- .mvn/wrapper/MavenWrapperDownloader.java | 117 ------ .mvn/wrapper/maven-wrapper.jar | Bin 50709 -> 62547 bytes .mvn/wrapper/maven-wrapper.properties | 20 +- modules/swagger-annotations/pom.xml | 2 +- .../pom.xml | 2 +- modules/swagger-maven-plugin/pom.xml | 2 +- .../swagger-maven-plugin-jakarta/pom.xml | 4 +- modules/swagger-project-jakarta/pom.xml | 10 +- mvnw | 227 +++++------ mvnw.cmd | 377 ++++++++++-------- pom.xml | 8 +- 11 files changed, 352 insertions(+), 417 deletions(-) delete mode 100644 .mvn/wrapper/MavenWrapperDownloader.java diff --git a/.mvn/wrapper/MavenWrapperDownloader.java b/.mvn/wrapper/MavenWrapperDownloader.java deleted file mode 100644 index 8f9ff40168..0000000000 --- a/.mvn/wrapper/MavenWrapperDownloader.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright 2007-present the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import java.net.*; -import java.io.*; -import java.nio.channels.*; -import java.util.Properties; - -public class MavenWrapperDownloader { - - private static final String WRAPPER_VERSION = "0.5.6"; - /** - * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. - */ - private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/" - + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + " .jar"; - - /** - * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to - * use instead of the default one. - */ - private static final String MAVEN_WRAPPER_PROPERTIES_PATH = - ".mvn/wrapper/maven-wrapper.properties"; - - /** - * Path where the maven-wrapper.jar will be saved to. - */ - private static final String MAVEN_WRAPPER_JAR_PATH = - ".mvn/wrapper/maven-wrapper.jar"; - - /** - * Name of the property which should be used to override the default download url for the wrapper. - */ - private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; - - public static void main(String args[]) { - System.out.println("- Downloader started"); - File baseDirectory = new File(args[0]); - System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); - - // If the maven-wrapper.properties exists, read it and check if it contains a custom - // wrapperUrl parameter. - File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); - String url = DEFAULT_DOWNLOAD_URL; - if(mavenWrapperPropertyFile.exists()) { - FileInputStream mavenWrapperPropertyFileInputStream = null; - try { - mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); - Properties mavenWrapperProperties = new Properties(); - mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); - url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); - } catch (IOException e) { - System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); - } finally { - try { - if(mavenWrapperPropertyFileInputStream != null) { - mavenWrapperPropertyFileInputStream.close(); - } - } catch (IOException e) { - // Ignore ... - } - } - } - System.out.println("- Downloading from: " + url); - - File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); - if(!outputFile.getParentFile().exists()) { - if(!outputFile.getParentFile().mkdirs()) { - System.out.println( - "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'"); - } - } - System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); - try { - downloadFileFromURL(url, outputFile); - System.out.println("Done"); - System.exit(0); - } catch (Throwable e) { - System.out.println("- Error downloading"); - e.printStackTrace(); - System.exit(1); - } - } - - private static void downloadFileFromURL(String urlString, File destination) throws Exception { - if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { - String username = System.getenv("MVNW_USERNAME"); - char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); - Authenticator.setDefault(new Authenticator() { - @Override - protected PasswordAuthentication getPasswordAuthentication() { - return new PasswordAuthentication(username, password); - } - }); - } - URL website = new URL(urlString); - ReadableByteChannel rbc; - rbc = Channels.newChannel(website.openStream()); - FileOutputStream fos = new FileOutputStream(destination); - fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); - fos.close(); - rbc.close(); - } - -} diff --git a/.mvn/wrapper/maven-wrapper.jar b/.mvn/wrapper/maven-wrapper.jar index e89f07c229cbd97f4e39b0eddba64604d1dca9f6..cb28b0e37c7d206feb564310fdeec0927af4123a 100644 GIT binary patch literal 62547 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 A?*IS* literal 50709 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 maven-resources-plugin - 3.1.0 + 3.3.1 copy-resources diff --git a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml index b123355fcc..835438d2f1 100644 --- a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml +++ b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml @@ -13,7 +13,7 @@ swagger-eclipse-transformer-maven-plugin maven-plugin - 3.8.4 + 3.9.5 0.20 3.3.0 1.2.6 diff --git a/modules/swagger-maven-plugin/pom.xml b/modules/swagger-maven-plugin/pom.xml index bb6be67fca..545f4f690f 100644 --- a/modules/swagger-maven-plugin/pom.xml +++ b/modules/swagger-maven-plugin/pom.xml @@ -290,7 +290,7 @@ UTF-8 - 3.8.4 + 3.9.5 4.13.2 9.4.53.v20231009 1.24.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml index d7c4bea457..edbaef2839 100644 --- a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml @@ -37,7 +37,7 @@ maven-resources-plugin - 3.2.0 + 3.3.1 copy-resources @@ -175,6 +175,6 @@ UTF-8 - 3.8.4 + 3.9.5 diff --git a/modules/swagger-project-jakarta/pom.xml b/modules/swagger-project-jakarta/pom.xml index 26ed8f8708..b9e1d95134 100644 --- a/modules/swagger-project-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/pom.xml @@ -132,7 +132,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.5.0 + 3.6.2 true 1.8 @@ -173,7 +173,7 @@ maven-resources-plugin - 3.2.0 + 3.3.1 copy-resources @@ -202,7 +202,7 @@ org.sonatype.plugins nexus-staging-maven-plugin - 1.6.8 + 1.6.13 true ossrh @@ -335,7 +335,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.5.0 + 3.6.2 true 1.8 @@ -600,7 +600,7 @@ UTF-8 https://oss.sonatype.org/content/repositories/snapshots/ - 3.8.4 + 3.9.5 1.21 diff --git a/mvnw b/mvnw index d1e14b0eef..8d937f4c14 100755 --- a/mvnw +++ b/mvnw @@ -19,7 +19,7 @@ # ---------------------------------------------------------------------------- # ---------------------------------------------------------------------------- -# Maven2 Start Up Batch script +# Apache Maven Wrapper startup batch script, version 3.2.0 # # Required ENV vars: # ------------------ @@ -27,7 +27,6 @@ # # Optional ENV vars # ----------------- -# M2_HOME - location of maven2's installed home dir # MAVEN_OPTS - parameters passed to the Java VM when running Maven # e.g. to debug Maven itself, use # set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 @@ -36,6 +35,10 @@ if [ -z "$MAVEN_SKIP_RC" ] ; then + if [ -f /usr/local/etc/mavenrc ] ; then + . /usr/local/etc/mavenrc + fi + if [ -f /etc/mavenrc ] ; then . /etc/mavenrc fi @@ -50,7 +53,7 @@ fi cygwin=false; darwin=false; mingw=false -case "`uname`" in +case "$(uname)" in CYGWIN*) cygwin=true ;; MINGW*) mingw=true;; Darwin*) darwin=true @@ -58,9 +61,9 @@ case "`uname`" in # See https://developer.apple.com/library/mac/qa/qa1170/_index.html if [ -z "$JAVA_HOME" ]; then if [ -x "/usr/libexec/java_home" ]; then - export JAVA_HOME="`/usr/libexec/java_home`" + JAVA_HOME="$(/usr/libexec/java_home)"; export JAVA_HOME else - export JAVA_HOME="/Library/Java/Home" + JAVA_HOME="/Library/Java/Home"; export JAVA_HOME fi fi ;; @@ -68,68 +71,38 @@ esac if [ -z "$JAVA_HOME" ] ; then if [ -r /etc/gentoo-release ] ; then - JAVA_HOME=`java-config --jre-home` + JAVA_HOME=$(java-config --jre-home) fi fi -if [ -z "$M2_HOME" ] ; then - ## resolve links - $0 may be a link to maven's home - PRG="$0" - - # need this for relative symlinks - while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG="`dirname "$PRG"`/$link" - fi - done - - saveddir=`pwd` - - M2_HOME=`dirname "$PRG"`/.. - - # make it fully qualified - M2_HOME=`cd "$M2_HOME" && pwd` - - cd "$saveddir" - # echo Using m2 at $M2_HOME -fi - # For Cygwin, ensure paths are in UNIX format before anything is touched if $cygwin ; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --unix "$M2_HOME"` [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + JAVA_HOME=$(cygpath --unix "$JAVA_HOME") [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --unix "$CLASSPATH"` + CLASSPATH=$(cygpath --path --unix "$CLASSPATH") fi # For Mingw, ensure paths are in UNIX format before anything is touched if $mingw ; then - [ -n "$M2_HOME" ] && - M2_HOME="`(cd "$M2_HOME"; pwd)`" - [ -n "$JAVA_HOME" ] && - JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && [ -d "$JAVA_HOME" ] && + JAVA_HOME="$(cd "$JAVA_HOME" || (echo "cannot cd into $JAVA_HOME."; exit 1); pwd)" fi if [ -z "$JAVA_HOME" ]; then - javaExecutable="`which javac`" - if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + javaExecutable="$(which javac)" + if [ -n "$javaExecutable" ] && ! [ "$(expr "\"$javaExecutable\"" : '\([^ ]*\)')" = "no" ]; then # readlink(1) is not available as standard on Solaris 10. - readLink=`which readlink` - if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + readLink=$(which readlink) + if [ ! "$(expr "$readLink" : '\([^ ]*\)')" = "no" ]; then if $darwin ; then - javaHome="`dirname \"$javaExecutable\"`" - javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + javaHome="$(dirname "\"$javaExecutable\"")" + javaExecutable="$(cd "\"$javaHome\"" && pwd -P)/javac" else - javaExecutable="`readlink -f \"$javaExecutable\"`" + javaExecutable="$(readlink -f "\"$javaExecutable\"")" fi - javaHome="`dirname \"$javaExecutable\"`" - javaHome=`expr "$javaHome" : '\(.*\)/bin'` + javaHome="$(dirname "\"$javaExecutable\"")" + javaHome=$(expr "$javaHome" : '\(.*\)/bin') JAVA_HOME="$javaHome" export JAVA_HOME fi @@ -145,7 +118,7 @@ if [ -z "$JAVACMD" ] ; then JAVACMD="$JAVA_HOME/bin/java" fi else - JAVACMD="`which java`" + JAVACMD="$(\unset -f command 2>/dev/null; \command -v java)" fi fi @@ -159,12 +132,9 @@ if [ -z "$JAVA_HOME" ] ; then echo "Warning: JAVA_HOME environment variable is not set." fi -CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher - # traverses directory structure from process work directory to filesystem root # first directory with .mvn subdirectory is considered project base directory find_maven_basedir() { - if [ -z "$1" ] then echo "Path not specified to find_maven_basedir" @@ -180,96 +150,99 @@ find_maven_basedir() { fi # workaround for JBEAP-8937 (on Solaris 10/Sparc) if [ -d "${wdir}" ]; then - wdir=`cd "$wdir/.."; pwd` + wdir=$(cd "$wdir/.." || exit 1; pwd) fi # end of workaround done - echo "${basedir}" + printf '%s' "$(cd "$basedir" || exit 1; pwd)" } # concatenates all lines of a file concat_lines() { if [ -f "$1" ]; then - echo "$(tr -s '\n' ' ' < "$1")" + # Remove \r in case we run on Windows within Git Bash + # and check out the repository with auto CRLF management + # enabled. Otherwise, we may read lines that are delimited with + # \r\n and produce $'-Xarg\r' rather than -Xarg due to word + # splitting rules. + tr -s '\r\n' ' ' < "$1" + fi +} + +log() { + if [ "$MVNW_VERBOSE" = true ]; then + printf '%s\n' "$1" fi } -BASE_DIR=`find_maven_basedir "$(pwd)"` +BASE_DIR=$(find_maven_basedir "$(dirname "$0")") if [ -z "$BASE_DIR" ]; then exit 1; fi +MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}; export MAVEN_PROJECTBASEDIR +log "$MAVEN_PROJECTBASEDIR" + ########################################################################################## # Extension to allow automatically downloading the maven-wrapper.jar from Maven-central # This allows using the maven wrapper in projects that prohibit checking in binary data. ########################################################################################## -if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found .mvn/wrapper/maven-wrapper.jar" - fi +wrapperJarPath="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" +if [ -r "$wrapperJarPath" ]; then + log "Found $wrapperJarPath" else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." - fi + log "Couldn't find $wrapperJarPath, downloading it ..." + if [ -n "$MVNW_REPOURL" ]; then - jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + wrapperUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" else - jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" fi - while IFS="=" read key value; do - case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + while IFS="=" read -r key value; do + # Remove '\r' from value to allow usage on windows as IFS does not consider '\r' as a separator ( considers space, tab, new line ('\n'), and custom '=' ) + safeValue=$(echo "$value" | tr -d '\r') + case "$key" in (wrapperUrl) wrapperUrl="$safeValue"; break ;; esac - done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" - if [ "$MVNW_VERBOSE" = true ]; then - echo "Downloading from: $jarUrl" - fi - wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties" + log "Downloading from: $wrapperUrl" + if $cygwin; then - wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` + wrapperJarPath=$(cygpath --path --windows "$wrapperJarPath") fi if command -v wget > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found wget ... using wget" - fi + log "Found wget ... using wget" + [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--quiet" if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - wget "$jarUrl" -O "$wrapperJarPath" + wget $QUIET "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" else - wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" + wget $QUIET --http-user="$MVNW_USERNAME" --http-password="$MVNW_PASSWORD" "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" fi elif command -v curl > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found curl ... using curl" - fi + log "Found curl ... using curl" + [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--silent" if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - curl -o "$wrapperJarPath" "$jarUrl" -f + curl $QUIET -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath" else - curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f + curl $QUIET --user "$MVNW_USERNAME:$MVNW_PASSWORD" -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath" fi - else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Falling back to using Java to download" - fi - javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + log "Falling back to using Java to download" + javaSource="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.java" + javaClass="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.class" # For Cygwin, switch paths to Windows format before running javac if $cygwin; then - javaClass=`cygpath --path --windows "$javaClass"` + javaSource=$(cygpath --path --windows "$javaSource") + javaClass=$(cygpath --path --windows "$javaClass") fi - if [ -e "$javaClass" ]; then - if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Compiling MavenWrapperDownloader.java ..." - fi - # Compiling the Java class - ("$JAVA_HOME/bin/javac" "$javaClass") + if [ -e "$javaSource" ]; then + if [ ! -e "$javaClass" ]; then + log " - Compiling MavenWrapperDownloader.java ..." + ("$JAVA_HOME/bin/javac" "$javaSource") fi - if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - # Running the downloader - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Running MavenWrapperDownloader.java ..." - fi - ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + if [ -e "$javaClass" ]; then + log " - Running MavenWrapperDownloader.java ..." + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$wrapperUrl" "$wrapperJarPath") || rm -f "$wrapperJarPath" fi fi fi @@ -278,28 +251,58 @@ fi # End of extension ########################################################################################## -export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} -if [ "$MVNW_VERBOSE" = true ]; then - echo $MAVEN_PROJECTBASEDIR +# If specified, validate the SHA-256 sum of the Maven wrapper jar file +wrapperSha256Sum="" +while IFS="=" read -r key value; do + case "$key" in (wrapperSha256Sum) wrapperSha256Sum=$value; break ;; + esac +done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties" +if [ -n "$wrapperSha256Sum" ]; then + wrapperSha256Result=false + if command -v sha256sum > /dev/null; then + if echo "$wrapperSha256Sum $wrapperJarPath" | sha256sum -c > /dev/null 2>&1; then + wrapperSha256Result=true + fi + elif command -v shasum > /dev/null; then + if echo "$wrapperSha256Sum $wrapperJarPath" | shasum -a 256 -c > /dev/null 2>&1; then + wrapperSha256Result=true + fi + else + echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." + echo "Please install either command, or disable validation by removing 'wrapperSha256Sum' from your maven-wrapper.properties." + exit 1 + fi + if [ $wrapperSha256Result = false ]; then + echo "Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised." >&2 + echo "Investigate or delete $wrapperJarPath to attempt a clean download." >&2 + echo "If you updated your Maven version, you need to update the specified wrapperSha256Sum property." >&2 + exit 1 + fi fi + MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" # For Cygwin, switch paths to Windows format before running java if $cygwin; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --path --windows "$M2_HOME"` [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + JAVA_HOME=$(cygpath --path --windows "$JAVA_HOME") [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + CLASSPATH=$(cygpath --path --windows "$CLASSPATH") [ -n "$MAVEN_PROJECTBASEDIR" ] && - MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` + MAVEN_PROJECTBASEDIR=$(cygpath --path --windows "$MAVEN_PROJECTBASEDIR") fi +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $*" +export MAVEN_CMD_LINE_ARGS + WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain +# shellcheck disable=SC2086 # safe args exec "$JAVACMD" \ $MAVEN_OPTS \ + $MAVEN_DEBUG_OPTS \ -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ - "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/mvnw.cmd b/mvnw.cmd index 6925114e69..f80fbad3e7 100644 --- a/mvnw.cmd +++ b/mvnw.cmd @@ -1,172 +1,205 @@ -@REM ---------------------------------------------------------------------------- -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM http://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. -@REM ---------------------------------------------------------------------------- - -@REM ---------------------------------------------------------------------------- -@REM Maven2 Start Up Batch script -@REM -@REM Required ENV vars: -@REM JAVA_HOME - location of a JDK home dir -@REM -@REM Optional ENV vars -@REM M2_HOME - location of maven2's installed home dir -@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending -@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven -@REM e.g. to debug Maven itself, use -@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files -@REM ---------------------------------------------------------------------------- - -@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' -@echo off -@REM set title of command window -title %0 -@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' -@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% - -@REM set %HOME% to equivalent of $HOME -if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") - -@REM Execute a user defined script before this one -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre -@REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" -if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" -:skipRcPre - -@setlocal - -set ERROR_CODE=0 - -@REM To isolate internal variables from possible post scripts, we use another setlocal -@setlocal - -@REM ==== START VALIDATION ==== -if not "%JAVA_HOME%" == "" goto OkJHome - -echo. -echo Error: JAVA_HOME not found in your environment. >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -:OkJHome -if exist "%JAVA_HOME%\bin\java.exe" goto init - -echo. -echo Error: JAVA_HOME is set to an invalid directory. >&2 -echo JAVA_HOME = "%JAVA_HOME%" >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -@REM ==== END VALIDATION ==== - -:init - -@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". -@REM Fallback to current working directory if not found. - -set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% -IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir - -set EXEC_DIR=%CD% -set WDIR=%EXEC_DIR% -:findBaseDir -IF EXIST "%WDIR%"\.mvn goto baseDirFound -cd .. -IF "%WDIR%"=="%CD%" goto baseDirNotFound -set WDIR=%CD% -goto findBaseDir - -:baseDirFound -set MAVEN_PROJECTBASEDIR=%WDIR% -cd "%EXEC_DIR%" -goto endDetectBaseDir - -:baseDirNotFound -set MAVEN_PROJECTBASEDIR=%EXEC_DIR% -cd "%EXEC_DIR%" - -:endDetectBaseDir - -IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig - -@setlocal EnableExtensions EnableDelayedExpansion -for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a -@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% - -:endReadAdditionalConfig - -SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" -set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" -set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/mavrapper-0.5.6.jar" - -FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( - IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B -) - -@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -@REM This allows using the maven wrapper in projects that prohibit checking in binary data. -if exist %WRAPPER_JAR% ( - echo Found %WRAPPER_JAR% -) else ( - if not "%MVNW_REPOURL%" == "" ( - SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - ) - echo Couldn't find %WRAPPER_JAR%, downloading it ... - echo Downloading from: %DOWNLOAD_URL% - - powershell -Command "&{"^ - "$webclient = new-object System.Net.WebClient;"^ - "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ - "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ - "}"^ - "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ - "}" - echo Finished downloading %WRAPPER_JAR% -) -@REM End of extension - -%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* -if ERRORLEVEL 1 goto error -goto end - -:error -set ERROR_CODE=1 - -:end -@endlocal & set ERROR_CODE=%ERROR_CODE% - -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost -@REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" -if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" -:skipRcPost - -@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%" == "on" pause - -if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% - -exit /B %ERROR_CODE% +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Apache Maven Wrapper startup batch script, version 3.2.0 +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %* +if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %* +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set WRAPPER_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET WRAPPER_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET WRAPPER_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %WRAPPER_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%WRAPPER_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM If specified, validate the SHA-256 sum of the Maven wrapper jar file +SET WRAPPER_SHA_256_SUM="" +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperSha256Sum" SET WRAPPER_SHA_256_SUM=%%B +) +IF NOT %WRAPPER_SHA_256_SUM%=="" ( + powershell -Command "&{"^ + "$hash = (Get-FileHash \"%WRAPPER_JAR%\" -Algorithm SHA256).Hash.ToLower();"^ + "If('%WRAPPER_SHA_256_SUM%' -ne $hash){"^ + " Write-Output 'Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised.';"^ + " Write-Output 'Investigate or delete %WRAPPER_JAR% to attempt a clean download.';"^ + " Write-Output 'If you updated your Maven version, you need to update the specified wrapperSha256Sum property.';"^ + " exit 1;"^ + "}"^ + "}" + if ERRORLEVEL 1 goto error +) + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% ^ + %JVM_CONFIG_MAVEN_PROPS% ^ + %MAVEN_OPTS% ^ + %MAVEN_DEBUG_OPTS% ^ + -classpath %WRAPPER_JAR% ^ + "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^ + %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat" +if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%"=="on" pause + +if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE% + +cmd /C exit /B %ERROR_CODE% diff --git a/pom.xml b/pom.xml index 7a9290a089..ca3fc92579 100644 --- a/pom.xml +++ b/pom.xml @@ -163,7 +163,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.5.0 + 3.6.2 true 1.8 @@ -205,7 +205,7 @@ org.apache.maven.plugins maven-site-plugin - 3.12.0 + 3.12.1 org.sonatype.plugins @@ -434,7 +434,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.5.0 + 3.6.2 true 1.8 @@ -655,7 +655,7 @@ 1.2.2 6.4.0 4.0.3 - 2.39 + 2.41 4.13.2 2.15.2 2.15.2 From fc1bccaeb7635be99f376e342e4e0bd3e1d4e445 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 8 Nov 2023 07:49:08 +0000 Subject: [PATCH 094/131] Bump org.apache.maven.plugins:maven-source-plugin from 3.2.1 to 3.3.0 Bumps [org.apache.maven.plugins:maven-source-plugin](https://github.com/apache/maven-source-plugin) from 3.2.1 to 3.3.0. - [Commits](https://github.com/apache/maven-source-plugin/compare/maven-source-plugin-3.2.1...maven-source-plugin-3.3.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-source-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- modules/swagger-project-jakarta/pom.xml | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/swagger-project-jakarta/pom.xml b/modules/swagger-project-jakarta/pom.xml index b9e1d95134..85941c8eca 100644 --- a/modules/swagger-project-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/pom.xml @@ -114,7 +114,7 @@ org.apache.maven.plugins maven-source-plugin - 3.2.1 + 3.3.0 true true diff --git a/pom.xml b/pom.xml index ca3fc92579..17bb90fbb2 100644 --- a/pom.xml +++ b/pom.xml @@ -149,7 +149,7 @@ org.apache.maven.plugins maven-source-plugin - 3.2.1 + 3.3.0 attach-sources From 699f70e0d8023d7c82fc25ac401cf1858a975dec Mon Sep 17 00:00:00 2001 From: frantuma Date: Fri, 10 Nov 2023 08:26:52 +0100 Subject: [PATCH 095/131] give precedence to requiredMode annotation --- .../io/swagger/v3/core/jackson/ModelResolver.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) 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 9fbaab06f7..31d358739c 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 @@ -718,11 +718,13 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context } if (property != null) { Boolean required = md.getRequired(); - if (required != null && !Boolean.FALSE.equals(required)) { - addRequiredItem(model, propName); - } else { - if (propDef.isRequired()) { + if (!io.swagger.v3.oas.annotations.media.Schema.RequiredMode.NOT_REQUIRED.equals(requiredMode)) { + if (required != null && !Boolean.FALSE.equals(required)) { addRequiredItem(model, propName); + } else { + if (propDef.isRequired()) { + addRequiredItem(model, propName); + } } } if (property.get$ref() == null || openapi31) { @@ -801,6 +803,7 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context } for(String propName : requiredProps) { + System.err.println("XXX PROPS " + propName); addRequiredItem(model, propName); } } From d7e7c2533b7769966bb2e38dbd5645fe1585b09a Mon Sep 17 00:00:00 2001 From: frantuma Date: Fri, 10 Nov 2023 08:40:42 +0100 Subject: [PATCH 096/131] update dependencies --- modules/swagger-jaxrs2/pom.xml | 4 ++-- modules/swagger-project-jakarta/pom.xml | 2 +- pom.xml | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/modules/swagger-jaxrs2/pom.xml b/modules/swagger-jaxrs2/pom.xml index 11684c55c6..d43e337de2 100644 --- a/modules/swagger-jaxrs2/pom.xml +++ b/modules/swagger-jaxrs2/pom.xml @@ -233,7 +233,7 @@ org.jboss.weld weld-core-impl - 3.1.6.Final + 3.1.9.Final test @@ -245,7 +245,7 @@ org.jboss.arquillian.container arquillian-weld-embedded - 2.0.0.Final + 2.1.0.Final test diff --git a/modules/swagger-project-jakarta/pom.xml b/modules/swagger-project-jakarta/pom.xml index 85941c8eca..9d890b78fc 100644 --- a/modules/swagger-project-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/pom.xml @@ -585,7 +585,7 @@ 9.4.53.v20231009 7.8.0 2.28.2 - 4.3.2 + 4.5.1 4.5.14 1.16.0 diff --git a/pom.xml b/pom.xml index 17bb90fbb2..abfc7a5e2c 100644 --- a/pom.xml +++ b/pom.xml @@ -90,7 +90,7 @@ org.apache.maven.wagon wagon-ssh-external - 3.5.2 + 3.5.3 org.apache.maven.wagon @@ -654,7 +654,7 @@ 2.3.3 1.2.2 6.4.0 - 4.0.3 + 4.0.4 2.41 4.13.2 2.15.2 @@ -669,7 +669,7 @@ 9.4.53.v20231009 7.8.0 2.28.2 - 4.3.2 + 4.5.1 4.5.14 1.16.0 From 72d99022078371f3a46adff6e80a19759a676652 Mon Sep 17 00:00:00 2001 From: frantuma Date: Fri, 10 Nov 2023 08:32:43 +0000 Subject: [PATCH 097/131] prepare release 2.2.19 --- README.md | 5 +++-- modules/swagger-annotations/pom.xml | 2 +- modules/swagger-core/pom.xml | 2 +- .../swagger-eclipse-transformer-maven-plugin/pom.xml | 2 +- modules/swagger-gradle-plugin/README.md | 4 ++-- modules/swagger-gradle-plugin/gradle.properties | 2 +- .../io/swagger/v3/plugins/gradle/SwaggerPlugin.java | 2 +- .../v3/plugins/gradle/SwaggerResolveTest.java | 4 ++-- modules/swagger-integration/pom.xml | 2 +- .../swagger-jaxrs2-servlet-initializer-v2/pom.xml | 2 +- modules/swagger-jaxrs2-servlet-initializer/pom.xml | 2 +- modules/swagger-jaxrs2/pom.xml | 2 +- modules/swagger-maven-plugin/README.md | 12 ++++++------ modules/swagger-maven-plugin/pom.xml | 2 +- modules/swagger-models/pom.xml | 2 +- .../modules/swagger-annotations-jakarta/pom.xml | 2 +- .../modules/swagger-core-jakarta/pom.xml | 2 +- .../modules/swagger-integration-jakarta/pom.xml | 2 +- .../modules/swagger-jaxrs2-jakarta/pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../modules/swagger-maven-plugin-jakarta/pom.xml | 2 +- .../modules/swagger-models-jakarta/pom.xml | 2 +- modules/swagger-project-jakarta/pom.xml | 2 +- pom.xml | 2 +- 25 files changed, 34 insertions(+), 33 deletions(-) diff --git a/README.md b/README.md index 6b2cdd490b..3b1c77d0dd 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,8 @@ The OpenAPI Specification has undergone several revisions since initial creation Swagger core Version | Release Date | OpenAPI Spec compatibility | Notes | Status ------------------------- | ------------ | -------------------------- | ----- | ---- -2.2.18 (**current stable**)| 2023-10-25 | 3.x | [tag v2.2.18](https://github.com/swagger-api/swagger-core/tree/v2.2.18) | Supported +2.2.19 (**current stable**)| 2023-11-10 | 3.x | [tag v2.2.19](https://github.com/swagger-api/swagger-core/tree/v2.2.19) | Supported +2.2.18 | 2023-10-25 | 3.x | [tag v2.2.18](https://github.com/swagger-api/swagger-core/tree/v2.2.18) | Supported 2.2.17 | 2023-10-12 | 3.x | [tag v2.2.17](https://github.com/swagger-api/swagger-core/tree/v2.2.17) | Supported 2.2.16 | 2023-09-18 | 3.x | [tag v2.2.16](https://github.com/swagger-api/swagger-core/tree/v2.2.16) | Supported 2.2.15 | 2023-07-08 | 3.x | [tag v2.2.15](https://github.com/swagger-api/swagger-core/tree/v2.2.15) | Supported @@ -109,7 +110,7 @@ You need the following installed and available in your $PATH: * Jackson 2.4.5 or greater -### To build from source (currently 2.2.19-SNAPSHOT) +### To build from source (currently 2.2.20-SNAPSHOT) ``` # first time building locally mvn -N diff --git a/modules/swagger-annotations/pom.xml b/modules/swagger-annotations/pom.xml index e91c63fbfa..1e89b6de4c 100644 --- a/modules/swagger-annotations/pom.xml +++ b/modules/swagger-annotations/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.19-SNAPSHOT + 2.2.19 ../.. 4.0.0 diff --git a/modules/swagger-core/pom.xml b/modules/swagger-core/pom.xml index a6a34f494e..42622e3292 100644 --- a/modules/swagger-core/pom.xml +++ b/modules/swagger-core/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.19-SNAPSHOT + 2.2.19 ../.. 4.0.0 diff --git a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml index 835438d2f1..96dd147b02 100644 --- a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml +++ b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.19-SNAPSHOT + 2.2.19 ../.. 4.0.0 diff --git a/modules/swagger-gradle-plugin/README.md b/modules/swagger-gradle-plugin/README.md index 0a84ded72f..bad75cab73 100644 --- a/modules/swagger-gradle-plugin/README.md +++ b/modules/swagger-gradle-plugin/README.md @@ -26,7 +26,7 @@ Alternatively provide as value a classpath with the following dependencies (repl ``` plugins { - id "io.swagger.core.v3.swagger-gradle-plugin" version "2.2.18" + id "io.swagger.core.v3.swagger-gradle-plugin" version "2.2.19" } ``` ### Gradle 1.x and 2.0 @@ -43,7 +43,7 @@ buildscript { } } dependencies { - classpath "io.swagger.core.v3:swagger-gradle-plugin:2.2.18" + classpath "io.swagger.core.v3:swagger-gradle-plugin:2.2.19" } } diff --git a/modules/swagger-gradle-plugin/gradle.properties b/modules/swagger-gradle-plugin/gradle.properties index e835f09046..d53eded639 100644 --- a/modules/swagger-gradle-plugin/gradle.properties +++ b/modules/swagger-gradle-plugin/gradle.properties @@ -1,2 +1,2 @@ -version=2.2.19-SNAPSHOT +version=2.2.19 jettyVersion=9.4.53.v20231009 diff --git a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java index f05c376a98..c47d3cc694 100644 --- a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java +++ b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java @@ -16,7 +16,7 @@ public void apply(Project project) { config.defaultDependencies(new Action() { public void execute(DependencySet dependencies) { dependencies.add(project.getDependencies().create("org.apache.commons:commons-lang3:3.12.0")); - dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.19-SNAPSHOT")); + dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.19")); dependencies.add(project.getDependencies().create("javax.ws.rs:javax.ws.rs-api:2.1")); dependencies.add(project.getDependencies().create("javax.servlet:javax.servlet-api:3.1.0")); } diff --git a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java index 0088b09288..6598e46268 100644 --- a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java +++ b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java @@ -81,7 +81,7 @@ public void testSwaggerResolveTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.19-SNAPSHOT'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.19'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + @@ -154,7 +154,7 @@ public void testSwaggerResolveWithOAS31OptionTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.19-SNAPSHOT'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.19'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + diff --git a/modules/swagger-integration/pom.xml b/modules/swagger-integration/pom.xml index ba89f0de69..970c0dc81c 100644 --- a/modules/swagger-integration/pom.xml +++ b/modules/swagger-integration/pom.xml @@ -6,7 +6,7 @@ io.swagger.core.v3 swagger-project - 2.2.19-SNAPSHOT + 2.2.19 ../.. swagger-integration diff --git a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml index 642c7cac92..6714e92df7 100644 --- a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.19-SNAPSHOT + 2.2.19 ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2-servlet-initializer/pom.xml b/modules/swagger-jaxrs2-servlet-initializer/pom.xml index 649af36e57..5b744df959 100644 --- a/modules/swagger-jaxrs2-servlet-initializer/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.19-SNAPSHOT + 2.2.19 ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2/pom.xml b/modules/swagger-jaxrs2/pom.xml index d43e337de2..3d6583d4ea 100644 --- a/modules/swagger-jaxrs2/pom.xml +++ b/modules/swagger-jaxrs2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.19-SNAPSHOT + 2.2.19 ../../ 4.0.0 diff --git a/modules/swagger-maven-plugin/README.md b/modules/swagger-maven-plugin/README.md index f852a7d0ce..2438bd32fb 100644 --- a/modules/swagger-maven-plugin/README.md +++ b/modules/swagger-maven-plugin/README.md @@ -22,7 +22,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin - 2.2.18 + 2.2.19 openapi ${project.build.directory}/generatedtest @@ -47,7 +47,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-jaxrs2 - 2.2.18 + 2.2.19 @@ -73,7 +73,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin-jakarta - 2.2.18 + 2.2.19 openapi ${project.build.directory}/generatedtest @@ -98,7 +98,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-jaxrs2-jakarta - 2.2.18 + 2.2.19 @@ -126,7 +126,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin - 2.2.18 + 2.2.19 openapi ${project.build.directory}/generatedtest @@ -155,7 +155,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin-jakarta - 2.2.18 + 2.2.19 openapi ${project.build.directory}/generatedtest diff --git a/modules/swagger-maven-plugin/pom.xml b/modules/swagger-maven-plugin/pom.xml index 545f4f690f..23ccf901e7 100644 --- a/modules/swagger-maven-plugin/pom.xml +++ b/modules/swagger-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.19-SNAPSHOT + 2.2.19 ../.. 4.0.0 diff --git a/modules/swagger-models/pom.xml b/modules/swagger-models/pom.xml index c32f6fa745..fcf59632ec 100644 --- a/modules/swagger-models/pom.xml +++ b/modules/swagger-models/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.19-SNAPSHOT + 2.2.19 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml index f12efa6450..66bfb7d4d7 100644 --- a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.19-SNAPSHOT + 2.2.19 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml index 64b592ffa8..030c503f84 100644 --- a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.19-SNAPSHOT + 2.2.19 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml index 3f786bf573..61969abab5 100644 --- a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.19-SNAPSHOT + 2.2.19 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml index fa066bd6a1..aafcdc6ec1 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.19-SNAPSHOT + 2.2.19 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml index 4c3c39b1f3..269cfd82e9 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.19-SNAPSHOT + 2.2.19 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml index 75aeee3d7f..cd3bc87d39 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.19-SNAPSHOT + 2.2.19 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml index edbaef2839..6030c67da9 100644 --- a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.19-SNAPSHOT + 2.2.19 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml index cf23e6360f..f2d2aea488 100644 --- a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.19-SNAPSHOT + 2.2.19 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/pom.xml b/modules/swagger-project-jakarta/pom.xml index 9d890b78fc..1d7b7e1f67 100644 --- a/modules/swagger-project-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/pom.xml @@ -6,7 +6,7 @@ pom swagger-project-jakarta swagger-project-jakarta - 2.2.19-SNAPSHOT + 2.2.19 https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git diff --git a/pom.xml b/pom.xml index abfc7a5e2c..937ba7ce40 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ pom swagger-project swagger-project - 2.2.19-SNAPSHOT + 2.2.19 https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git From 7f599ea1c59e966aeccb2c12381cd09ada53769f Mon Sep 17 00:00:00 2001 From: frantuma Date: Fri, 10 Nov 2023 10:41:07 +0100 Subject: [PATCH 098/131] downgrade maven-resources-plugin --- modules/swagger-annotations/pom.xml | 2 +- .../modules/swagger-maven-plugin-jakarta/pom.xml | 2 +- modules/swagger-project-jakarta/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/swagger-annotations/pom.xml b/modules/swagger-annotations/pom.xml index 1e89b6de4c..e17a5fb5a2 100644 --- a/modules/swagger-annotations/pom.xml +++ b/modules/swagger-annotations/pom.xml @@ -80,7 +80,7 @@ maven-resources-plugin - 3.3.1 + 3.2.0 copy-resources diff --git a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml index 6030c67da9..57d8abbdbf 100644 --- a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml @@ -37,7 +37,7 @@ maven-resources-plugin - 3.3.1 + 3.2.0 copy-resources diff --git a/modules/swagger-project-jakarta/pom.xml b/modules/swagger-project-jakarta/pom.xml index 1d7b7e1f67..920ac9ed36 100644 --- a/modules/swagger-project-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/pom.xml @@ -173,7 +173,7 @@ maven-resources-plugin - 3.3.1 + 3.2.0 copy-resources From 8de530a0f7256da04d371b76718b30b913936642 Mon Sep 17 00:00:00 2001 From: frantuma Date: Fri, 10 Nov 2023 10:58:35 +0100 Subject: [PATCH 099/131] downgrade maven-resources-plugin --- modules/swagger-annotations/pom.xml | 3 ++- .../modules/swagger-maven-plugin-jakarta/pom.xml | 3 ++- modules/swagger-project-jakarta/pom.xml | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/modules/swagger-annotations/pom.xml b/modules/swagger-annotations/pom.xml index e17a5fb5a2..4637160326 100644 --- a/modules/swagger-annotations/pom.xml +++ b/modules/swagger-annotations/pom.xml @@ -80,7 +80,8 @@ maven-resources-plugin - 3.2.0 + + 3.1.0 copy-resources diff --git a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml index 57d8abbdbf..6831d07bf3 100644 --- a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml @@ -37,7 +37,8 @@ maven-resources-plugin - 3.2.0 + + 3.1.0 copy-resources diff --git a/modules/swagger-project-jakarta/pom.xml b/modules/swagger-project-jakarta/pom.xml index 920ac9ed36..4a8750906b 100644 --- a/modules/swagger-project-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/pom.xml @@ -173,7 +173,8 @@ maven-resources-plugin - 3.2.0 + + 3.1.0 copy-resources From c74d2804936521866a2f3cfdc7fe4e28d4a4a62b Mon Sep 17 00:00:00 2001 From: frantuma Date: Fri, 10 Nov 2023 10:19:46 +0000 Subject: [PATCH 100/131] bump snapshot 2.2.20-SNAPSHOT --- modules/swagger-annotations/pom.xml | 2 +- modules/swagger-core/pom.xml | 2 +- modules/swagger-eclipse-transformer-maven-plugin/pom.xml | 2 +- modules/swagger-gradle-plugin/gradle.properties | 2 +- .../main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java | 2 +- .../java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java | 4 ++-- modules/swagger-integration/pom.xml | 2 +- modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml | 2 +- modules/swagger-jaxrs2-servlet-initializer/pom.xml | 2 +- modules/swagger-jaxrs2/pom.xml | 2 +- modules/swagger-maven-plugin/pom.xml | 2 +- modules/swagger-models/pom.xml | 2 +- .../modules/swagger-annotations-jakarta/pom.xml | 2 +- .../modules/swagger-core-jakarta/pom.xml | 2 +- .../modules/swagger-integration-jakarta/pom.xml | 2 +- .../modules/swagger-jaxrs2-jakarta/pom.xml | 2 +- .../swagger-jaxrs2-servlet-initializer-jakarta/pom.xml | 2 +- .../swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml | 2 +- .../modules/swagger-maven-plugin-jakarta/pom.xml | 2 +- .../modules/swagger-models-jakarta/pom.xml | 2 +- modules/swagger-project-jakarta/pom.xml | 2 +- pom.xml | 2 +- 22 files changed, 23 insertions(+), 23 deletions(-) diff --git a/modules/swagger-annotations/pom.xml b/modules/swagger-annotations/pom.xml index 4637160326..cbb644dfe8 100644 --- a/modules/swagger-annotations/pom.xml +++ b/modules/swagger-annotations/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.19 + 2.2.20-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-core/pom.xml b/modules/swagger-core/pom.xml index 42622e3292..8f5fb250bc 100644 --- a/modules/swagger-core/pom.xml +++ b/modules/swagger-core/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.19 + 2.2.20-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml index 96dd147b02..a96e15ead0 100644 --- a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml +++ b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.19 + 2.2.20-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-gradle-plugin/gradle.properties b/modules/swagger-gradle-plugin/gradle.properties index d53eded639..15318ed5c6 100644 --- a/modules/swagger-gradle-plugin/gradle.properties +++ b/modules/swagger-gradle-plugin/gradle.properties @@ -1,2 +1,2 @@ -version=2.2.19 +version=2.2.20-SNAPSHOT jettyVersion=9.4.53.v20231009 diff --git a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java index c47d3cc694..fb06ffa149 100644 --- a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java +++ b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java @@ -16,7 +16,7 @@ public void apply(Project project) { config.defaultDependencies(new Action() { public void execute(DependencySet dependencies) { dependencies.add(project.getDependencies().create("org.apache.commons:commons-lang3:3.12.0")); - dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.19")); + dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.20-SNAPSHOT")); dependencies.add(project.getDependencies().create("javax.ws.rs:javax.ws.rs-api:2.1")); dependencies.add(project.getDependencies().create("javax.servlet:javax.servlet-api:3.1.0")); } diff --git a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java index 6598e46268..f3ad813124 100644 --- a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java +++ b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java @@ -81,7 +81,7 @@ public void testSwaggerResolveTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.19'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.20-SNAPSHOT'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + @@ -154,7 +154,7 @@ public void testSwaggerResolveWithOAS31OptionTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.19'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.20-SNAPSHOT'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + diff --git a/modules/swagger-integration/pom.xml b/modules/swagger-integration/pom.xml index 970c0dc81c..ccda48ae4f 100644 --- a/modules/swagger-integration/pom.xml +++ b/modules/swagger-integration/pom.xml @@ -6,7 +6,7 @@ io.swagger.core.v3 swagger-project - 2.2.19 + 2.2.20-SNAPSHOT ../.. swagger-integration diff --git a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml index 6714e92df7..24859dbf83 100644 --- a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.19 + 2.2.20-SNAPSHOT ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2-servlet-initializer/pom.xml b/modules/swagger-jaxrs2-servlet-initializer/pom.xml index 5b744df959..ecfac4f851 100644 --- a/modules/swagger-jaxrs2-servlet-initializer/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.19 + 2.2.20-SNAPSHOT ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2/pom.xml b/modules/swagger-jaxrs2/pom.xml index 3d6583d4ea..31bc5abd30 100644 --- a/modules/swagger-jaxrs2/pom.xml +++ b/modules/swagger-jaxrs2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.19 + 2.2.20-SNAPSHOT ../../ 4.0.0 diff --git a/modules/swagger-maven-plugin/pom.xml b/modules/swagger-maven-plugin/pom.xml index 23ccf901e7..b6f3c476f1 100644 --- a/modules/swagger-maven-plugin/pom.xml +++ b/modules/swagger-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.19 + 2.2.20-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-models/pom.xml b/modules/swagger-models/pom.xml index fcf59632ec..bb1a2e4597 100644 --- a/modules/swagger-models/pom.xml +++ b/modules/swagger-models/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.19 + 2.2.20-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml index 66bfb7d4d7..6275c6dd5a 100644 --- a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.19 + 2.2.20-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml index 030c503f84..a78c40c7b7 100644 --- a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.19 + 2.2.20-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml index 61969abab5..e6948be780 100644 --- a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.19 + 2.2.20-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml index aafcdc6ec1..a616c0d618 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.19 + 2.2.20-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml index 269cfd82e9..228d9f1b64 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.19 + 2.2.20-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml index cd3bc87d39..dc151cc8cc 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.19 + 2.2.20-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml index 6831d07bf3..7919e045d5 100644 --- a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.19 + 2.2.20-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml index f2d2aea488..f8871634bd 100644 --- a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.19 + 2.2.20-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/pom.xml b/modules/swagger-project-jakarta/pom.xml index 4a8750906b..09c9078021 100644 --- a/modules/swagger-project-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/pom.xml @@ -6,7 +6,7 @@ pom swagger-project-jakarta swagger-project-jakarta - 2.2.19 + 2.2.20-SNAPSHOT https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git diff --git a/pom.xml b/pom.xml index 937ba7ce40..7308735bd9 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ pom swagger-project swagger-project - 2.2.19 + 2.2.20-SNAPSHOT https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git From bfd25e297a4efe5983b5382c0f71b8dafabf2bb9 Mon Sep 17 00:00:00 2001 From: vrossello Date: Sat, 11 Nov 2023 22:39:05 +0100 Subject: [PATCH 101/131] Remove System.err --- .../src/main/java/io/swagger/v3/core/jackson/ModelResolver.java | 1 - 1 file changed, 1 deletion(-) 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 31d358739c..eb6ae9e473 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 @@ -803,7 +803,6 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context } for(String propName : requiredProps) { - System.err.println("XXX PROPS " + propName); addRequiredItem(model, propName); } } From dc658751a040ed2ad66bfb8d1c05532f61d6926d Mon Sep 17 00:00:00 2001 From: Mikhael Sokolov Date: Tue, 15 Aug 2023 18:44:04 +0400 Subject: [PATCH 102/131] Treat kotlin's `kotlin.Deprecated` as a deprecated operation --- .../swagger/v3/core/util/KotlinDetector.java | 29 +++++++++++++++++++ .../java/io/swagger/v3/jaxrs2/Reader.java | 7 +++-- 2 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 modules/swagger-core/src/main/java/io/swagger/v3/core/util/KotlinDetector.java diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/KotlinDetector.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/KotlinDetector.java new file mode 100644 index 0000000000..a861fd89d7 --- /dev/null +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/KotlinDetector.java @@ -0,0 +1,29 @@ +package io.swagger.v3.core.util; + +import java.lang.annotation.Annotation; + +public class KotlinDetector { + private static final Boolean kotlinAvailable; + private static final Class kotlinDeprecated; + + static { + kotlinAvailable = loadByClassOrNull("kotlin.Metadata") != null; + kotlinDeprecated = loadByClassOrNull("kotlin.Deprecated"); + } + + private static Class loadByClassOrNull(String className) { + try { + return (Class) ReflectionUtils.loadClassByName(className); + } catch (ClassNotFoundException ex) { + return null; + } + } + + public static boolean isKotlinPresent() { + return kotlinAvailable; + } + + public static Class getKotlinDeprecated() { + return kotlinDeprecated; + } +} diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java index 6b92eb7c2b..e7396b9f46 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/Reader.java @@ -12,6 +12,7 @@ import io.swagger.v3.core.util.AnnotationsUtils; import io.swagger.v3.core.util.Json; import io.swagger.v3.core.util.Json31; +import io.swagger.v3.core.util.KotlinDetector; import io.swagger.v3.core.util.ParameterProcessor; import io.swagger.v3.core.util.PathUtils; import io.swagger.v3.core.util.ReflectionUtils; @@ -305,7 +306,8 @@ public OpenAPI read(Class cls, javax.ws.rs.Consumes classConsumes = ReflectionUtils.getAnnotation(cls, javax.ws.rs.Consumes.class); javax.ws.rs.Produces classProduces = ReflectionUtils.getAnnotation(cls, javax.ws.rs.Produces.class); - boolean classDeprecated = ReflectionUtils.getAnnotation(cls, Deprecated.class) != null; + boolean classDeprecated = ReflectionUtils.getAnnotation(cls, Deprecated.class) != null + || (KotlinDetector.isKotlinPresent() && ReflectionUtils.getAnnotation(cls, KotlinDetector.getKotlinDeprecated()) != null); // OpenApiDefinition OpenAPIDefinition openAPIDefinition = ReflectionUtils.getAnnotation(cls, OpenAPIDefinition.class); @@ -434,7 +436,8 @@ public OpenAPI read(Class cls, continue; } - boolean methodDeprecated = ReflectionUtils.getAnnotation(method, Deprecated.class) != null; + boolean methodDeprecated = ReflectionUtils.getAnnotation(method, Deprecated.class) != null + || (KotlinDetector.isKotlinPresent() && ReflectionUtils.getAnnotation(method, KotlinDetector.getKotlinDeprecated()) != null); javax.ws.rs.Path methodPath = ReflectionUtils.getAnnotation(method, javax.ws.rs.Path.class); From 44189e40a3516546d48faee236baaf0ea1b4231b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 10 Nov 2023 17:29:51 +0000 Subject: [PATCH 103/131] Bump commons-io:commons-io from 2.14.0 to 2.15.0 Bumps commons-io:commons-io from 2.14.0 to 2.15.0. --- updated-dependencies: - dependency-name: commons-io:commons-io dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- modules/swagger-project-jakarta/pom.xml | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/swagger-project-jakarta/pom.xml b/modules/swagger-project-jakarta/pom.xml index 09c9078021..d09a8fb396 100644 --- a/modules/swagger-project-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/pom.xml @@ -581,7 +581,7 @@ 32.1.3-jre 1.10.13 3.13.0 - 2.14.0 + 2.15.0 2.0.9 9.4.53.v20231009 7.8.0 diff --git a/pom.xml b/pom.xml index 7308735bd9..6589d4558c 100644 --- a/pom.xml +++ b/pom.xml @@ -664,7 +664,7 @@ 32.1.3-jre 1.10.13 3.13.0 - 2.14.0 + 2.15.0 2.0.9 9.4.53.v20231009 7.8.0 From be1cd1d3bea63866b54d361481204b36a1dc2121 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 29 Nov 2023 07:11:07 +0000 Subject: [PATCH 104/131] Bump org.apache.maven.plugins:maven-jar-plugin from 3.2.0 to 3.3.0 Bumps [org.apache.maven.plugins:maven-jar-plugin](https://github.com/apache/maven-jar-plugin) from 3.2.0 to 3.3.0. - [Release notes](https://github.com/apache/maven-jar-plugin/releases) - [Commits](https://github.com/apache/maven-jar-plugin/compare/maven-jar-plugin-3.2.0...maven-jar-plugin-3.3.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-jar-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- modules/swagger-core/pom.xml | 2 +- modules/swagger-eclipse-transformer-maven-plugin/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/swagger-core/pom.xml b/modules/swagger-core/pom.xml index 8f5fb250bc..35f9c93e2e 100644 --- a/modules/swagger-core/pom.xml +++ b/modules/swagger-core/pom.xml @@ -26,7 +26,7 @@ org.apache.maven.plugins maven-jar-plugin - 3.2.0 + 3.3.0 default-jar diff --git a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml index a96e15ead0..63cdb45b6a 100644 --- a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml +++ b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml @@ -34,7 +34,7 @@ org.apache.maven.plugins maven-jar-plugin - 3.2.0 + 3.3.0 org.apache.maven.plugins From adbb4c6a4f38fb0d2fa966526424117b180f294e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 29 Nov 2023 07:17:36 +0000 Subject: [PATCH 105/131] Bump jakarta.xml.bind:jakarta.xml.bind-api from 2.3.2 to 2.3.3 Bumps [jakarta.xml.bind:jakarta.xml.bind-api](https://github.com/eclipse-ee4j/jaxb-api) from 2.3.2 to 2.3.3. - [Release notes](https://github.com/eclipse-ee4j/jaxb-api/releases) - [Commits](https://github.com/eclipse-ee4j/jaxb-api/compare/2.3.2...2.3.3) --- updated-dependencies: - dependency-name: jakarta.xml.bind:jakarta.xml.bind-api dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- modules/swagger-core/pom.xml | 2 +- modules/swagger-project-jakarta/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/swagger-core/pom.xml b/modules/swagger-core/pom.xml index 35f9c93e2e..1893b791ac 100644 --- a/modules/swagger-core/pom.xml +++ b/modules/swagger-core/pom.xml @@ -71,7 +71,7 @@ jakarta.xml.bind jakarta.xml.bind-api - 2.3.2 + 2.3.3 org.apache.commons diff --git a/modules/swagger-project-jakarta/pom.xml b/modules/swagger-project-jakarta/pom.xml index d09a8fb396..cd77b26cc4 100644 --- a/modules/swagger-project-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/pom.xml @@ -568,7 +568,7 @@ 2.2 3.1.0 3.0.2 - 3.0.0 + 2.3.3 2.1.2 6.4.0 5.0.0 From cafde4e5b3e1460de0aa5a05bfa015e80348891e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 29 Nov 2023 07:22:01 +0000 Subject: [PATCH 106/131] Bump org.codehaus.mojo:build-helper-maven-plugin from 3.0.0 to 3.5.0 Bumps [org.codehaus.mojo:build-helper-maven-plugin](https://github.com/mojohaus/build-helper-maven-plugin) from 3.0.0 to 3.5.0. - [Release notes](https://github.com/mojohaus/build-helper-maven-plugin/releases) - [Commits](https://github.com/mojohaus/build-helper-maven-plugin/compare/build-helper-maven-plugin-3.0.0...3.5.0) --- updated-dependencies: - dependency-name: org.codehaus.mojo:build-helper-maven-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml | 2 +- modules/swagger-jaxrs2-servlet-initializer/pom.xml | 2 +- modules/swagger-jaxrs2/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml index 24859dbf83..bfc1f2f85e 100644 --- a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml @@ -40,7 +40,7 @@ org.codehaus.mojo build-helper-maven-plugin - 3.0.0 + 3.5.0 jetty.port diff --git a/modules/swagger-jaxrs2-servlet-initializer/pom.xml b/modules/swagger-jaxrs2-servlet-initializer/pom.xml index ecfac4f851..bc63bbf751 100644 --- a/modules/swagger-jaxrs2-servlet-initializer/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer/pom.xml @@ -45,7 +45,7 @@ org.codehaus.mojo build-helper-maven-plugin - 3.0.0 + 3.5.0 jetty.port diff --git a/modules/swagger-jaxrs2/pom.xml b/modules/swagger-jaxrs2/pom.xml index 31bc5abd30..e91866d7d9 100644 --- a/modules/swagger-jaxrs2/pom.xml +++ b/modules/swagger-jaxrs2/pom.xml @@ -40,7 +40,7 @@ org.codehaus.mojo build-helper-maven-plugin - 3.0.0 + 3.5.0 jetty.port From 70d2d8df150d9b3dc3595d824e4fcc0698572d0d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 29 Nov 2023 18:01:06 +0000 Subject: [PATCH 107/131] Bump org.apache.maven.plugins:maven-compiler-plugin from 3.8.1 to 3.11.0 Bumps [org.apache.maven.plugins:maven-compiler-plugin](https://github.com/apache/maven-compiler-plugin) from 3.8.1 to 3.11.0. - [Release notes](https://github.com/apache/maven-compiler-plugin/releases) - [Commits](https://github.com/apache/maven-compiler-plugin/compare/maven-compiler-plugin-3.8.1...maven-compiler-plugin-3.11.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-compiler-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- modules/swagger-project-jakarta/pom.xml | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/swagger-project-jakarta/pom.xml b/modules/swagger-project-jakarta/pom.xml index cd77b26cc4..e9166bbd58 100644 --- a/modules/swagger-project-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/pom.xml @@ -68,7 +68,7 @@ maven-compiler-plugin - 3.8.1 + 3.11.0 org.apache.maven.plugins diff --git a/pom.xml b/pom.xml index 6589d4558c..1d6e508cef 100644 --- a/pom.xml +++ b/pom.xml @@ -104,7 +104,7 @@ maven-compiler-plugin - 3.10.1 + 3.11.0 org.apache.maven.plugins From bd73727286473f305d2c40517a06cb7cf7b36a98 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Nov 2023 10:25:02 +0000 Subject: [PATCH 108/131] Bump logback-version from 1.4.11 to 1.4.13 Bumps `logback-version` from 1.4.11 to 1.4.13. Updates `ch.qos.logback:logback-classic` from 1.4.11 to 1.4.13 - [Commits](https://github.com/qos-ch/logback/compare/v_1.4.11...v_1.4.13) Updates `ch.qos.logback:logback-core` from 1.4.11 to 1.4.13 - [Commits](https://github.com/qos-ch/logback/compare/v_1.4.11...v_1.4.13) --- updated-dependencies: - dependency-name: ch.qos.logback:logback-classic dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: ch.qos.logback:logback-core dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- modules/swagger-project-jakarta/pom.xml | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/swagger-project-jakarta/pom.xml b/modules/swagger-project-jakarta/pom.xml index e9166bbd58..94a8247d94 100644 --- a/modules/swagger-project-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/pom.xml @@ -576,7 +576,7 @@ 4.13.2 2.15.2 2.15.2 - 1.4.11 + 1.4.13 4.8.162 32.1.3-jre 1.10.13 diff --git a/pom.xml b/pom.xml index 1d6e508cef..d7dfeb5100 100644 --- a/pom.xml +++ b/pom.xml @@ -659,7 +659,7 @@ 4.13.2 2.15.2 2.15.2 - 1.4.11 + 1.4.13 4.8.162 32.1.3-jre 1.10.13 From 42c1b98e8dbfbc8322109bfb89a4b2edff82bd1e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Nov 2023 10:39:00 +0000 Subject: [PATCH 109/131] Bump jakarta.inject:jakarta.inject-api from 1.0 to 1.0.5 Bumps [jakarta.inject:jakarta.inject-api](https://github.com/eclipse-ee4j/injection-api) from 1.0 to 1.0.5. - [Release notes](https://github.com/eclipse-ee4j/injection-api/releases) - [Commits](https://github.com/eclipse-ee4j/injection-api/compare/1.0...1.0.5) --- updated-dependencies: - dependency-name: jakarta.inject:jakarta.inject-api dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- modules/swagger-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/swagger-core/pom.xml b/modules/swagger-core/pom.xml index 1893b791ac..9e773ea062 100644 --- a/modules/swagger-core/pom.xml +++ b/modules/swagger-core/pom.xml @@ -160,7 +160,7 @@ jakarta.inject jakarta.inject-api - 1.0 + 1.0.5 test From ad2554ffbca92a1fe8234c6c3c109b768bfab865 Mon Sep 17 00:00:00 2001 From: frantuma Date: Mon, 18 Dec 2023 20:39:54 +0100 Subject: [PATCH 110/131] update dependencies --- .../pom.xml | 6 +++--- modules/swagger-gradle-plugin/build.gradle | 10 +++++----- modules/swagger-jaxrs2/pom.xml | 4 ++-- modules/swagger-maven-plugin/pom.xml | 8 ++++---- modules/swagger-models/pom.xml | 2 +- .../modules/swagger-jaxrs2-jakarta/pom.xml | 2 +- .../swagger-maven-plugin-jakarta/pom.xml | 4 ++-- modules/swagger-project-jakarta/pom.xml | 20 +++++++++---------- pom.xml | 14 ++++++------- 9 files changed, 35 insertions(+), 35 deletions(-) diff --git a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml index 63cdb45b6a..458eac8f9c 100644 --- a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml +++ b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml @@ -13,7 +13,7 @@ swagger-eclipse-transformer-maven-plugin maven-plugin - 3.9.5 + 3.9.6 0.20 3.3.0 1.2.6 @@ -94,7 +94,7 @@ org.apache.maven.plugin-tools maven-plugin-annotations - 3.9.0 + 3.10.2 provided @@ -106,7 +106,7 @@ org.codehaus.plexus plexus-archiver - 4.8.0 + 4.9.0 test diff --git a/modules/swagger-gradle-plugin/build.gradle b/modules/swagger-gradle-plugin/build.gradle index 6354428330..d378eec636 100644 --- a/modules/swagger-gradle-plugin/build.gradle +++ b/modules/swagger-gradle-plugin/build.gradle @@ -24,7 +24,7 @@ compileJava { dependencies { implementation gradleApi() - implementation 'org.apache.commons:commons-lang3:3.13.0' + implementation 'org.apache.commons:commons-lang3:3.14.0' testImplementation gradleTestKit() testImplementation('com.github.tomakehurst:wiremock:2.27.2') { @@ -40,7 +40,7 @@ dependencies { } testImplementation 'javax.servlet:javax.servlet-api:3.1.0' testImplementation 'com.google.guava:guava:32.1.3-jre' - testImplementation 'javax.ws.rs:javax.ws.rs-api:2.1.1' + testImplementation 'javax.ws.rs:javax.ws.rs-api:2.1.6' testImplementation "io.swagger.core.v3:swagger-jaxrs2:${project.version}" testImplementation 'junit:junit:4+' testImplementation "org.eclipse.jetty:jetty-server:${project.jettyVersion}" @@ -48,10 +48,10 @@ dependencies { testImplementation "org.eclipse.jetty:jetty-servlets:${project.jettyVersion}" testImplementation "org.eclipse.jetty:jetty-webapp:${project.jettyVersion}" testImplementation "org.eclipse.jetty:jetty-proxy:${project.jettyVersion}" - testImplementation "org.apache.httpcomponents:httpclient:4.5.13" + testImplementation "org.apache.httpcomponents:httpclient:4.5.14" testImplementation "commons-codec:commons-codec:1.16.0" - testImplementation "commons-io:commons-io:2.14.0" - testImplementation "org.apache.commons:commons-compress:1.21" + testImplementation "commons-io:commons-io:2.15.1" + testImplementation "org.apache.commons:commons-compress:1.25.0" testImplementation "com.github.jknack:handlebars:4.3.1" testImplementation "com.github.jknack:handlebars-helpers:4.3.1" } diff --git a/modules/swagger-jaxrs2/pom.xml b/modules/swagger-jaxrs2/pom.xml index e91866d7d9..f78fee3dd0 100644 --- a/modules/swagger-jaxrs2/pom.xml +++ b/modules/swagger-jaxrs2/pom.xml @@ -174,7 +174,7 @@ org.javassist javassist - 3.29.2-GA + 3.30.1-GA commons-io @@ -239,7 +239,7 @@ org.jboss.arquillian.testng arquillian-testng-container - 1.7.1.Final + 1.8.0.Final test diff --git a/modules/swagger-maven-plugin/pom.xml b/modules/swagger-maven-plugin/pom.xml index b6f3c476f1..61c71d56d2 100644 --- a/modules/swagger-maven-plugin/pom.xml +++ b/modules/swagger-maven-plugin/pom.xml @@ -88,7 +88,7 @@ org.apache.maven.plugin-tools maven-plugin-annotations - 3.9.0 + 3.10.2 provided @@ -100,7 +100,7 @@ org.codehaus.plexus plexus-archiver - 4.8.0 + 4.9.0 test @@ -290,9 +290,9 @@ UTF-8 - 3.9.5 + 3.9.6 4.13.2 9.4.53.v20231009 - 1.24.0 + 1.25.0 diff --git a/modules/swagger-models/pom.xml b/modules/swagger-models/pom.xml index bb1a2e4597..d799de452d 100644 --- a/modules/swagger-models/pom.xml +++ b/modules/swagger-models/pom.xml @@ -98,6 +98,6 @@ 0.07 0.0 1.49 - 2.16.0 + 2.28.2 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml index a616c0d618..18a212da7c 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml @@ -32,7 +32,7 @@ org.javassist javassist - 3.29.2-GA + 3.30.1-GA commons-io diff --git a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml index 7919e045d5..52cfcafcd5 100644 --- a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml @@ -141,7 +141,7 @@ org.apache.maven.plugin-tools maven-plugin-annotations - 3.9.0 + 3.10.2 provided @@ -176,6 +176,6 @@ UTF-8 - 3.9.5 + 3.9.6 diff --git a/modules/swagger-project-jakarta/pom.xml b/modules/swagger-project-jakarta/pom.xml index 94a8247d94..7975cf35e5 100644 --- a/modules/swagger-project-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/pom.xml @@ -572,16 +572,16 @@ 2.1.2 6.4.0 5.0.0 - 3.1.3 + 3.1.5 4.13.2 - 2.15.2 - 2.15.2 - 1.4.13 - 4.8.162 + 2.16.0 + 2.16.0 + 1.4.14 + 4.8.165 32.1.3-jre - 1.10.13 - 3.13.0 - 2.15.0 + 1.10.14 + 3.14.0 + 2.15.1 2.0.9 9.4.53.v20231009 7.8.0 @@ -601,7 +601,7 @@ UTF-8 https://oss.sonatype.org/content/repositories/snapshots/ - 3.9.5 - 1.21 + 3.9.6 + 1.25.0 diff --git a/pom.xml b/pom.xml index d7dfeb5100..d83d987fb8 100644 --- a/pom.xml +++ b/pom.xml @@ -657,14 +657,14 @@ 4.0.4 2.41 4.13.2 - 2.15.2 - 2.15.2 - 1.4.13 - 4.8.162 + 2.16.0 + 2.16.0 + 1.4.14 + 4.8.165 32.1.3-jre - 1.10.13 - 3.13.0 - 2.15.0 + 1.10.14 + 3.14.0 + 2.15.1 2.0.9 9.4.53.v20231009 7.8.0 From 21a482e8a337cb35fac29a44a0f599ed3ac7be58 Mon Sep 17 00:00:00 2001 From: frantuma Date: Mon, 18 Dec 2023 22:51:49 +0100 Subject: [PATCH 111/131] switch to original eclipse transformer for jakarta artifacts --- modules/swagger-annotations/pom.xml | 19 ---- modules/swagger-core/pom.xml | 19 ---- modules/swagger-gradle-plugin/build.gradle | 2 +- modules/swagger-integration/pom.xml | 19 ---- .../pom.xml | 19 ---- .../pom.xml | 19 ---- modules/swagger-jaxrs2/pom.xml | 19 ---- modules/swagger-models/pom.xml | 19 ---- .../swagger-annotations-jakarta/pom.xml | 60 +++++++++++- .../transformed/README.md | 3 - .../modules/swagger-core-jakarta/pom.xml | 60 +++++++++++- .../transformed/README.md | 3 - .../swagger-integration-jakarta/pom.xml | 60 +++++++++++- .../transformed/README.md | 3 - .../modules/swagger-jaxrs2-jakarta/pom.xml | 60 +++++++++++- .../transformed/README.md | 3 - .../pom.xml | 60 +++++++++++- .../transformed/README.md | 3 - .../pom.xml | 60 +++++++++++- .../transformed/README.md | 3 - .../modules/swagger-models-jakarta/pom.xml | 60 +++++++++++- .../transformed/README.md | 3 - modules/swagger-project-jakarta/pom.xml | 93 +------------------ pom.xml | 23 +---- 24 files changed, 418 insertions(+), 274 deletions(-) delete mode 100644 modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/transformed/README.md delete mode 100644 modules/swagger-project-jakarta/modules/swagger-core-jakarta/transformed/README.md delete mode 100644 modules/swagger-project-jakarta/modules/swagger-integration-jakarta/transformed/README.md delete mode 100644 modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/transformed/README.md delete mode 100644 modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/transformed/README.md delete mode 100644 modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/transformed/README.md delete mode 100644 modules/swagger-project-jakarta/modules/swagger-models-jakarta/transformed/README.md diff --git a/modules/swagger-annotations/pom.xml b/modules/swagger-annotations/pom.xml index cbb644dfe8..000c895f73 100644 --- a/modules/swagger-annotations/pom.xml +++ b/modules/swagger-annotations/pom.xml @@ -30,25 +30,6 @@ - - io.swagger.core.v3 - swagger-eclipse-transformer-maven-plugin - ${project.version} - - false - jakarta - ${project.basedir}/../swagger-project-jakarta/modules/${project.artifactId}-jakarta/transformed - - - - transform-jakarta - - run - - package - - - diff --git a/modules/swagger-core/pom.xml b/modules/swagger-core/pom.xml index 9e773ea062..32744c9603 100644 --- a/modules/swagger-core/pom.xml +++ b/modules/swagger-core/pom.xml @@ -46,25 +46,6 @@ - - io.swagger.core.v3 - swagger-eclipse-transformer-maven-plugin - ${project.version} - - false - jakarta - ${project.basedir}/../swagger-project-jakarta/modules/${project.artifactId}-jakarta/transformed - - - - transform-jakarta - - run - - package - - - diff --git a/modules/swagger-gradle-plugin/build.gradle b/modules/swagger-gradle-plugin/build.gradle index d378eec636..6f5ff46769 100644 --- a/modules/swagger-gradle-plugin/build.gradle +++ b/modules/swagger-gradle-plugin/build.gradle @@ -40,7 +40,7 @@ dependencies { } testImplementation 'javax.servlet:javax.servlet-api:3.1.0' testImplementation 'com.google.guava:guava:32.1.3-jre' - testImplementation 'javax.ws.rs:javax.ws.rs-api:2.1.6' + testImplementation 'javax.ws.rs:javax.ws.rs-api:2.1.1' testImplementation "io.swagger.core.v3:swagger-jaxrs2:${project.version}" testImplementation 'junit:junit:4+' testImplementation "org.eclipse.jetty:jetty-server:${project.jettyVersion}" diff --git a/modules/swagger-integration/pom.xml b/modules/swagger-integration/pom.xml index ccda48ae4f..b3616fc685 100644 --- a/modules/swagger-integration/pom.xml +++ b/modules/swagger-integration/pom.xml @@ -58,25 +58,6 @@ - - io.swagger.core.v3 - swagger-eclipse-transformer-maven-plugin - ${project.version} - - false - jakarta - ${project.basedir}/../swagger-project-jakarta/modules/${project.artifactId}-jakarta/transformed - - - - transform-jakarta - - run - - package - - - diff --git a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml index bfc1f2f85e..ff74316afb 100644 --- a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml @@ -113,25 +113,6 @@ - - io.swagger.core.v3 - swagger-eclipse-transformer-maven-plugin - ${project.version} - - false - jakarta - ${project.basedir}/../swagger-project-jakarta/modules/${project.artifactId}-jakarta/transformed - - - - transform-jakarta - - run - - package - - - diff --git a/modules/swagger-jaxrs2-servlet-initializer/pom.xml b/modules/swagger-jaxrs2-servlet-initializer/pom.xml index bc63bbf751..76e5609d76 100644 --- a/modules/swagger-jaxrs2-servlet-initializer/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer/pom.xml @@ -118,25 +118,6 @@ - - io.swagger.core.v3 - swagger-eclipse-transformer-maven-plugin - ${project.version} - - false - jakarta - ${project.basedir}/../swagger-project-jakarta/modules/${project.artifactId}-jakarta/transformed - - - - transform-jakarta - - run - - package - - - diff --git a/modules/swagger-jaxrs2/pom.xml b/modules/swagger-jaxrs2/pom.xml index f78fee3dd0..63cc1cd5cb 100644 --- a/modules/swagger-jaxrs2/pom.xml +++ b/modules/swagger-jaxrs2/pom.xml @@ -120,25 +120,6 @@ - - io.swagger.core.v3 - swagger-eclipse-transformer-maven-plugin - ${project.version} - - false - jakarta - ${project.basedir}/../swagger-project-jakarta/modules/${project.artifactId}-jakarta/transformed - - - - transform-jakarta - - run - - package - - - diff --git a/modules/swagger-models/pom.xml b/modules/swagger-models/pom.xml index d799de452d..18b5994d2e 100644 --- a/modules/swagger-models/pom.xml +++ b/modules/swagger-models/pom.xml @@ -44,25 +44,6 @@ -Djdk.attach.allowAttachSelf - - io.swagger.core.v3 - swagger-eclipse-transformer-maven-plugin - ${project.version} - - false - jakarta - ${project.basedir}/../swagger-project-jakarta/modules/${project.artifactId}-jakarta/transformed - - - - transform-jakarta - - run - - package - - - diff --git a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml index 6275c6dd5a..03cbfbf642 100644 --- a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml @@ -12,7 +12,65 @@ swagger-annotations-jakarta swagger-annotations-jakarta - + + + + org.eclipse.transformer + transformer-maven-plugin + ${transformer-maven-plugin-version} + true + + + true + + ${project.build.finalName}-jakarta + + + + default-jar + + jar + + + + ${project.groupId} + swagger-annotations + ${project.version} + + + + + javadoc-jar + + jar + + + + ${project.groupId} + swagger-annotations + ${project.version} + javadoc + + + + + source-jar + + jar + + + + ${project.groupId} + swagger-annotations + ${project.version} + sources + + + + + + + diff --git a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/transformed/README.md b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/transformed/README.md deleted file mode 100644 index e96b3ae207..0000000000 --- a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/transformed/README.md +++ /dev/null @@ -1,3 +0,0 @@ -#### Don't delete - -Target directory for eclipse transformer plugin; Jakarta EE 9+ artifacts are generated in this directory diff --git a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml index a78c40c7b7..5d2ea4ae7c 100644 --- a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml @@ -12,7 +12,65 @@ swagger-core-jakarta swagger-core-jakarta - + + + + org.eclipse.transformer + transformer-maven-plugin + ${transformer-maven-plugin-version} + true + + + true + + ${project.build.finalName}-jakarta + + + + default-jar + + jar + + + + ${project.groupId} + swagger-core + ${project.version} + + + + + javadoc-jar + + jar + + + + ${project.groupId} + swagger-core + ${project.version} + javadoc + + + + + source-jar + + jar + + + + ${project.groupId} + swagger-core + ${project.version} + sources + + + + + + + diff --git a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/transformed/README.md b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/transformed/README.md deleted file mode 100644 index e96b3ae207..0000000000 --- a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/transformed/README.md +++ /dev/null @@ -1,3 +0,0 @@ -#### Don't delete - -Target directory for eclipse transformer plugin; Jakarta EE 9+ artifacts are generated in this directory diff --git a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml index e6948be780..72ed782075 100644 --- a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml @@ -12,7 +12,65 @@ swagger-integration-jakarta swagger-integration-jakarta - + + + + org.eclipse.transformer + transformer-maven-plugin + ${transformer-maven-plugin-version} + true + + + true + + ${project.build.finalName}-jakarta + + + + default-jar + + jar + + + + ${project.groupId} + swagger-integration + ${project.version} + + + + + javadoc-jar + + jar + + + + ${project.groupId} + swagger-integration + ${project.version} + javadoc + + + + + source-jar + + jar + + + + ${project.groupId} + swagger-integration + ${project.version} + sources + + + + + + + diff --git a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/transformed/README.md b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/transformed/README.md deleted file mode 100644 index e96b3ae207..0000000000 --- a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/transformed/README.md +++ /dev/null @@ -1,3 +0,0 @@ -#### Don't delete - -Target directory for eclipse transformer plugin; Jakarta EE 9+ artifacts are generated in this directory diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml index 18a212da7c..c4cf468413 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml @@ -12,7 +12,65 @@ swagger-jaxrs2-jakarta swagger-jaxrs2-jakarta - + + + + org.eclipse.transformer + transformer-maven-plugin + ${transformer-maven-plugin-version} + true + + + true + + ${project.build.finalName}-jakarta + + + + default-jar + + jar + + + + ${project.groupId} + swagger-jaxrs2 + ${project.version} + + + + + javadoc-jar + + jar + + + + ${project.groupId} + swagger-jaxrs2 + ${project.version} + javadoc + + + + + source-jar + + jar + + + + ${project.groupId} + swagger-jaxrs2 + ${project.version} + sources + + + + + + + diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/transformed/README.md b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/transformed/README.md deleted file mode 100644 index e96b3ae207..0000000000 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/transformed/README.md +++ /dev/null @@ -1,3 +0,0 @@ -#### Don't delete - -Target directory for eclipse transformer plugin; Jakarta EE 9+ artifacts are generated in this directory diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml index 228d9f1b64..5e8778f848 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml @@ -12,7 +12,65 @@ swagger-jaxrs2-servlet-initializer-jakarta swagger-jaxrs2-servlet-initializer-jakarta - + + + + org.eclipse.transformer + transformer-maven-plugin + ${transformer-maven-plugin-version} + true + + + true + + ${project.build.finalName}-jakarta + + + + default-jar + + jar + + + + ${project.groupId} + swagger-jaxrs2-servlet-initializer + ${project.version} + + + + + javadoc-jar + + jar + + + + ${project.groupId} + swagger-jaxrs2-servlet-initializer + ${project.version} + javadoc + + + + + source-jar + + jar + + + + ${project.groupId} + swagger-jaxrs2-servlet-initializer + ${project.version} + sources + + + + + + + diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/transformed/README.md b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/transformed/README.md deleted file mode 100644 index e96b3ae207..0000000000 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/transformed/README.md +++ /dev/null @@ -1,3 +0,0 @@ -#### Don't delete - -Target directory for eclipse transformer plugin; Jakarta EE 9+ artifacts are generated in this directory diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml index dc151cc8cc..7ee9307be4 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml @@ -12,7 +12,65 @@ swagger-jaxrs2-servlet-initializer-v2-jakarta swagger-jaxrs2-servlet-initializer-v2-jakarta - + + + + org.eclipse.transformer + transformer-maven-plugin + ${transformer-maven-plugin-version} + true + + + true + + ${project.build.finalName}-jakarta + + + + default-jar + + jar + + + + ${project.groupId} + swagger-jaxrs2-servlet-initializer-v2 + ${project.version} + + + + + javadoc-jar + + jar + + + + ${project.groupId} + swagger-jaxrs2-servlet-initializer-v2 + ${project.version} + javadoc + + + + + source-jar + + jar + + + + ${project.groupId} + swagger-jaxrs2-servlet-initializer-v2 + ${project.version} + sources + + + + + + + diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/transformed/README.md b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/transformed/README.md deleted file mode 100644 index e96b3ae207..0000000000 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/transformed/README.md +++ /dev/null @@ -1,3 +0,0 @@ -#### Don't delete - -Target directory for eclipse transformer plugin; Jakarta EE 9+ artifacts are generated in this directory diff --git a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml index f8871634bd..4b29d44e6d 100644 --- a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml @@ -12,7 +12,65 @@ swagger-models-jakarta swagger-models-jakarta - + + + + org.eclipse.transformer + transformer-maven-plugin + ${transformer-maven-plugin-version} + true + + + true + + ${project.build.finalName}-jakarta + + + + default-jar + + jar + + + + ${project.groupId} + swagger-models + ${project.version} + + + + + javadoc-jar + + jar + + + + ${project.groupId} + swagger-models + ${project.version} + javadoc + + + + + source-jar + + jar + + + + ${project.groupId} + swagger-models + ${project.version} + sources + + + + + + + diff --git a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/transformed/README.md b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/transformed/README.md deleted file mode 100644 index e96b3ae207..0000000000 --- a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/transformed/README.md +++ /dev/null @@ -1,3 +0,0 @@ -#### Don't delete - -Target directory for eclipse transformer plugin; Jakarta EE 9+ artifacts are generated in this directory diff --git a/modules/swagger-project-jakarta/pom.xml b/modules/swagger-project-jakarta/pom.xml index 7975cf35e5..915d13b5eb 100644 --- a/modules/swagger-project-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/pom.xml @@ -111,95 +111,6 @@ - - org.apache.maven.plugins - maven-source-plugin - 3.3.0 - - true - true - - - - attach-sources - verify - - jar-no-fork - - - - - - org.apache.maven.plugins - maven-javadoc-plugin - 3.6.2 - - true - 1.8 - UTF-8 - 1g - - http://docs.oracle.com/javase/8/docs/api - - ${javadoc.package.exclude} - - - - attach-javadocs - verify - - jar - - - - - - org.apache.maven.plugins - maven-jar-plugin - 3.3.0 - - - empty-javadoc-jar - package - - jar - - - javadoc - ${basedir}/javadoc - - - - - - maven-resources-plugin - - 3.1.0 - - - copy-resources - package - - copy-resources - - - ${project.build.directory} - true - - - transformed - false - - ${project.artifactId}-${project.version}.jar - - - - - - - - - org.sonatype.plugins nexus-staging-maven-plugin @@ -568,7 +479,7 @@ 2.2 3.1.0 3.0.2 - 2.3.3 + 3.0.1 2.1.2 6.4.0 5.0.0 @@ -600,7 +511,7 @@ UTF-8 https://oss.sonatype.org/content/repositories/snapshots/ - + 0.5.0 3.9.6 1.25.0 diff --git a/pom.xml b/pom.xml index d83d987fb8..c4872133b7 100644 --- a/pom.xml +++ b/pom.xml @@ -222,25 +222,6 @@ true--> - @@ -416,7 +397,6 @@ - modules/swagger-eclipse-transformer-maven-plugin modules/swagger-annotations modules/swagger-models modules/swagger-core @@ -425,6 +405,7 @@ modules/swagger-jaxrs2-servlet-initializer modules/swagger-jaxrs2-servlet-initializer-v2 modules/swagger-maven-plugin + modules/swagger-eclipse-transformer-maven-plugin modules/swagger-project-jakarta @@ -680,7 +661,7 @@ 0.90 0.90 0 - + 0.5.0 UTF-8 https://oss.sonatype.org/content/repositories/snapshots/ From acd716e7ced9d5e12f676ca938a78cacbe24ecfe Mon Sep 17 00:00:00 2001 From: frantuma Date: Tue, 19 Dec 2023 06:59:30 +0000 Subject: [PATCH 112/131] prepare release 2.2.20 --- README.md | 5 +++-- modules/swagger-annotations/pom.xml | 2 +- modules/swagger-core/pom.xml | 2 +- .../swagger-eclipse-transformer-maven-plugin/pom.xml | 2 +- modules/swagger-gradle-plugin/README.md | 4 ++-- modules/swagger-gradle-plugin/gradle.properties | 2 +- .../io/swagger/v3/plugins/gradle/SwaggerPlugin.java | 2 +- .../v3/plugins/gradle/SwaggerResolveTest.java | 4 ++-- modules/swagger-integration/pom.xml | 2 +- .../swagger-jaxrs2-servlet-initializer-v2/pom.xml | 2 +- modules/swagger-jaxrs2-servlet-initializer/pom.xml | 2 +- modules/swagger-jaxrs2/pom.xml | 2 +- modules/swagger-maven-plugin/README.md | 12 ++++++------ modules/swagger-maven-plugin/pom.xml | 2 +- modules/swagger-models/pom.xml | 2 +- .../modules/swagger-annotations-jakarta/pom.xml | 2 +- .../modules/swagger-core-jakarta/pom.xml | 2 +- .../modules/swagger-integration-jakarta/pom.xml | 2 +- .../modules/swagger-jaxrs2-jakarta/pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../modules/swagger-maven-plugin-jakarta/pom.xml | 2 +- .../modules/swagger-models-jakarta/pom.xml | 2 +- modules/swagger-project-jakarta/pom.xml | 2 +- pom.xml | 2 +- 25 files changed, 34 insertions(+), 33 deletions(-) diff --git a/README.md b/README.md index 3b1c77d0dd..1da10a3d03 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,8 @@ The OpenAPI Specification has undergone several revisions since initial creation Swagger core Version | Release Date | OpenAPI Spec compatibility | Notes | Status ------------------------- | ------------ | -------------------------- | ----- | ---- -2.2.19 (**current stable**)| 2023-11-10 | 3.x | [tag v2.2.19](https://github.com/swagger-api/swagger-core/tree/v2.2.19) | Supported +2.2.20 (**current stable**)| 2023-12-19 | 3.x | [tag v2.2.20](https://github.com/swagger-api/swagger-core/tree/v2.2.20) | Supported +2.2.19 | 2023-11-10 | 3.x | [tag v2.2.19](https://github.com/swagger-api/swagger-core/tree/v2.2.19) | Supported 2.2.18 | 2023-10-25 | 3.x | [tag v2.2.18](https://github.com/swagger-api/swagger-core/tree/v2.2.18) | Supported 2.2.17 | 2023-10-12 | 3.x | [tag v2.2.17](https://github.com/swagger-api/swagger-core/tree/v2.2.17) | Supported 2.2.16 | 2023-09-18 | 3.x | [tag v2.2.16](https://github.com/swagger-api/swagger-core/tree/v2.2.16) | Supported @@ -110,7 +111,7 @@ You need the following installed and available in your $PATH: * Jackson 2.4.5 or greater -### To build from source (currently 2.2.20-SNAPSHOT) +### To build from source (currently 2.2.21-SNAPSHOT) ``` # first time building locally mvn -N diff --git a/modules/swagger-annotations/pom.xml b/modules/swagger-annotations/pom.xml index 000c895f73..592e938a5a 100644 --- a/modules/swagger-annotations/pom.xml +++ b/modules/swagger-annotations/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.20-SNAPSHOT + 2.2.20 ../.. 4.0.0 diff --git a/modules/swagger-core/pom.xml b/modules/swagger-core/pom.xml index 32744c9603..15b7f70a62 100644 --- a/modules/swagger-core/pom.xml +++ b/modules/swagger-core/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.20-SNAPSHOT + 2.2.20 ../.. 4.0.0 diff --git a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml index 458eac8f9c..52299673c5 100644 --- a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml +++ b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.20-SNAPSHOT + 2.2.20 ../.. 4.0.0 diff --git a/modules/swagger-gradle-plugin/README.md b/modules/swagger-gradle-plugin/README.md index bad75cab73..928e32fc2e 100644 --- a/modules/swagger-gradle-plugin/README.md +++ b/modules/swagger-gradle-plugin/README.md @@ -26,7 +26,7 @@ Alternatively provide as value a classpath with the following dependencies (repl ``` plugins { - id "io.swagger.core.v3.swagger-gradle-plugin" version "2.2.19" + id "io.swagger.core.v3.swagger-gradle-plugin" version "2.2.20" } ``` ### Gradle 1.x and 2.0 @@ -43,7 +43,7 @@ buildscript { } } dependencies { - classpath "io.swagger.core.v3:swagger-gradle-plugin:2.2.19" + classpath "io.swagger.core.v3:swagger-gradle-plugin:2.2.20" } } diff --git a/modules/swagger-gradle-plugin/gradle.properties b/modules/swagger-gradle-plugin/gradle.properties index 15318ed5c6..a5137af194 100644 --- a/modules/swagger-gradle-plugin/gradle.properties +++ b/modules/swagger-gradle-plugin/gradle.properties @@ -1,2 +1,2 @@ -version=2.2.20-SNAPSHOT +version=2.2.20 jettyVersion=9.4.53.v20231009 diff --git a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java index fb06ffa149..1aee43590c 100644 --- a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java +++ b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java @@ -16,7 +16,7 @@ public void apply(Project project) { config.defaultDependencies(new Action() { public void execute(DependencySet dependencies) { dependencies.add(project.getDependencies().create("org.apache.commons:commons-lang3:3.12.0")); - dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.20-SNAPSHOT")); + dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.20")); dependencies.add(project.getDependencies().create("javax.ws.rs:javax.ws.rs-api:2.1")); dependencies.add(project.getDependencies().create("javax.servlet:javax.servlet-api:3.1.0")); } diff --git a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java index f3ad813124..1a39c71b52 100644 --- a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java +++ b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java @@ -81,7 +81,7 @@ public void testSwaggerResolveTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.20-SNAPSHOT'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.20'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + @@ -154,7 +154,7 @@ public void testSwaggerResolveWithOAS31OptionTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.20-SNAPSHOT'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.20'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + diff --git a/modules/swagger-integration/pom.xml b/modules/swagger-integration/pom.xml index b3616fc685..6174e016d1 100644 --- a/modules/swagger-integration/pom.xml +++ b/modules/swagger-integration/pom.xml @@ -6,7 +6,7 @@ io.swagger.core.v3 swagger-project - 2.2.20-SNAPSHOT + 2.2.20 ../.. swagger-integration diff --git a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml index ff74316afb..cc4bd97664 100644 --- a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.20-SNAPSHOT + 2.2.20 ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2-servlet-initializer/pom.xml b/modules/swagger-jaxrs2-servlet-initializer/pom.xml index 76e5609d76..7f4f52ce3c 100644 --- a/modules/swagger-jaxrs2-servlet-initializer/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.20-SNAPSHOT + 2.2.20 ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2/pom.xml b/modules/swagger-jaxrs2/pom.xml index 63cc1cd5cb..89ec65075e 100644 --- a/modules/swagger-jaxrs2/pom.xml +++ b/modules/swagger-jaxrs2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.20-SNAPSHOT + 2.2.20 ../../ 4.0.0 diff --git a/modules/swagger-maven-plugin/README.md b/modules/swagger-maven-plugin/README.md index 2438bd32fb..44ca25bbab 100644 --- a/modules/swagger-maven-plugin/README.md +++ b/modules/swagger-maven-plugin/README.md @@ -22,7 +22,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin - 2.2.19 + 2.2.20 openapi ${project.build.directory}/generatedtest @@ -47,7 +47,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-jaxrs2 - 2.2.19 + 2.2.20 @@ -73,7 +73,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin-jakarta - 2.2.19 + 2.2.20 openapi ${project.build.directory}/generatedtest @@ -98,7 +98,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-jaxrs2-jakarta - 2.2.19 + 2.2.20 @@ -126,7 +126,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin - 2.2.19 + 2.2.20 openapi ${project.build.directory}/generatedtest @@ -155,7 +155,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin-jakarta - 2.2.19 + 2.2.20 openapi ${project.build.directory}/generatedtest diff --git a/modules/swagger-maven-plugin/pom.xml b/modules/swagger-maven-plugin/pom.xml index 61c71d56d2..6ed245e341 100644 --- a/modules/swagger-maven-plugin/pom.xml +++ b/modules/swagger-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.20-SNAPSHOT + 2.2.20 ../.. 4.0.0 diff --git a/modules/swagger-models/pom.xml b/modules/swagger-models/pom.xml index 18b5994d2e..276df61532 100644 --- a/modules/swagger-models/pom.xml +++ b/modules/swagger-models/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.20-SNAPSHOT + 2.2.20 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml index 03cbfbf642..4e943ee116 100644 --- a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.20-SNAPSHOT + 2.2.20 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml index 5d2ea4ae7c..563c05dad9 100644 --- a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.20-SNAPSHOT + 2.2.20 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml index 72ed782075..524d322f73 100644 --- a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.20-SNAPSHOT + 2.2.20 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml index c4cf468413..54960146d7 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.20-SNAPSHOT + 2.2.20 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml index 5e8778f848..9c8d9863c7 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.20-SNAPSHOT + 2.2.20 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml index 7ee9307be4..7ff8e7a113 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.20-SNAPSHOT + 2.2.20 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml index 52cfcafcd5..33b57206a9 100644 --- a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.20-SNAPSHOT + 2.2.20 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml index 4b29d44e6d..a860ac8057 100644 --- a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.20-SNAPSHOT + 2.2.20 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/pom.xml b/modules/swagger-project-jakarta/pom.xml index 915d13b5eb..4268289632 100644 --- a/modules/swagger-project-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/pom.xml @@ -6,7 +6,7 @@ pom swagger-project-jakarta swagger-project-jakarta - 2.2.20-SNAPSHOT + 2.2.20 https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git diff --git a/pom.xml b/pom.xml index c4872133b7..be798afdb6 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ pom swagger-project swagger-project - 2.2.20-SNAPSHOT + 2.2.20 https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git From d6f39656dd7ca8767cac46b9c5f4421d2b1ac272 Mon Sep 17 00:00:00 2001 From: frantuma Date: Tue, 19 Dec 2023 07:19:54 +0000 Subject: [PATCH 113/131] bump snapshot 2.2.21-SNAPSHOT --- modules/swagger-annotations/pom.xml | 2 +- modules/swagger-core/pom.xml | 2 +- modules/swagger-eclipse-transformer-maven-plugin/pom.xml | 2 +- modules/swagger-gradle-plugin/gradle.properties | 2 +- .../main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java | 2 +- .../java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java | 4 ++-- modules/swagger-integration/pom.xml | 2 +- modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml | 2 +- modules/swagger-jaxrs2-servlet-initializer/pom.xml | 2 +- modules/swagger-jaxrs2/pom.xml | 2 +- modules/swagger-maven-plugin/pom.xml | 2 +- modules/swagger-models/pom.xml | 2 +- .../modules/swagger-annotations-jakarta/pom.xml | 2 +- .../modules/swagger-core-jakarta/pom.xml | 2 +- .../modules/swagger-integration-jakarta/pom.xml | 2 +- .../modules/swagger-jaxrs2-jakarta/pom.xml | 2 +- .../swagger-jaxrs2-servlet-initializer-jakarta/pom.xml | 2 +- .../swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml | 2 +- .../modules/swagger-maven-plugin-jakarta/pom.xml | 2 +- .../modules/swagger-models-jakarta/pom.xml | 2 +- modules/swagger-project-jakarta/pom.xml | 2 +- pom.xml | 2 +- 22 files changed, 23 insertions(+), 23 deletions(-) diff --git a/modules/swagger-annotations/pom.xml b/modules/swagger-annotations/pom.xml index 592e938a5a..eece698af6 100644 --- a/modules/swagger-annotations/pom.xml +++ b/modules/swagger-annotations/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.20 + 2.2.21-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-core/pom.xml b/modules/swagger-core/pom.xml index 15b7f70a62..62db3cfe7b 100644 --- a/modules/swagger-core/pom.xml +++ b/modules/swagger-core/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.20 + 2.2.21-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml index 52299673c5..8fc5d3bd3a 100644 --- a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml +++ b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.20 + 2.2.21-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-gradle-plugin/gradle.properties b/modules/swagger-gradle-plugin/gradle.properties index a5137af194..cf6a3b28f9 100644 --- a/modules/swagger-gradle-plugin/gradle.properties +++ b/modules/swagger-gradle-plugin/gradle.properties @@ -1,2 +1,2 @@ -version=2.2.20 +version=2.2.21-SNAPSHOT jettyVersion=9.4.53.v20231009 diff --git a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java index 1aee43590c..68bed8e4bb 100644 --- a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java +++ b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java @@ -16,7 +16,7 @@ public void apply(Project project) { config.defaultDependencies(new Action() { public void execute(DependencySet dependencies) { dependencies.add(project.getDependencies().create("org.apache.commons:commons-lang3:3.12.0")); - dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.20")); + dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.21-SNAPSHOT")); dependencies.add(project.getDependencies().create("javax.ws.rs:javax.ws.rs-api:2.1")); dependencies.add(project.getDependencies().create("javax.servlet:javax.servlet-api:3.1.0")); } diff --git a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java index 1a39c71b52..6fd5333cf2 100644 --- a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java +++ b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java @@ -81,7 +81,7 @@ public void testSwaggerResolveTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.20'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.21-SNAPSHOT'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + @@ -154,7 +154,7 @@ public void testSwaggerResolveWithOAS31OptionTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.20'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.21-SNAPSHOT'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + diff --git a/modules/swagger-integration/pom.xml b/modules/swagger-integration/pom.xml index 6174e016d1..27e5445d7a 100644 --- a/modules/swagger-integration/pom.xml +++ b/modules/swagger-integration/pom.xml @@ -6,7 +6,7 @@ io.swagger.core.v3 swagger-project - 2.2.20 + 2.2.21-SNAPSHOT ../.. swagger-integration diff --git a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml index cc4bd97664..ff4992c6fc 100644 --- a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.20 + 2.2.21-SNAPSHOT ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2-servlet-initializer/pom.xml b/modules/swagger-jaxrs2-servlet-initializer/pom.xml index 7f4f52ce3c..7276104e16 100644 --- a/modules/swagger-jaxrs2-servlet-initializer/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.20 + 2.2.21-SNAPSHOT ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2/pom.xml b/modules/swagger-jaxrs2/pom.xml index 89ec65075e..82c7d8d8a3 100644 --- a/modules/swagger-jaxrs2/pom.xml +++ b/modules/swagger-jaxrs2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.20 + 2.2.21-SNAPSHOT ../../ 4.0.0 diff --git a/modules/swagger-maven-plugin/pom.xml b/modules/swagger-maven-plugin/pom.xml index 6ed245e341..af7252d3b8 100644 --- a/modules/swagger-maven-plugin/pom.xml +++ b/modules/swagger-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.20 + 2.2.21-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-models/pom.xml b/modules/swagger-models/pom.xml index 276df61532..9416d48034 100644 --- a/modules/swagger-models/pom.xml +++ b/modules/swagger-models/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.20 + 2.2.21-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml index 4e943ee116..8499e0073c 100644 --- a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.20 + 2.2.21-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml index 563c05dad9..15d2f0ab89 100644 --- a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.20 + 2.2.21-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml index 524d322f73..88bf860caf 100644 --- a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.20 + 2.2.21-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml index 54960146d7..66e7a36ffd 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.20 + 2.2.21-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml index 9c8d9863c7..30284f7385 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.20 + 2.2.21-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml index 7ff8e7a113..1cf5b4bcca 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.20 + 2.2.21-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml index 33b57206a9..2f1ab9219b 100644 --- a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.20 + 2.2.21-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml index a860ac8057..113ac83380 100644 --- a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.20 + 2.2.21-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/pom.xml b/modules/swagger-project-jakarta/pom.xml index 4268289632..2219480bda 100644 --- a/modules/swagger-project-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/pom.xml @@ -6,7 +6,7 @@ pom swagger-project-jakarta swagger-project-jakarta - 2.2.20 + 2.2.21-SNAPSHOT https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git diff --git a/pom.xml b/pom.xml index be798afdb6..bfb5c7978d 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ pom swagger-project swagger-project - 2.2.20 + 2.2.21-SNAPSHOT https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git From f6e7edd952e8ae4cca9892622ebcf7f180bccdb9 Mon Sep 17 00:00:00 2001 From: frantuma Date: Tue, 19 Dec 2023 08:49:01 +0100 Subject: [PATCH 114/131] fix CodeQL --- .github/workflows/codeql-analysis.yml | 46 ++++++++++++++++----------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index e779f27914..e8b535dd8f 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -13,10 +13,17 @@ jobs: CodeQL-Build: runs-on: ubuntu-latest + permissions: + actions: read + contents: read + security-events: write + + strategy: + fail-fast: false steps: - name: Checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@v4 with: # We must fetch at least the immediate parents so that if this is # a pull request then we can checkout the head. @@ -27,28 +34,29 @@ jobs: - run: git checkout HEAD^2 if: ${{ github.event_name == 'pull_request' }} + - name: Set up Java + uses: actions/setup-java@v1 + with: + java-version: 11 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v1 + uses: github/codeql-action/init@v3 # Override language selection by uncommenting this and choosing your languages with: languages: java - # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). - # If this step fails, then you should remove it and run the build manually (see below) - - name: Autobuild - uses: github/codeql-action/autobuild@v1 - - # ℹ️ Command-line programs to run using the OS shell. - # 📚 https://git.io/JvXDl - - # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines - # and modify them (or add more) to build your code if your project - # uses a compiled language - - #- run: | - # make bootstrap - # make release - + - name: Cache local Maven repository + uses: actions/cache@v2 + with: + path: ~/.m2/repository + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + restore-keys: | + ${{ runner.os }}-maven- + - name: Build with Maven and Gradle + run: | + ./mvnw --no-transfer-progress -B install --file pom.xml + cd ./modules/swagger-gradle-plugin + ./gradlew build --info + cd ../.. - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v1 + uses: github/codeql-action/analyze@v3 From 16ec5eba37be88eee90e356701acdaf00a119ee0 Mon Sep 17 00:00:00 2001 From: MicRyc Date: Fri, 12 Jan 2024 14:18:29 +0100 Subject: [PATCH 115/131] Add 'groovy.lang' to ModelConverters skipped packages --- .../io/swagger/v3/core/converter/ModelConverters.java | 5 +++-- .../swagger/v3/core/converting/ModelConverterTest.java | 9 +++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/converter/ModelConverters.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/converter/ModelConverters.java index 5f6008648a..27ba3a39a3 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/converter/ModelConverters.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/converter/ModelConverters.java @@ -25,7 +25,7 @@ public class ModelConverters { private static ModelConverters SINGLETON31 = null; static Logger LOGGER = LoggerFactory.getLogger(ModelConverters.class); private final List converters; - private final Set skippedPackages = new HashSet<>(); + public final Set skippedPackages = new HashSet<>(); private final Set skippedClasses = new HashSet<>(); public ModelConverters() { @@ -58,7 +58,8 @@ public static ModelConverters getInstance(boolean openapi31) { } private static void init(ModelConverters converter) { - converter.skippedPackages.add("java.lang"); + converter.addPackageToSkip("java.lang"); + converter.addPackageToSkip("groovy.lang"); ServiceLoader loader = ServiceLoader.load(ModelConverter.class); Iterator itr = loader.iterator(); diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/converting/ModelConverterTest.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/converting/ModelConverterTest.java index aa6f886519..80c3068d6f 100644 --- a/modules/swagger-core/src/test/java/io/swagger/v3/core/converting/ModelConverterTest.java +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/converting/ModelConverterTest.java @@ -383,6 +383,14 @@ public void indirectPropertiesRecognized() { assertEquals(model.getProperties().size(), 1); } + @Test + public void checkDefaultSkippedPackages(){ + ModelConverters modelConverters = ModelConverters.getInstance(); + + assertTrue(modelConverters.skippedPackages.contains("java.lang")); + assertTrue(modelConverters.skippedPackages.contains("groovy.lang")); + } + @JsonSerialize(as = AnnotatedImplementationClass.class) abstract class BaseClass { public abstract String field(); @@ -406,6 +414,7 @@ public void directPropertiesRecognized() { assertEquals(model.getProperties().size(), 1); } + abstract class AnnotatedBaseClass { @JsonProperty public abstract String field(); From 796edea0ac4cfb76d5ee06892dae85293c5dbf73 Mon Sep 17 00:00:00 2001 From: MicRyc Date: Mon, 15 Jan 2024 09:49:19 +0100 Subject: [PATCH 116/131] Add process test --- .../swagger/v3/core/converting/ModelConverterTest.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/converting/ModelConverterTest.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/converting/ModelConverterTest.java index 80c3068d6f..8781f113f0 100644 --- a/modules/swagger-core/src/test/java/io/swagger/v3/core/converting/ModelConverterTest.java +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/converting/ModelConverterTest.java @@ -391,6 +391,15 @@ public void checkDefaultSkippedPackages(){ assertTrue(modelConverters.skippedPackages.contains("groovy.lang")); } + @Test(description = "It should not process skipped package") + public void ignoreSkippedPackage() throws ClassNotFoundException { + ModelConverters modelConverters = ModelConverters.getInstance(); + final Type type = Class.forName("java.lang.String"); + assertNull(modelConverters.readAllAsResolvedSchema(type)); + + + } + @JsonSerialize(as = AnnotatedImplementationClass.class) abstract class BaseClass { public abstract String field(); From 5545dd20a3be8f2ef8bc30e7bbd43d0e336bebb2 Mon Sep 17 00:00:00 2001 From: MicRyc Date: Mon, 15 Jan 2024 10:39:37 +0100 Subject: [PATCH 117/131] Change skippedPackages access modifier to private --- .../java/io/swagger/v3/core/converter/ModelConverters.java | 6 +++++- .../io/swagger/v3/core/converting/ModelConverterTest.java | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/converter/ModelConverters.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/converter/ModelConverters.java index 27ba3a39a3..0bb9c21f02 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/converter/ModelConverters.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/converter/ModelConverters.java @@ -25,7 +25,7 @@ public class ModelConverters { private static ModelConverters SINGLETON31 = null; static Logger LOGGER = LoggerFactory.getLogger(ModelConverters.class); private final List converters; - public final Set skippedPackages = new HashSet<>(); + private final Set skippedPackages = new HashSet<>(); private final Set skippedClasses = new HashSet<>(); public ModelConverters() { @@ -42,6 +42,10 @@ public ModelConverters(boolean openapi31) { } } + public Set getSkippedPackages() { + return skippedPackages; + } + public static ModelConverters getInstance(boolean openapi31) { if (openapi31) { if (SINGLETON31 == null) { diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/converting/ModelConverterTest.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/converting/ModelConverterTest.java index 8781f113f0..13a0fa1220 100644 --- a/modules/swagger-core/src/test/java/io/swagger/v3/core/converting/ModelConverterTest.java +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/converting/ModelConverterTest.java @@ -387,8 +387,8 @@ public void indirectPropertiesRecognized() { public void checkDefaultSkippedPackages(){ ModelConverters modelConverters = ModelConverters.getInstance(); - assertTrue(modelConverters.skippedPackages.contains("java.lang")); - assertTrue(modelConverters.skippedPackages.contains("groovy.lang")); + assertTrue(modelConverters.getSkippedPackages().contains("java.lang")); + assertTrue(modelConverters.getSkippedPackages().contains("groovy.lang")); } @Test(description = "It should not process skipped package") From 5a01ed6b9d3973fe7a815b75578a7d80abcfea5d Mon Sep 17 00:00:00 2001 From: Francesco Tumanischvili Date: Thu, 18 Jan 2024 10:10:33 +0100 Subject: [PATCH 118/131] Replace log error with warning in reflection with type not found --- .../src/main/java/io/swagger/v3/core/util/ReflectionUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/ReflectionUtils.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/ReflectionUtils.java index a1bb422ee9..307058ad53 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/ReflectionUtils.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/ReflectionUtils.java @@ -34,7 +34,7 @@ public static Type typeFromString(String type) { try { return loadClassByName(type); } catch (Exception e) { - LOGGER.error(String.format("Failed to resolve '%s' into class", type), e); + LOGGER.warn(String.format("Failed to resolve '%s' into class", type), e); } return null; } From 4cbfcfdec774961259f70845b1d33f5401f321ab Mon Sep 17 00:00:00 2001 From: MicRyc Date: Thu, 18 Jan 2024 09:46:43 +0100 Subject: [PATCH 119/131] Add JAX-RS v2.2 tolerance by swagger-core --- modules/swagger-core/pom.xml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/modules/swagger-core/pom.xml b/modules/swagger-core/pom.xml index 62db3cfe7b..30e285f00f 100644 --- a/modules/swagger-core/pom.xml +++ b/modules/swagger-core/pom.xml @@ -19,7 +19,10 @@ bnd-maven-plugin - Import-Package: javax.validation.constraints;version="[1.1,3)",* + Import-Package: \ + javax.validation.constraints;version="[1.1,3)", \ + javax.xml.bind.annotation;version="[2.2,3)", \ + * From 5186247f9c9703bd962f9df95289bb942a648398 Mon Sep 17 00:00:00 2001 From: frantuma Date: Fri, 19 Jan 2024 09:43:59 +0100 Subject: [PATCH 120/131] fix #4589 - fix tests with Java 21 (list first/last) --- .../swagger/v3/core/resolving/resources/BidimensionalArray.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/resources/BidimensionalArray.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/resources/BidimensionalArray.java index 8f95134f8c..3272b4fbfa 100644 --- a/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/resources/BidimensionalArray.java +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/resources/BidimensionalArray.java @@ -19,7 +19,7 @@ public class BidimensionalArray { @ArraySchema(maxItems = 2) - @JsonIgnoreProperties({"empty"}) + @JsonIgnoreProperties({"empty", "first", "last"}) public static interface Foo extends List { } From 0d067d03b6ef78a78efe3e4f957f977254c72030 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Rychel?= <121518786+micryc@users.noreply.github.com> Date: Thu, 1 Feb 2024 14:03:01 +0100 Subject: [PATCH 121/131] Add Header Object missing attributes (#4608) * Add explode attribute to header annotation * Add hidden attribute * Add example,examples attributes * Add array attribute * Add explode,hidden,example and examples attributes tests * Add Header with ArraySchema attribute test * Delete sout in test * Fix schema implementation parsing process * Delete unused imports and spaces * Fix schema implementation test * Fix APIs backward compatibility * Add space after coma * Refs #4196 - reintroduce original getHeader(s) methods signatures --------- Co-authored-by: frantuma --- .../v3/oas/annotations/headers/Header.java | 39 +++ .../v3/core/util/AnnotationsUtils.java | 86 ++++- .../AnnotationsUtilsHeadersTest.java | 2 +- .../io/swagger/v3/jaxrs2/OperationParser.java | 2 +- .../AnnotatedOperationMethodTest.java | 298 +++++++++++++++++- 5 files changed, 418 insertions(+), 9 deletions(-) diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/headers/Header.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/headers/Header.java index f4562ad2f8..b9bc2031c3 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/headers/Header.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/headers/Header.java @@ -1,5 +1,8 @@ package io.swagger.v3.oas.annotations.headers; +import io.swagger.v3.oas.annotations.enums.Explode; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; import java.lang.annotation.Inherited; @@ -64,4 +67,40 @@ **/ String ref() default ""; + + /** + * When this is true, parameter values of type array or object generate separate parameters for each value of the array or key-value pair of the map. For other types of parameters this property has no effect. When style is form, the default value is true. For all other styles, the default value is false. Ignored if the properties content or array are specified. + * + * @return whether or not to expand individual array members + **/ + Explode explode() default Explode.DEFAULT; + + /** + * Allows this header to be marked as hidden + * + * @return whether or not this header is hidden + */ + boolean hidden() default false; + + /** + * 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. Ignored if the properties examples, content or array are specified. + * + * @return an example of the header + **/ + String example() default ""; + + /** + * An array of examples of the schema used to show the use of the associated schema. + * + * @return array of examples of the header + **/ + ExampleObject[] examples() default {}; + + /** + * The schema of the array that defines this header. Ignored if the property content is specified. + * + * @return the schema of the array + */ + ArraySchema array() default @ArraySchema(); + } diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java index 9e9af0ab83..bd19af4b6b 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java @@ -10,6 +10,7 @@ import io.swagger.v3.core.converter.ModelConverters; import io.swagger.v3.core.converter.ResolvedSchema; import io.swagger.v3.oas.annotations.StringToClassMapItem; +import io.swagger.v3.oas.annotations.enums.Explode; import io.swagger.v3.oas.annotations.extensions.Extension; import io.swagger.v3.oas.annotations.extensions.ExtensionProperty; import io.swagger.v3.oas.annotations.links.LinkParameter; @@ -41,7 +42,6 @@ import org.apache.commons.lang3.math.NumberUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import java.io.IOException; import java.lang.annotation.Annotation; import java.lang.reflect.Field; @@ -1288,17 +1288,24 @@ public static Map getLinkParameters(LinkParameter[] linkParamete } public static Optional> getHeaders(io.swagger.v3.oas.annotations.headers.Header[] annotationHeaders, JsonView jsonViewAnnotation) { - return getHeaders(annotationHeaders, jsonViewAnnotation, false); + return getHeaders(annotationHeaders, null, jsonViewAnnotation); + } + public static Optional> getHeaders(io.swagger.v3.oas.annotations.headers.Header[] annotationHeaders, Components components, JsonView jsonViewAnnotation) { + return getHeaders(annotationHeaders, components, jsonViewAnnotation, false); } public static Optional> getHeaders(io.swagger.v3.oas.annotations.headers.Header[] annotationHeaders, JsonView jsonViewAnnotation, boolean openapi31) { + return getHeaders(annotationHeaders, null, jsonViewAnnotation, openapi31); + } + + public static Optional> getHeaders(io.swagger.v3.oas.annotations.headers.Header[] annotationHeaders, Components components, JsonView jsonViewAnnotation, boolean openapi31) { if (annotationHeaders == null) { return Optional.empty(); } Map headers = new HashMap<>(); for (io.swagger.v3.oas.annotations.headers.Header header : annotationHeaders) { - getHeader(header, jsonViewAnnotation).ifPresent(headerResult -> headers.put(header.name(), headerResult)); + getHeader(header, components, jsonViewAnnotation, openapi31).ifPresent(headerResult -> headers.put(header.name(), headerResult)); } if (headers.size() == 0) { @@ -1308,12 +1315,18 @@ public static Optional> getHeaders(io.swagger.v3.oas.annotat } public static Optional
getHeader(io.swagger.v3.oas.annotations.headers.Header header, JsonView jsonViewAnnotation) { - return getHeader(header, jsonViewAnnotation, false); + return getHeader(header, null, jsonViewAnnotation); + } + public static Optional
getHeader(io.swagger.v3.oas.annotations.headers.Header header, Components components, JsonView jsonViewAnnotation) { + return getHeader(header, components, jsonViewAnnotation, false); } public static Optional
getHeader(io.swagger.v3.oas.annotations.headers.Header header, JsonView jsonViewAnnotation, boolean openapi31) { + return getHeader(header, null, jsonViewAnnotation, openapi31); + } + public static Optional
getHeader(io.swagger.v3.oas.annotations.headers.Header header, Components components, JsonView jsonViewAnnotation, boolean openapi31) { - if (header == null) { + if (header == null || header.hidden()) { return Optional.empty(); } @@ -1327,6 +1340,13 @@ public static Optional
getHeader(io.swagger.v3.oas.annotations.headers.H headerObject.set$ref(header.ref()); isEmpty = false; } + if (StringUtils.isNotBlank(header.example())) { + try { + headerObject.setExample(Json.mapper().readTree(header.example())); + } catch (IOException e) { + headerObject.setExample(header.example()); + } + } if (header.deprecated()) { headerObject.setDeprecated(header.deprecated()); } @@ -1334,15 +1354,45 @@ public static Optional
getHeader(io.swagger.v3.oas.annotations.headers.H headerObject.setRequired(header.required()); isEmpty = false; } + Map exampleMap = new LinkedHashMap<>(); + if (header.examples().length == 1 && StringUtils.isBlank(header.examples()[0].name())) { + Optional exampleOptional = AnnotationsUtils.getExample(header.examples()[0], true); + exampleOptional.ifPresent(headerObject::setExample); + } else { + for (ExampleObject exampleObject : header.examples()) { + AnnotationsUtils.getExample(exampleObject).ifPresent(example -> exampleMap.put(exampleObject.name(), example)); + } + } + if (!exampleMap.isEmpty()) { + headerObject.setExamples(exampleMap); + } headerObject.setStyle(Header.StyleEnum.SIMPLE); if (header.schema() != null) { if (header.schema().implementation().equals(Void.class)) { AnnotationsUtils.getSchemaFromAnnotation(header.schema(), jsonViewAnnotation, openapi31).ifPresent( headerObject::setSchema); + }else { + AnnotatedType annotatedType = new AnnotatedType() + .type(getSchemaType(header.schema())) + .resolveAsRef(true) + .skipOverride(true) + .jsonViewAnnotation(jsonViewAnnotation); + + final ResolvedSchema resolvedSchema = ModelConverters.getInstance(openapi31).resolveAsResolvedSchema(annotatedType); + + if (resolvedSchema.schema != null) { + headerObject.setSchema(resolvedSchema.schema); + } + resolvedSchema.referencedSchemas.forEach(components::addSchemas); } } + if (hasArrayAnnotation(header.array())){ + AnnotationsUtils.getArraySchema(header.array(), components, jsonViewAnnotation, openapi31, null, true).ifPresent( + headerObject::setSchema); + } + setHeaderExplode(headerObject, header); if (isEmpty) { return Optional.empty(); } @@ -1350,6 +1400,30 @@ public static Optional
getHeader(io.swagger.v3.oas.annotations.headers.H return Optional.of(headerObject); } + public static void setHeaderExplode (Header header, io.swagger.v3.oas.annotations.headers.Header h) { + if (isHeaderExplodable(h, header)) { + if (Explode.TRUE.equals(h.explode())) { + header.setExplode(Boolean.TRUE); + } else if (Explode.FALSE.equals(h.explode())) { + header.setExplode(Boolean.FALSE); + } + } + } + + private static boolean isHeaderExplodable(io.swagger.v3.oas.annotations.headers.Header h, Header header) { + io.swagger.v3.oas.annotations.media.Schema schema = h.schema(); + boolean explode = true; + if (schema != null) { + Class implementation = schema.implementation(); + if (implementation == Void.class) { + if (!schema.type().equals("object") && !schema.type().equals("array")) { + explode = false; + } + } + } + return explode; + } + public static void addEncodingToMediaType(MediaType mediaType, io.swagger.v3.oas.annotations.media.Encoding encoding, JsonView jsonViewAnnotation) { addEncodingToMediaType(mediaType, encoding, jsonViewAnnotation, false); } @@ -1376,7 +1450,7 @@ public static void addEncodingToMediaType(MediaType mediaType, io.swagger.v3.oas } if (encoding.headers() != null) { - getHeaders(encoding.headers(), jsonViewAnnotation, openapi31).ifPresent(encodingObject::headers); + getHeaders(encoding.headers(), null, jsonViewAnnotation, openapi31).ifPresent(encodingObject::headers); } if (encoding.extensions() != null && encoding.extensions().length > 0) { Map extensions = AnnotationsUtils.getExtensions(openapi31, encoding.extensions()); diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/AnnotationsUtilsHeadersTest.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/AnnotationsUtilsHeadersTest.java index a080ddb408..26065877d4 100644 --- a/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/AnnotationsUtilsHeadersTest.java +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/AnnotationsUtilsHeadersTest.java @@ -46,7 +46,7 @@ public void extensionsTest(String methodName, .flatMap(response -> Arrays.stream(response.headers())).toArray(Header[]::new); final Optional> optionalMap = - AnnotationsUtils.getHeaders(headers, null); + AnnotationsUtils.getHeaders(headers, null, null); Assert.assertEquals(optionalMap, expected); } diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/OperationParser.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/OperationParser.java index b3f803e62f..599d1cd49d 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/OperationParser.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/OperationParser.java @@ -93,7 +93,7 @@ public static Optional getApiResponses(final io.swagger.v3.oas.ann AnnotationsUtils.getContent(response.content(), classProduces == null ? new String[0] : classProduces.value(), methodProduces == null ? new String[0] : methodProduces.value(), null, components, jsonViewAnnotation, openapi31).ifPresent(apiResponseObject::content); - AnnotationsUtils.getHeaders(response.headers(), jsonViewAnnotation).ifPresent(apiResponseObject::headers); + AnnotationsUtils.getHeaders(response.headers(), components, jsonViewAnnotation).ifPresent(apiResponseObject::headers); if (StringUtils.isNotBlank(apiResponseObject.getDescription()) || apiResponseObject.getContent() != null || apiResponseObject.getHeaders() != null) { Map links = AnnotationsUtils.getLinks(response.links()); diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/annotations/operations/AnnotatedOperationMethodTest.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/annotations/operations/AnnotatedOperationMethodTest.java index 6d9f4aede4..b2ed91a39d 100644 --- a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/annotations/operations/AnnotatedOperationMethodTest.java +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/annotations/operations/AnnotatedOperationMethodTest.java @@ -10,15 +10,16 @@ import io.swagger.v3.jaxrs2.resources.UserResource; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.enums.Explode; import io.swagger.v3.oas.annotations.enums.ParameterIn; import io.swagger.v3.oas.annotations.headers.Header; +import io.swagger.v3.oas.annotations.media.ArraySchema; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import org.testng.annotations.Test; - import javax.ws.rs.GET; import javax.ws.rs.Path; import java.io.IOException; @@ -171,6 +172,10 @@ static class SampleResponseSchema { public String id; } + static class SampleHeaderSchema { + public String id; + } + static class GenericError { public int code; public String message; @@ -346,6 +351,79 @@ static class GetOperationWithResponseMultipleHeaders { responseCode = "200", description = "voila!", headers = {@Header( + explode = Explode.TRUE, + name = "Rate-Limit-Limit", + description = "The number of allowed requests in the current period", + schema = @Schema(type = "integer")), + @Header( + name = "X-Rate-Limit-Desc", + description = "The description of rate limit", + schema = @Schema(type = "string"))}) + }) + @GET + @Path("/path") + public void simpleGet() { + } + } + + @Test + public void testOperationWithResponseArraySchema() { + String openApiYAML = readIntoYaml(GetOperationResponseHeaderWithArraySchema.class); + int start = openApiYAML.indexOf("get:"); + String extractedYAML = openApiYAML.substring(start); + String expectedYAML = "get:\n" + + " summary: Simple get operation\n" + + " description: Defines a simple get operation with no inputs and a complex output\n" + + " operationId: getWithPayloadResponse\n" + + " responses:\n" + + " \"200\":\n" + + " description: voila!\n" + + " headers:\n" + + " Rate-Limit-Limit:\n" + + " description: The number of allowed requests in the current period\n" + + " style: simple\n" + + " schema:\n" + + " maxItems: 10\n" + + " minItems: 1\n" + + " type: array\n" + + " items:\n" + + " type: integer\n" + + " deprecated: true\n"; + assertEquals(expectedYAML, extractedYAML); + } + + static class GetOperationResponseHeaderWithArraySchema { + @Operation( + summary = "Simple get operation", + description = "Defines a simple get operation with no inputs and a complex output", + operationId = "getWithPayloadResponse", + deprecated = true, + responses = { + @ApiResponse( + responseCode = "200", + description = "voila!", + headers = {@Header( + name = "Rate-Limit-Limit", + description = "The number of allowed requests in the current period", + array = @ArraySchema(maxItems = 10, minItems = 1,schema = @Schema(type = "integer")))})}) + @GET + @Path("/path") + public void simpleGet() { + } + } + + static class GetOperationResponseWithoutHiddenHeader { + @Operation( + summary = "Simple get operation", + description = "Defines a simple get operation with no inputs and a complex output", + operationId = "getWithPayloadResponse", + deprecated = true, + responses = { + @ApiResponse( + responseCode = "200", + description = "voila!", + headers = {@Header( + hidden = true, name = "Rate-Limit-Limit", description = "The number of allowed requests in the current period", schema = @Schema(type = "integer")), @@ -360,6 +438,72 @@ public void simpleGet() { } } + static class GetOperationWithResponseMultipleHeadersAndExamples { + @Operation( + summary = "Simple get operation", + description = "Defines a simple get operation with no inputs and a complex output", + operationId = "getWithPayloadResponse", + deprecated = true, + responses = { + @ApiResponse( + responseCode = "200", + description = "voila!", + headers = {@Header( + examples = { + @ExampleObject( + name = "ex 1", + description = "example description", + value = "example value" + ), + @ExampleObject( + name = "ex 2", + description = "example description 2", + value = "example value 2" + ) + }, + name = "Rate-Limit-Limit", + description = "The number of allowed requests in the current period", + schema = @Schema(type = "object")), + @Header( + name = "X-Rate-Limit-Desc", + description = "The description of rate limit", + array = @ArraySchema(schema = @Schema()), + example = "example1")}) + + }) + @GET + @Path("/path") + public void simpleGet() { + } + } + + static class GetOperationResponseWithHeaderExplodeAttribute { + @Operation( + summary = "Simple get operation", + description = "Defines a simple get operation with no inputs and a complex output", + operationId = "getWithPayloadResponse", + deprecated = true, + responses = { + @ApiResponse( + responseCode = "200", + description = "voila!", + headers = {@Header( + name = "Rate-Limit-Limit", + description = "The number of allowed requests in the current period", + explode = Explode.TRUE, + schema = @Schema(type = "object")), + @Header( + name = "X-Rate-Limit-Desc", + description = "The description of rate limit", + explode = Explode.FALSE, + schema = @Schema(type = "array"))}) + }) + @GET + @Path("/path") + public void simpleGet() { + } + } + @Test public void testOperationWithResponseMultipleHeaders() { String openApiYAML = readIntoYaml(GetOperationWithResponseMultipleHeaders.class); @@ -387,6 +531,158 @@ public void testOperationWithResponseMultipleHeaders() { assertEquals(expectedYAML, extractedYAML); } + static class GetOperationWithResponseMultipleHeadersWithImplementationSchema { + @Operation( + summary = "Simple get operation", + description = "Defines a simple get operation with no inputs and a complex output", + operationId = "getWithPayloadResponse", + deprecated = true, + responses = { + @ApiResponse( + responseCode = "200", + description = "voila!", + headers = {@Header( + explode = Explode.TRUE, + name = "Rate-Limit-Limit", + description = "The number of allowed requests in the current period", + array = @ArraySchema(maxItems = 10, minItems = 1,schema = @Schema(implementation = SampleHeaderSchema.class))), + @Header( + explode = Explode.TRUE, + name = "X-Rate-Limit-Desc", + description = "The description of rate limit", + schema = @Schema(implementation = SampleHeaderSchema.class))})}) + + + + @GET + @Path("/path") + public void simpleGet() { + } + } + + @Test + public void testOperationWithResponseMultipleHeadersImplementationSchema() { + String openApiYAML = readIntoYaml(GetOperationWithResponseMultipleHeadersWithImplementationSchema.class); + int start = openApiYAML.indexOf("get:"); + String extractedYAML = openApiYAML.substring(start); + String expectedYAML = "get:\n" + + " summary: Simple get operation\n" + + " description: Defines a simple get operation with no inputs and a complex output\n" + + " operationId: getWithPayloadResponse\n" + + " responses:\n" + + " \"200\":\n" + + " description: voila!\n" + + " headers:\n" + + " X-Rate-Limit-Desc:\n" + + " description: The description of rate limit\n" + + " style: simple\n" + + " explode: true\n" + + " schema:\n" + + " $ref: '#/components/schemas/SampleHeaderSchema'\n" + + " Rate-Limit-Limit:\n" + + " description: The number of allowed requests in the current period\n" + + " style: simple\n" + + " schema:\n" + + " maxItems: 10\n" + + " minItems: 1\n" + + " type: array\n" + + " items:\n" + + " $ref: '#/components/schemas/SampleHeaderSchema'\n" + + " deprecated: true\n" + + "components:\n" + + " schemas:\n" + + " SampleHeaderSchema:\n" + + " type: object\n" + + " properties:\n" + + " id:\n" + + " type: string\n"; + assertEquals(expectedYAML, extractedYAML); + } + + @Test + public void testOperationWithResponseMultipleHeadersAndExplodeAttribute() { + String openApiYAML = readIntoYaml(GetOperationResponseWithHeaderExplodeAttribute.class); + int start = openApiYAML.indexOf("get:"); + String extractedYAML = openApiYAML.substring(start); + String expectedYAML = "get:\n" + + " summary: Simple get operation\n" + + " description: Defines a simple get operation with no inputs and a complex output\n" + + " operationId: getWithPayloadResponse\n" + + " responses:\n" + + " \"200\":\n" + + " description: voila!\n" + + " headers:\n" + + " X-Rate-Limit-Desc:\n" + + " description: The description of rate limit\n" + + " style: simple\n" + + " explode: false\n" + + " schema:\n" + + " type: array\n" + + " Rate-Limit-Limit:\n" + + " description: The number of allowed requests in the current period\n" + + " style: simple\n" + + " explode: true\n" + + " schema:\n" + + " type: object\n" + + " deprecated: true\n"; + assertEquals(expectedYAML, extractedYAML); + } + + @Test + public void testOperationResponseWithoutHiddenHeader() { + String openApiYAML = readIntoYaml(GetOperationResponseWithoutHiddenHeader.class); + int start = openApiYAML.indexOf("get:"); + String extractedYAML = openApiYAML.substring(start); + String expectedYAML = "get:\n" + + " summary: Simple get operation\n" + + " description: Defines a simple get operation with no inputs and a complex output\n" + + " operationId: getWithPayloadResponse\n" + + " responses:\n" + + " \"200\":\n" + + " description: voila!\n" + + " headers:\n" + + " X-Rate-Limit-Desc:\n" + + " description: The description of rate limit\n" + + " style: simple\n" + + " schema:\n" + + " type: string\n" + + " deprecated: true\n"; + assertEquals(expectedYAML, extractedYAML); + } + + @Test + public void testOperationWithResponseMultipleHeadersAndExamples() { + String openApiYAML = readIntoYaml(GetOperationWithResponseMultipleHeadersAndExamples.class); + int start = openApiYAML.indexOf("get:"); + String extractedYAML = openApiYAML.substring(start); + String expectedYAML = "get:\n" + + " summary: Simple get operation\n" + + " description: Defines a simple get operation with no inputs and a complex output\n" + + " operationId: getWithPayloadResponse\n" + + " responses:\n" + + " \"200\":\n" + + " description: voila!\n" + + " headers:\n" + + " X-Rate-Limit-Desc:\n" + + " description: The description of rate limit\n" + + " style: simple\n" + + " example: example1\n" + + " Rate-Limit-Limit:\n" + + " description: The number of allowed requests in the current period\n" + + " style: simple\n" + + " schema:\n" + + " type: object\n" + + " examples:\n" + + " ex 1:\n" + + " description: example description\n" + + " value: example value\n" + + " ex 2:\n" + + " description: example description 2\n" + + " value: example value 2\n" + + " deprecated: true\n"; + assertEquals(expectedYAML, extractedYAML); + } + @Test(description = "reads the pet resource from sample") public void testCompletePetResource() throws IOException { String expectedYAML = "openapi: 3.0.1\n" + From 78a11e9af3435bf0144b88a082638eb6f262abee Mon Sep 17 00:00:00 2001 From: frantuma Date: Mon, 5 Feb 2024 10:46:45 +0100 Subject: [PATCH 122/131] refs #4610 - deprecate and fix ArraySchema.items processing (switch to ArraySchema.schema) --- .../io/swagger/v3/oas/annotations/media/ArraySchema.java | 3 ++- .../main/java/io/swagger/v3/core/jackson/ModelResolver.java | 6 ++++++ .../swagger/v3/core/resolving/v31/model/AnnotatedArray.java | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/ArraySchema.java b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/ArraySchema.java index 186ade23f7..baabd6ecbe 100644 --- a/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/ArraySchema.java +++ b/modules/swagger-annotations/src/main/java/io/swagger/v3/oas/annotations/media/ArraySchema.java @@ -39,9 +39,10 @@ * * @since 2.2.12 * + * @deprecated since 2.2.21, use {@link #schema()} instead. Marked for removal in future versions. * @return items */ - + @Deprecated Schema items() default @Schema; /** 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 eb6ae9e473..fc86e2184c 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 @@ -2936,11 +2936,17 @@ private void resolveArraySchema(AnnotatedType annotatedType, ArraySchema schema, schema.addPrefixItem(prefixItem); } } + // TODO `ArraySchema.items` is deprecated, when removed, remove this block if (schema.getItems() != null && AnnotationsUtils.hasSchemaAnnotation(resolvedArrayAnnotation.items())) { for (String type : resolvedArrayAnnotation.items().types()) { schema.getItems().addType(type); } } + if (schema.getItems() != null && AnnotationsUtils.hasSchemaAnnotation(resolvedArrayAnnotation.schema())) { + for (String type : resolvedArrayAnnotation.schema().types()) { + schema.getItems().addType(type); + } + } } } } diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/AnnotatedArray.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/AnnotatedArray.java index 566a98f116..9e49f750d6 100644 --- a/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/AnnotatedArray.java +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/AnnotatedArray.java @@ -12,7 +12,7 @@ unevaluatedItems = @Schema( types = { "number" } ), - items = @Schema( + schema = @Schema( types = { "string" } ), prefixItems = { From 914564f2dbdeb80ded0f9e0c4acd08f6bdab8137 Mon Sep 17 00:00:00 2001 From: MicRyc Date: Mon, 5 Feb 2024 11:48:07 +0100 Subject: [PATCH 123/131] Fix isExplode method and explode tests --- .../main/java/io/swagger/v3/core/util/AnnotationsUtils.java | 2 +- .../java/io/swagger/v3/core/util/ParameterProcessor.java | 2 +- .../annotations/operations/AnnotatedOperationMethodTest.java | 1 + .../v3/jaxrs2/annotations/parameters/ParametersTest.java | 5 +++++ .../src/test/resources/petstore/FullPetResource.yaml | 5 +++++ .../resources/petstore/parameters/ArraySchemaResource.yaml | 1 + .../resources/petstore/parameters/Parameters31Resource.yaml | 2 ++ .../resources/petstore/parameters/ParametersResource.yaml | 2 ++ .../petstore/parameters/RepeatableParametersResource.yaml | 2 ++ 9 files changed, 20 insertions(+), 2 deletions(-) diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java index bd19af4b6b..4124acea79 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java @@ -1411,7 +1411,7 @@ public static void setHeaderExplode (Header header, io.swagger.v3.oas.annotation } private static boolean isHeaderExplodable(io.swagger.v3.oas.annotations.headers.Header h, Header header) { - io.swagger.v3.oas.annotations.media.Schema schema = h.schema(); + io.swagger.v3.oas.annotations.media.Schema schema = hasArrayAnnotation(h.array()) ? h.array().schema() : h.schema(); boolean explode = true; if (schema != null) { Class implementation = schema.implementation(); diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/ParameterProcessor.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/ParameterProcessor.java index e49ae8cc1a..5c977bdfed 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/ParameterProcessor.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/ParameterProcessor.java @@ -234,7 +234,7 @@ public static void setParameterExplode(Parameter parameter, io.swagger.v3.oas.an } private static boolean isExplodable(io.swagger.v3.oas.annotations.Parameter p, Parameter parameter) { - io.swagger.v3.oas.annotations.media.Schema schema = p.schema(); + io.swagger.v3.oas.annotations.media.Schema schema = AnnotationsUtils.hasArrayAnnotation(p.array()) ? p.array().schema() : p.schema(); boolean explode = true; if ("form".equals(parameter.getIn())){ return true; diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/annotations/operations/AnnotatedOperationMethodTest.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/annotations/operations/AnnotatedOperationMethodTest.java index b2ed91a39d..f17409fde4 100644 --- a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/annotations/operations/AnnotatedOperationMethodTest.java +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/annotations/operations/AnnotatedOperationMethodTest.java @@ -582,6 +582,7 @@ public void testOperationWithResponseMultipleHeadersImplementationSchema() { " Rate-Limit-Limit:\n" + " description: The number of allowed requests in the current period\n" + " style: simple\n" + + " explode: true\n" + " schema:\n" + " maxItems: 10\n" + " minItems: 1\n" + diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/annotations/parameters/ParametersTest.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/annotations/parameters/ParametersTest.java index 1f3d282f45..625dcf67b9 100644 --- a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/annotations/parameters/ParametersTest.java +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/annotations/parameters/ParametersTest.java @@ -88,6 +88,7 @@ public void testParameters() { " - name: arrayParameter\n" + " in: query\n" + " required: true\n" + + " explode: true\n" + " content:\n" + " application/json:\n" + " schema:\n" + @@ -102,6 +103,7 @@ public void testParameters() { " - name: arrayParameterImplementation\n" + " in: query\n" + " required: true\n" + + " explode: true\n" + " schema:\n" + " maxItems: 10\n" + " minItems: 1\n" + @@ -148,6 +150,7 @@ public void testArraySchemaParameters() { " - name: arrayParameter\n" + " in: query\n" + " required: true\n" + + " explode: true\n" + " schema:\n" + " maxItems: 10\n" + " minItems: 1\n" + @@ -220,6 +223,7 @@ public void testRepeatableParameters() { " - name: arrayParameter\n" + " in: query\n" + " required: true\n" + + " explode: true\n" + " content:\n" + " application/json:\n" + " schema:\n" + @@ -234,6 +238,7 @@ public void testRepeatableParameters() { " - name: arrayParameterImplementation\n" + " in: query\n" + " required: true\n" + + " explode: true\n" + " schema:\n" + " maxItems: 10\n" + " minItems: 1\n" + diff --git a/modules/swagger-jaxrs2/src/test/resources/petstore/FullPetResource.yaml b/modules/swagger-jaxrs2/src/test/resources/petstore/FullPetResource.yaml index 9360aa0882..5312ec646c 100644 --- a/modules/swagger-jaxrs2/src/test/resources/petstore/FullPetResource.yaml +++ b/modules/swagger-jaxrs2/src/test/resources/petstore/FullPetResource.yaml @@ -631,6 +631,7 @@ paths: - name: arrayParameter in: query required: true + explode: true schema: maxItems: 10 minItems: 1 @@ -787,6 +788,7 @@ paths: - name: arrayParameter in: query required: true + explode: true content: application/json: schema: @@ -801,6 +803,7 @@ paths: - name: arrayParameterImplementation in: query required: true + explode: true schema: maxItems: 10 minItems: 1 @@ -868,6 +871,7 @@ paths: - name: arrayParameter in: query required: true + explode: true content: application/json: schema: @@ -882,6 +886,7 @@ paths: - name: arrayParameterImplementation in: query required: true + explode: true schema: maxItems: 10 minItems: 1 diff --git a/modules/swagger-jaxrs2/src/test/resources/petstore/parameters/ArraySchemaResource.yaml b/modules/swagger-jaxrs2/src/test/resources/petstore/parameters/ArraySchemaResource.yaml index 78260504d3..66d9ccc3a9 100644 --- a/modules/swagger-jaxrs2/src/test/resources/petstore/parameters/ArraySchemaResource.yaml +++ b/modules/swagger-jaxrs2/src/test/resources/petstore/parameters/ArraySchemaResource.yaml @@ -10,6 +10,7 @@ paths: - name: arrayParameter in: query required: true + explode: true schema: maxItems: 10 minItems: 1 diff --git a/modules/swagger-jaxrs2/src/test/resources/petstore/parameters/Parameters31Resource.yaml b/modules/swagger-jaxrs2/src/test/resources/petstore/parameters/Parameters31Resource.yaml index 6a6bbc2596..3cb83e1350 100644 --- a/modules/swagger-jaxrs2/src/test/resources/petstore/parameters/Parameters31Resource.yaml +++ b/modules/swagger-jaxrs2/src/test/resources/petstore/parameters/Parameters31Resource.yaml @@ -44,6 +44,7 @@ paths: - name: arrayParameter in: query required: true + explode: true content: application/json: schema: @@ -58,6 +59,7 @@ paths: - name: arrayParameterImplementation in: query required: true + explode: true schema: type: array contains: {} diff --git a/modules/swagger-jaxrs2/src/test/resources/petstore/parameters/ParametersResource.yaml b/modules/swagger-jaxrs2/src/test/resources/petstore/parameters/ParametersResource.yaml index bb61ce726d..c1117da046 100644 --- a/modules/swagger-jaxrs2/src/test/resources/petstore/parameters/ParametersResource.yaml +++ b/modules/swagger-jaxrs2/src/test/resources/petstore/parameters/ParametersResource.yaml @@ -42,6 +42,7 @@ paths: - name: arrayParameter in: query required: true + explode: true content: application/json: schema: @@ -56,6 +57,7 @@ paths: - name: arrayParameterImplementation in: query required: true + explode: true schema: maxItems: 10 minItems: 1 diff --git a/modules/swagger-jaxrs2/src/test/resources/petstore/parameters/RepeatableParametersResource.yaml b/modules/swagger-jaxrs2/src/test/resources/petstore/parameters/RepeatableParametersResource.yaml index a163e8f543..a3d6054874 100644 --- a/modules/swagger-jaxrs2/src/test/resources/petstore/parameters/RepeatableParametersResource.yaml +++ b/modules/swagger-jaxrs2/src/test/resources/petstore/parameters/RepeatableParametersResource.yaml @@ -42,6 +42,7 @@ paths: - name: arrayParameter in: query required: true + explode: true content: application/json: schema: @@ -56,6 +57,7 @@ paths: - name: arrayParameterImplementation in: query required: true + explode: true schema: maxItems: 10 minItems: 1 From 3fcc473c33c56f306902853a451020926ad691ea Mon Sep 17 00:00:00 2001 From: Frantisek Simon Date: Tue, 13 Feb 2024 13:55:57 +0100 Subject: [PATCH 124/131] Fix #4618: process array schema in OpenAPI 3.1 same as in OpenAPI 3.0 --- .../io/swagger/v3/core/filter/SpecFilter.java | 2 + .../v3/core/filter/SpecFilterTest.java | 18 +++++ .../resources/specFiles/3.1.0/list-3.1.json | 78 +++++++++++++++++++ 3 files changed, 98 insertions(+) create mode 100644 modules/swagger-core/src/test/resources/specFiles/3.1.0/list-3.1.json diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/filter/SpecFilter.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/filter/SpecFilter.java index c4f5b6d2af..f930ff9a64 100755 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/filter/SpecFilter.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/filter/SpecFilter.java @@ -308,6 +308,8 @@ private void addSchemaRef(Schema schema, Set referencedDefinitions) { if (schema instanceof ArraySchema && ((ArraySchema) schema).getItems() != null) { addSchemaRef(((ArraySchema) schema).getItems(), referencedDefinitions); + } else if (schema.getTypes() != null && schema.getTypes().contains("array") && schema.getItems() != null) { + addSchemaRef(schema.getItems(), referencedDefinitions); } else if (schema instanceof ComposedSchema) { ComposedSchema composedSchema = (ComposedSchema) schema; if (composedSchema.getAllOf() != null) { diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/filter/SpecFilterTest.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/filter/SpecFilterTest.java index 3065f48c45..9ffb7c687e 100644 --- a/modules/swagger-core/src/test/java/io/swagger/v3/core/filter/SpecFilterTest.java +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/filter/SpecFilterTest.java @@ -15,6 +15,7 @@ import io.swagger.v3.core.filter.resources.ReplaceGetOperationsFilter; import io.swagger.v3.core.matchers.SerializationMatchers; import io.swagger.v3.core.util.Json; +import io.swagger.v3.core.util.Json31; import io.swagger.v3.core.util.ResourceUtils; import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.OpenAPI; @@ -37,6 +38,7 @@ import static org.testng.Assert.assertNotEquals; import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertNull; +import static org.testng.Assert.assertTrue; import static org.testng.Assert.fail; public class SpecFilterTest { @@ -44,6 +46,7 @@ public class SpecFilterTest { private static final String RESOURCE_RECURSIVE_MODELS = "specFiles/recursivemodels.json"; private static final String RESOURCE_PATH = "specFiles/petstore-3.0-v2.json"; private static final String RESOURCE_PATH_3303 = "specFiles/petstore-3.0-v2-ticket-3303.json"; + private static final String RESOURCE_PATH_LIST = "specFiles/3.1.0/list-3.1.json"; private static final String RESOURCE_REFERRED_SCHEMAS = "specFiles/petstore-3.0-referred-schemas.json"; private static final String RESOURCE_PATH_WITHOUT_MODELS = "specFiles/petstore-3.0-v2_withoutModels.json"; private static final String RESOURCE_DEPRECATED_OPERATIONS = "specFiles/deprecatedoperationmodel.json"; @@ -273,6 +276,16 @@ public void shouldRemoveBrokenNestedRefs() throws IOException { assertNotNull(filtered.getComponents().getSchemas().get("discriminatorMatchedChildB")); } + @Test + public void shouldRemoveBrokenNestedRefsKeepArray() throws IOException { + final OpenAPI openAPI = getOpenAPI31(RESOURCE_PATH_LIST); + final RemoveUnreferencedDefinitionsFilter remover = new RemoveUnreferencedDefinitionsFilter(); + final OpenAPI filtered = new SpecFilter().filter(openAPI, remover, null, null, null); + + assertEquals(filtered.getComponents().getSchemas().size(), 2, "Expected to have parent and child list schemas"); + assertTrue(filtered.getComponents().getSchemas().containsKey("SomeChildObject"), "Schemas should contains child list"); + } + @Test public void shouldNotRemoveGoodRefs() throws IOException { final OpenAPI openAPI = getOpenAPI(RESOURCE_PATH); @@ -438,4 +451,9 @@ private OpenAPI getOpenAPI(String path) throws IOException { final String json = ResourceUtils.loadClassResource(getClass(), path); return Json.mapper().readValue(json, OpenAPI.class); } + + private OpenAPI getOpenAPI31(String path) throws IOException { + final String json = ResourceUtils.loadClassResource(getClass(), path); + return Json31.mapper().readValue(json, OpenAPI.class); + } } diff --git a/modules/swagger-core/src/test/resources/specFiles/3.1.0/list-3.1.json b/modules/swagger-core/src/test/resources/specFiles/3.1.0/list-3.1.json new file mode 100644 index 0000000000..0c7e95ad93 --- /dev/null +++ b/modules/swagger-core/src/test/resources/specFiles/3.1.0/list-3.1.json @@ -0,0 +1,78 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "OpenAPI definition", + "version": "v0" + }, + "paths": { + "/some/call": { + "get": { + "description": "Some operation description", + "operationId": "getSome", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SomeParentObject" + } + } + }, + "description": "OK" + } + }, + "summary": "Some summary", + "tags": [ + "Some" + ] + } + } + }, + "servers": [ + { + "description": "Generated server url", + "url": "http://localhost:8080" + } + ], + "tags": [ + { + "description": "some actions", + "name": "Some" + } + ], + "components": { + "schemas": { + "SomeChildObject": { + "description": "Some child object", + "properties": { + "id": { + "description": "id", + "format": "int64", + "type": "integer" + }, + "name": { + "description": "name", + "type": "string" + } + } + }, + "SomeParentObject": { + "description": "Some parent object", + "properties": { + "id": { + "description": "id", + "format": "int64", + "type": "integer" + }, + "someList": { + "description": "list", + "items": { + "$ref": "#/components/schemas/SomeChildObject" + }, + "type": "array" + } + } + } + } + } +} \ No newline at end of file From a6a588ed067bb6cca7297f03edc89a55965b428c Mon Sep 17 00:00:00 2001 From: Danny Seymour Date: Thu, 7 Mar 2024 10:59:49 -0800 Subject: [PATCH 125/131] fix: Add class loader to OpenAPIExtensions ServiceLoader --- .../main/java/io/swagger/v3/jaxrs2/ext/OpenAPIExtensions.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/ext/OpenAPIExtensions.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/ext/OpenAPIExtensions.java index f504159934..f5bfa7b3b7 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/ext/OpenAPIExtensions.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/ext/OpenAPIExtensions.java @@ -28,7 +28,7 @@ public static Iterator chain() { static { extensions = new ArrayList<>(); - ServiceLoader loader = ServiceLoader.load(OpenAPIExtension.class); + ServiceLoader loader = ServiceLoader.load(OpenAPIExtension.class, OpenAPIExtensions.class.getClassLoader()); for (OpenAPIExtension ext : loader) { LOGGER.debug("adding extension {}", ext); extensions.add(ext); From 3063a926fe045874a853b1d4ffa8286947bfb86b Mon Sep 17 00:00:00 2001 From: frantuma Date: Wed, 20 Mar 2024 08:17:10 +0100 Subject: [PATCH 126/131] update dependencies --- README.md | 30 ++++++++++--------- .../pom.xml | 2 +- modules/swagger-jaxrs2/pom.xml | 2 +- modules/swagger-maven-plugin/pom.xml | 2 +- .../modules/swagger-jaxrs2-jakarta/pom.xml | 2 +- modules/swagger-project-jakarta/pom.xml | 12 ++++---- pom.xml | 8 ++--- 7 files changed, 30 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index 1da10a3d03..6efcbe047c 100644 --- a/README.md +++ b/README.md @@ -21,19 +21,19 @@ The [github wiki](https://github.com/swagger-api/swagger-core/wiki) contains doc ## Compatibility The OpenAPI Specification has undergone several revisions since initial creation in 2010. The Swagger Core project has the following compatibilities with the OpenAPI Specification: -Swagger core Version | Release Date | OpenAPI Spec compatibility | Notes | Status -------------------------- | ------------ | -------------------------- | ----- | ---- -2.2.20 (**current stable**)| 2023-12-19 | 3.x | [tag v2.2.20](https://github.com/swagger-api/swagger-core/tree/v2.2.20) | Supported -2.2.19 | 2023-11-10 | 3.x | [tag v2.2.19](https://github.com/swagger-api/swagger-core/tree/v2.2.19) | Supported -2.2.18 | 2023-10-25 | 3.x | [tag v2.2.18](https://github.com/swagger-api/swagger-core/tree/v2.2.18) | Supported -2.2.17 | 2023-10-12 | 3.x | [tag v2.2.17](https://github.com/swagger-api/swagger-core/tree/v2.2.17) | Supported -2.2.16 | 2023-09-18 | 3.x | [tag v2.2.16](https://github.com/swagger-api/swagger-core/tree/v2.2.16) | Supported -2.2.15 | 2023-07-08 | 3.x | [tag v2.2.15](https://github.com/swagger-api/swagger-core/tree/v2.2.15) | Supported -2.2.14 | 2023-06-26 | 3.x | [tag v2.2.14](https://github.com/swagger-api/swagger-core/tree/v2.2.14) | Supported -2.2.13 | 2023-06-24 | 3.x | [tag v2.2.13](https://github.com/swagger-api/swagger-core/tree/v2.2.13) | Supported -2.2.12 | 2023-06-13 | 3.x | [tag v2.2.12](https://github.com/swagger-api/swagger-core/tree/v2.2.12) | Supported -2.2.11 | 2023-06-01 | 3.x | [tag v2.2.11](https://github.com/swagger-api/swagger-core/tree/v2.2.11) | Supported -2.2.10 | 2023-05-15 | 3.x | [tag v2.2.10](https://github.com/swagger-api/swagger-core/tree/v2.2.10) | Supported +Swagger core Version | Release Date | OpenAPI Spec compatibility | Notes | Status +------------------------- | ------------ | -------------------------- |-------------------------------------------------------------------------------------------------------------------| ---- +2.2.20 (**current stable**)| 2023-12-19 | 3.x | [tag v2.2.20](https://github.com/swagger-api/swagger-core/tree/v2.2.20) | Supported +2.2.19 | 2023-11-10 | 3.x | [tag v2.2.19](https://github.com/swagger-api/swagger-core/tree/v2.2.19) | Supported +2.2.18 | 2023-10-25 | 3.x | [tag v2.2.18](https://github.com/swagger-api/swagger-core/tree/v2.2.18) | Supported +2.2.17 | 2023-10-12 | 3.x | [tag v2.2.17](https://github.com/swagger-api/swagger-core/tree/v2.2.17) | Supported +2.2.16 | 2023-09-18 | 3.x | [tag v2.2.16](https://github.com/swagger-api/swagger-core/tree/v2.2.16) | Supported +2.2.15 | 2023-07-08 | 3.x | [tag v2.2.15](https://github.com/swagger-api/swagger-core/tree/v2.2.15) | Supported +2.2.14 | 2023-06-26 | 3.x | [tag v2.2.14](https://github.com/swagger-api/swagger-core/tree/v2.2.14) | Supported +2.2.13 | 2023-06-24 | 3.x | [tag v2.2.13](https://github.com/swagger-api/swagger-core/tree/v2.2.13) | Supported +2.2.12 | 2023-06-13 | 3.x | [tag v2.2.12](https://github.com/swagger-api/swagger-core/tree/v2.2.12) | Supported +2.2.11 | 2023-06-01 | 3.x | [tag v2.2.11](https://github.com/swagger-api/swagger-core/tree/v2.2.11) | Supported +2.2.10 | 2023-05-15 | 3.x | [tag v2.2.10](https://github.com/swagger-api/swagger-core/tree/v2.2.10) | Supported 2.2.9 | 2023-03-20 | 3.x | [tag v2.2.9](https://github.com/swagger-api/swagger-core/tree/v2.2.9) | Supported 2.2.8 | 2023-01-06 | 3.x | [tag v2.2.8](https://github.com/swagger-api/swagger-core/tree/v2.2.8) | Supported 2.2.7 | 2022-11-15 | 3.0 | [tag v2.2.7](https://github.com/swagger-api/swagger-core/tree/v2.2.7) | Supported @@ -66,7 +66,9 @@ Swagger core Version | Release Date | OpenAPI Spec compatibility | Notes | 2.0.5 | 2018-09-19 | 3.0 | [tag v2.0.5](https://github.com/swagger-api/swagger-core/tree/v2.0.5) | Supported 2.0.4 | 2018-09-05 | 3.0 | [tag v2.0.4](https://github.com/swagger-api/swagger-core/tree/v2.0.4) | Supported 2.0.3 | 2018-08-09 | 3.0 | [tag v2.0.3](https://github.com/swagger-api/swagger-core/tree/v2.0.3) | Supported -1.6.12 (**current stable**)| 2023-10-14 | 2.0 | [tag v1.6.12](https://github.com/swagger-api/swagger-core/tree/v1.6.12) | Supported +1.6.14 (**current stable**)| 2024-03-19 | 2.0 | [tag v1.6.14](https://github.com/swagger-api/swagger-core/tree/v1.6.14) | Supported +1.6.13 | 2024-01-26 | 2.0 | [tag v1.6.13](https://github.com/swagger-api/swagger-core/tree/v1.6.13) | Supported +1.6.12 | 2023-10-14 | 2.0 | [tag v1.6.12](https://github.com/swagger-api/swagger-core/tree/v1.6.12) | Supported 1.6.11 | 2023-05-15 | 2.0 | [tag v1.6.11](https://github.com/swagger-api/swagger-core/tree/v1.6.11) | Supported 1.6.10 | 2023-03-21 | 2.0 | [tag v1.6.10](https://github.com/swagger-api/swagger-core/tree/v1.6.10) | Supported 1.6.9 | 2022-11-15 | 2.0 | [tag v1.6.9](https://github.com/swagger-api/swagger-core/tree/v1.6.9) | Supported diff --git a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml index 8fc5d3bd3a..07b26c76ce 100644 --- a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml +++ b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml @@ -138,7 +138,7 @@ commons-cli commons-cli - 1.5.0 + 1.6.0 org.apache.maven diff --git a/modules/swagger-jaxrs2/pom.xml b/modules/swagger-jaxrs2/pom.xml index 82c7d8d8a3..4193331029 100644 --- a/modules/swagger-jaxrs2/pom.xml +++ b/modules/swagger-jaxrs2/pom.xml @@ -155,7 +155,7 @@ org.javassist javassist - 3.30.1-GA + 3.30.2-GA commons-io diff --git a/modules/swagger-maven-plugin/pom.xml b/modules/swagger-maven-plugin/pom.xml index af7252d3b8..a691e08b0c 100644 --- a/modules/swagger-maven-plugin/pom.xml +++ b/modules/swagger-maven-plugin/pom.xml @@ -293,6 +293,6 @@ 3.9.6 4.13.2 9.4.53.v20231009 - 1.25.0 + 1.26.1 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml index 66e7a36ffd..c1b35d81d7 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml @@ -90,7 +90,7 @@ org.javassist javassist - 3.30.1-GA + 3.30.2-GA commons-io diff --git a/modules/swagger-project-jakarta/pom.xml b/modules/swagger-project-jakarta/pom.xml index 2219480bda..dc51115e9a 100644 --- a/modules/swagger-project-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/pom.xml @@ -475,7 +475,7 @@ 8 2.2.3 - 2.12.5 + 2.12.7 2.2 3.1.0 3.0.2 @@ -485,9 +485,9 @@ 5.0.0 3.1.5 4.13.2 - 2.16.0 - 2.16.0 - 1.4.14 + 2.16.2 + 2.16.2 + 1.5.3 4.8.165 32.1.3-jre 1.10.14 @@ -495,7 +495,7 @@ 2.15.1 2.0.9 9.4.53.v20231009 - 7.8.0 + 7.9.0 2.28.2 4.5.1 4.5.14 @@ -513,6 +513,6 @@ https://oss.sonatype.org/content/repositories/snapshots/ 0.5.0 3.9.6 - 1.25.0 + 1.26.1 diff --git a/pom.xml b/pom.xml index bfb5c7978d..95f4b263a4 100644 --- a/pom.xml +++ b/pom.xml @@ -629,7 +629,7 @@ 8 2.2.3 - 2.12.5 + 2.12.7 2.2 2.1.6 2.3.3 @@ -638,9 +638,9 @@ 4.0.4 2.41 4.13.2 - 2.16.0 - 2.16.0 - 1.4.14 + 2.16.2 + 2.16.2 + 1.5.3 4.8.165 32.1.3-jre 1.10.14 From 516159820d3bdd78bdfc7ea94d5132dc74c82eaf Mon Sep 17 00:00:00 2001 From: frantuma Date: Wed, 20 Mar 2024 07:34:16 +0000 Subject: [PATCH 127/131] prepare release 2.2.21 --- README.md | 4 ++-- modules/swagger-annotations/pom.xml | 2 +- modules/swagger-core/pom.xml | 2 +- .../swagger-eclipse-transformer-maven-plugin/pom.xml | 2 +- modules/swagger-gradle-plugin/README.md | 4 ++-- modules/swagger-gradle-plugin/gradle.properties | 2 +- .../io/swagger/v3/plugins/gradle/SwaggerPlugin.java | 2 +- .../v3/plugins/gradle/SwaggerResolveTest.java | 4 ++-- modules/swagger-integration/pom.xml | 2 +- .../swagger-jaxrs2-servlet-initializer-v2/pom.xml | 2 +- modules/swagger-jaxrs2-servlet-initializer/pom.xml | 2 +- modules/swagger-jaxrs2/pom.xml | 2 +- modules/swagger-maven-plugin/README.md | 12 ++++++------ modules/swagger-maven-plugin/pom.xml | 2 +- modules/swagger-models/pom.xml | 2 +- .../modules/swagger-annotations-jakarta/pom.xml | 2 +- .../modules/swagger-core-jakarta/pom.xml | 2 +- .../modules/swagger-integration-jakarta/pom.xml | 2 +- .../modules/swagger-jaxrs2-jakarta/pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../modules/swagger-maven-plugin-jakarta/pom.xml | 2 +- .../modules/swagger-models-jakarta/pom.xml | 2 +- modules/swagger-project-jakarta/pom.xml | 2 +- pom.xml | 2 +- 25 files changed, 33 insertions(+), 33 deletions(-) diff --git a/README.md b/README.md index 6efcbe047c..c13f399abb 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ The OpenAPI Specification has undergone several revisions since initial creation Swagger core Version | Release Date | OpenAPI Spec compatibility | Notes | Status ------------------------- | ------------ | -------------------------- |-------------------------------------------------------------------------------------------------------------------| ---- -2.2.20 (**current stable**)| 2023-12-19 | 3.x | [tag v2.2.20](https://github.com/swagger-api/swagger-core/tree/v2.2.20) | Supported +2.2.20 | 2023-12-19 | 3.x | [tag v2.2.20](https://github.com/swagger-api/swagger-core/tree/v2.2.20) | Supported 2.2.19 | 2023-11-10 | 3.x | [tag v2.2.19](https://github.com/swagger-api/swagger-core/tree/v2.2.19) | Supported 2.2.18 | 2023-10-25 | 3.x | [tag v2.2.18](https://github.com/swagger-api/swagger-core/tree/v2.2.18) | Supported 2.2.17 | 2023-10-12 | 3.x | [tag v2.2.17](https://github.com/swagger-api/swagger-core/tree/v2.2.17) | Supported @@ -113,7 +113,7 @@ You need the following installed and available in your $PATH: * Jackson 2.4.5 or greater -### To build from source (currently 2.2.21-SNAPSHOT) +### To build from source (currently 2.2.22-SNAPSHOT) ``` # first time building locally mvn -N diff --git a/modules/swagger-annotations/pom.xml b/modules/swagger-annotations/pom.xml index eece698af6..4b25dda3f3 100644 --- a/modules/swagger-annotations/pom.xml +++ b/modules/swagger-annotations/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.21-SNAPSHOT + 2.2.21 ../.. 4.0.0 diff --git a/modules/swagger-core/pom.xml b/modules/swagger-core/pom.xml index 30e285f00f..2a5ec7f43d 100644 --- a/modules/swagger-core/pom.xml +++ b/modules/swagger-core/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.21-SNAPSHOT + 2.2.21 ../.. 4.0.0 diff --git a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml index 07b26c76ce..26baa34366 100644 --- a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml +++ b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.21-SNAPSHOT + 2.2.21 ../.. 4.0.0 diff --git a/modules/swagger-gradle-plugin/README.md b/modules/swagger-gradle-plugin/README.md index 928e32fc2e..c4cfe96da4 100644 --- a/modules/swagger-gradle-plugin/README.md +++ b/modules/swagger-gradle-plugin/README.md @@ -26,7 +26,7 @@ Alternatively provide as value a classpath with the following dependencies (repl ``` plugins { - id "io.swagger.core.v3.swagger-gradle-plugin" version "2.2.20" + id "io.swagger.core.v3.swagger-gradle-plugin" version "2.2.21" } ``` ### Gradle 1.x and 2.0 @@ -43,7 +43,7 @@ buildscript { } } dependencies { - classpath "io.swagger.core.v3:swagger-gradle-plugin:2.2.20" + classpath "io.swagger.core.v3:swagger-gradle-plugin:2.2.21" } } diff --git a/modules/swagger-gradle-plugin/gradle.properties b/modules/swagger-gradle-plugin/gradle.properties index cf6a3b28f9..2e474358d3 100644 --- a/modules/swagger-gradle-plugin/gradle.properties +++ b/modules/swagger-gradle-plugin/gradle.properties @@ -1,2 +1,2 @@ -version=2.2.21-SNAPSHOT +version=2.2.21 jettyVersion=9.4.53.v20231009 diff --git a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java index 68bed8e4bb..472b7a96e3 100644 --- a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java +++ b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java @@ -16,7 +16,7 @@ public void apply(Project project) { config.defaultDependencies(new Action() { public void execute(DependencySet dependencies) { dependencies.add(project.getDependencies().create("org.apache.commons:commons-lang3:3.12.0")); - dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.21-SNAPSHOT")); + dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.21")); dependencies.add(project.getDependencies().create("javax.ws.rs:javax.ws.rs-api:2.1")); dependencies.add(project.getDependencies().create("javax.servlet:javax.servlet-api:3.1.0")); } diff --git a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java index 6fd5333cf2..874f14e43b 100644 --- a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java +++ b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java @@ -81,7 +81,7 @@ public void testSwaggerResolveTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.21-SNAPSHOT'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.21'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + @@ -154,7 +154,7 @@ public void testSwaggerResolveWithOAS31OptionTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.21-SNAPSHOT'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.21'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + diff --git a/modules/swagger-integration/pom.xml b/modules/swagger-integration/pom.xml index 27e5445d7a..3ece6983aa 100644 --- a/modules/swagger-integration/pom.xml +++ b/modules/swagger-integration/pom.xml @@ -6,7 +6,7 @@ io.swagger.core.v3 swagger-project - 2.2.21-SNAPSHOT + 2.2.21 ../.. swagger-integration diff --git a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml index ff4992c6fc..732b982f7a 100644 --- a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.21-SNAPSHOT + 2.2.21 ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2-servlet-initializer/pom.xml b/modules/swagger-jaxrs2-servlet-initializer/pom.xml index 7276104e16..4f4a1fcfd5 100644 --- a/modules/swagger-jaxrs2-servlet-initializer/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.21-SNAPSHOT + 2.2.21 ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2/pom.xml b/modules/swagger-jaxrs2/pom.xml index 4193331029..81114dcdac 100644 --- a/modules/swagger-jaxrs2/pom.xml +++ b/modules/swagger-jaxrs2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.21-SNAPSHOT + 2.2.21 ../../ 4.0.0 diff --git a/modules/swagger-maven-plugin/README.md b/modules/swagger-maven-plugin/README.md index 44ca25bbab..1a1c1a2c7a 100644 --- a/modules/swagger-maven-plugin/README.md +++ b/modules/swagger-maven-plugin/README.md @@ -22,7 +22,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin - 2.2.20 + 2.2.21 openapi ${project.build.directory}/generatedtest @@ -47,7 +47,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-jaxrs2 - 2.2.20 + 2.2.21 @@ -73,7 +73,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin-jakarta - 2.2.20 + 2.2.21 openapi ${project.build.directory}/generatedtest @@ -98,7 +98,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-jaxrs2-jakarta - 2.2.20 + 2.2.21 @@ -126,7 +126,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin - 2.2.20 + 2.2.21 openapi ${project.build.directory}/generatedtest @@ -155,7 +155,7 @@ Both `javax` and `jakarta` examples are provided below io.swagger.core.v3 swagger-maven-plugin-jakarta - 2.2.20 + 2.2.21 openapi ${project.build.directory}/generatedtest diff --git a/modules/swagger-maven-plugin/pom.xml b/modules/swagger-maven-plugin/pom.xml index a691e08b0c..b95a342881 100644 --- a/modules/swagger-maven-plugin/pom.xml +++ b/modules/swagger-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.21-SNAPSHOT + 2.2.21 ../.. 4.0.0 diff --git a/modules/swagger-models/pom.xml b/modules/swagger-models/pom.xml index 9416d48034..8d99cedf29 100644 --- a/modules/swagger-models/pom.xml +++ b/modules/swagger-models/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.21-SNAPSHOT + 2.2.21 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml index 8499e0073c..6b6622873b 100644 --- a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.21-SNAPSHOT + 2.2.21 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml index 15d2f0ab89..34bb15cf6f 100644 --- a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.21-SNAPSHOT + 2.2.21 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml index 88bf860caf..b4005f3f7d 100644 --- a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.21-SNAPSHOT + 2.2.21 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml index c1b35d81d7..6934ad59e9 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.21-SNAPSHOT + 2.2.21 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml index 30284f7385..3381b3b21f 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.21-SNAPSHOT + 2.2.21 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml index 1cf5b4bcca..4145d844d4 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.21-SNAPSHOT + 2.2.21 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml index 2f1ab9219b..5e20776194 100644 --- a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.21-SNAPSHOT + 2.2.21 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml index 113ac83380..8b2163e89d 100644 --- a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.21-SNAPSHOT + 2.2.21 ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/pom.xml b/modules/swagger-project-jakarta/pom.xml index dc51115e9a..d8e9961554 100644 --- a/modules/swagger-project-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/pom.xml @@ -6,7 +6,7 @@ pom swagger-project-jakarta swagger-project-jakarta - 2.2.21-SNAPSHOT + 2.2.21 https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git diff --git a/pom.xml b/pom.xml index 95f4b263a4..bb24107944 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ pom swagger-project swagger-project - 2.2.21-SNAPSHOT + 2.2.21 https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git From 7220e9cfddd13d262690ce6fc5a5b3b1ec8480f0 Mon Sep 17 00:00:00 2001 From: frantuma Date: Wed, 20 Mar 2024 07:53:52 +0000 Subject: [PATCH 128/131] bump snapshot 2.2.22-SNAPSHOT --- modules/swagger-annotations/pom.xml | 2 +- modules/swagger-core/pom.xml | 2 +- modules/swagger-eclipse-transformer-maven-plugin/pom.xml | 2 +- modules/swagger-gradle-plugin/gradle.properties | 2 +- .../main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java | 2 +- .../java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java | 4 ++-- modules/swagger-integration/pom.xml | 2 +- modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml | 2 +- modules/swagger-jaxrs2-servlet-initializer/pom.xml | 2 +- modules/swagger-jaxrs2/pom.xml | 2 +- modules/swagger-maven-plugin/pom.xml | 2 +- modules/swagger-models/pom.xml | 2 +- .../modules/swagger-annotations-jakarta/pom.xml | 2 +- .../modules/swagger-core-jakarta/pom.xml | 2 +- .../modules/swagger-integration-jakarta/pom.xml | 2 +- .../modules/swagger-jaxrs2-jakarta/pom.xml | 2 +- .../swagger-jaxrs2-servlet-initializer-jakarta/pom.xml | 2 +- .../swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml | 2 +- .../modules/swagger-maven-plugin-jakarta/pom.xml | 2 +- .../modules/swagger-models-jakarta/pom.xml | 2 +- modules/swagger-project-jakarta/pom.xml | 2 +- pom.xml | 2 +- 22 files changed, 23 insertions(+), 23 deletions(-) diff --git a/modules/swagger-annotations/pom.xml b/modules/swagger-annotations/pom.xml index 4b25dda3f3..3434f6edbd 100644 --- a/modules/swagger-annotations/pom.xml +++ b/modules/swagger-annotations/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.21 + 2.2.22-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-core/pom.xml b/modules/swagger-core/pom.xml index 2a5ec7f43d..080470166b 100644 --- a/modules/swagger-core/pom.xml +++ b/modules/swagger-core/pom.xml @@ -3,7 +3,7 @@ io.swagger.core.v3 swagger-project - 2.2.21 + 2.2.22-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml index 26baa34366..596e5d4e3e 100644 --- a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml +++ b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.21 + 2.2.22-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-gradle-plugin/gradle.properties b/modules/swagger-gradle-plugin/gradle.properties index 2e474358d3..e7d2f9d578 100644 --- a/modules/swagger-gradle-plugin/gradle.properties +++ b/modules/swagger-gradle-plugin/gradle.properties @@ -1,2 +1,2 @@ -version=2.2.21 +version=2.2.22-SNAPSHOT jettyVersion=9.4.53.v20231009 diff --git a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java index 472b7a96e3..6efe022bac 100644 --- a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java +++ b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/SwaggerPlugin.java @@ -16,7 +16,7 @@ public void apply(Project project) { config.defaultDependencies(new Action() { public void execute(DependencySet dependencies) { dependencies.add(project.getDependencies().create("org.apache.commons:commons-lang3:3.12.0")); - dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.21")); + dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2:2.2.22-SNAPSHOT")); dependencies.add(project.getDependencies().create("javax.ws.rs:javax.ws.rs-api:2.1")); dependencies.add(project.getDependencies().create("javax.servlet:javax.servlet-api:3.1.0")); } diff --git a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java index 874f14e43b..55fc55d63a 100644 --- a/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java +++ b/modules/swagger-gradle-plugin/src/test/java/io/swagger/v3/plugins/gradle/SwaggerResolveTest.java @@ -81,7 +81,7 @@ public void testSwaggerResolveTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.21'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.22-SNAPSHOT'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + @@ -154,7 +154,7 @@ public void testSwaggerResolveWithOAS31OptionTask() throws IOException { " mavenCentral()\n" + "}\n" + "dependencies { \n" + - " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.21'\n" + + " implementation 'io.swagger.core.v3:swagger-jaxrs2:2.2.22-SNAPSHOT'\n" + " implementation 'javax.ws.rs:javax.ws.rs-api:2.1'\n" + " implementation 'javax.servlet:javax.servlet-api:3.1.0'\n" + " testImplementation 'com.github.tomakehurst:wiremock:2.27.2'\n" + diff --git a/modules/swagger-integration/pom.xml b/modules/swagger-integration/pom.xml index 3ece6983aa..d56670faee 100644 --- a/modules/swagger-integration/pom.xml +++ b/modules/swagger-integration/pom.xml @@ -6,7 +6,7 @@ io.swagger.core.v3 swagger-project - 2.2.21 + 2.2.22-SNAPSHOT ../.. swagger-integration diff --git a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml index 732b982f7a..a1de926e90 100644 --- a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.21 + 2.2.22-SNAPSHOT ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2-servlet-initializer/pom.xml b/modules/swagger-jaxrs2-servlet-initializer/pom.xml index 4f4a1fcfd5..a25db9b074 100644 --- a/modules/swagger-jaxrs2-servlet-initializer/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.21 + 2.2.22-SNAPSHOT ../../ 4.0.0 diff --git a/modules/swagger-jaxrs2/pom.xml b/modules/swagger-jaxrs2/pom.xml index 81114dcdac..c86b3ea582 100644 --- a/modules/swagger-jaxrs2/pom.xml +++ b/modules/swagger-jaxrs2/pom.xml @@ -5,7 +5,7 @@ swagger-project io.swagger.core.v3 - 2.2.21 + 2.2.22-SNAPSHOT ../../ 4.0.0 diff --git a/modules/swagger-maven-plugin/pom.xml b/modules/swagger-maven-plugin/pom.xml index b95a342881..7702d0cfa6 100644 --- a/modules/swagger-maven-plugin/pom.xml +++ b/modules/swagger-maven-plugin/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.21 + 2.2.22-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-models/pom.xml b/modules/swagger-models/pom.xml index 8d99cedf29..342d3e8a52 100644 --- a/modules/swagger-models/pom.xml +++ b/modules/swagger-models/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project - 2.2.21 + 2.2.22-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml index 6b6622873b..f626519304 100644 --- a/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-annotations-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.21 + 2.2.22-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml index 34bb15cf6f..0e52c503f4 100644 --- a/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-core-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.21 + 2.2.22-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml index b4005f3f7d..3a317a2264 100644 --- a/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-integration-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.21 + 2.2.22-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml index 6934ad59e9..f9c9da3912 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.21 + 2.2.22-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml index 3381b3b21f..f3958467d2 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.21 + 2.2.22-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml index 4145d844d4..6ce14600ca 100644 --- a/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-jaxrs2-servlet-initializer-v2-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.21 + 2.2.22-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml index 5e20776194..86fddb4651 100644 --- a/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-maven-plugin-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.21 + 2.2.22-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml index 8b2163e89d..6464463e39 100644 --- a/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/modules/swagger-models-jakarta/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-project-jakarta - 2.2.21 + 2.2.22-SNAPSHOT ../.. 4.0.0 diff --git a/modules/swagger-project-jakarta/pom.xml b/modules/swagger-project-jakarta/pom.xml index d8e9961554..defc7f621f 100644 --- a/modules/swagger-project-jakarta/pom.xml +++ b/modules/swagger-project-jakarta/pom.xml @@ -6,7 +6,7 @@ pom swagger-project-jakarta swagger-project-jakarta - 2.2.21 + 2.2.22-SNAPSHOT https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git diff --git a/pom.xml b/pom.xml index bb24107944..c780829888 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ pom swagger-project swagger-project - 2.2.21 + 2.2.22-SNAPSHOT https://github.com/swagger-api/swagger-core scm:git:git@github.com:swagger-api/swagger-core.git From 194b1dd1dc769adadc60f0553627982ccbe8a034 Mon Sep 17 00:00:00 2001 From: frantuma Date: Wed, 20 Mar 2024 18:12:47 +0100 Subject: [PATCH 129/131] fix README --- README.md | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index c13f399abb..faf561f58e 100644 --- a/README.md +++ b/README.md @@ -21,19 +21,20 @@ The [github wiki](https://github.com/swagger-api/swagger-core/wiki) contains doc ## Compatibility The OpenAPI Specification has undergone several revisions since initial creation in 2010. The Swagger Core project has the following compatibilities with the OpenAPI Specification: -Swagger core Version | Release Date | OpenAPI Spec compatibility | Notes | Status -------------------------- | ------------ | -------------------------- |-------------------------------------------------------------------------------------------------------------------| ---- -2.2.20 | 2023-12-19 | 3.x | [tag v2.2.20](https://github.com/swagger-api/swagger-core/tree/v2.2.20) | Supported -2.2.19 | 2023-11-10 | 3.x | [tag v2.2.19](https://github.com/swagger-api/swagger-core/tree/v2.2.19) | Supported -2.2.18 | 2023-10-25 | 3.x | [tag v2.2.18](https://github.com/swagger-api/swagger-core/tree/v2.2.18) | Supported -2.2.17 | 2023-10-12 | 3.x | [tag v2.2.17](https://github.com/swagger-api/swagger-core/tree/v2.2.17) | Supported -2.2.16 | 2023-09-18 | 3.x | [tag v2.2.16](https://github.com/swagger-api/swagger-core/tree/v2.2.16) | Supported -2.2.15 | 2023-07-08 | 3.x | [tag v2.2.15](https://github.com/swagger-api/swagger-core/tree/v2.2.15) | Supported -2.2.14 | 2023-06-26 | 3.x | [tag v2.2.14](https://github.com/swagger-api/swagger-core/tree/v2.2.14) | Supported -2.2.13 | 2023-06-24 | 3.x | [tag v2.2.13](https://github.com/swagger-api/swagger-core/tree/v2.2.13) | Supported -2.2.12 | 2023-06-13 | 3.x | [tag v2.2.12](https://github.com/swagger-api/swagger-core/tree/v2.2.12) | Supported -2.2.11 | 2023-06-01 | 3.x | [tag v2.2.11](https://github.com/swagger-api/swagger-core/tree/v2.2.11) | Supported -2.2.10 | 2023-05-15 | 3.x | [tag v2.2.10](https://github.com/swagger-api/swagger-core/tree/v2.2.10) | Supported +Swagger core Version | Release Date | OpenAPI Spec compatibility | Notes | Status +------------------------- | ------------ | -------------------------- | ----- | ---- +2.2.21 (**current stable**)| 2024-03-20 | 3.x | [tag v2.2.21](https://github.com/swagger-api/swagger-core/tree/v2.2.21) | Supported +2.2.20 | 2023-12-19 | 3.x | [tag v2.2.20](https://github.com/swagger-api/swagger-core/tree/v2.2.20) | Supported +2.2.19 | 2023-11-10 | 3.x | [tag v2.2.19](https://github.com/swagger-api/swagger-core/tree/v2.2.19) | Supported +2.2.18 | 2023-10-25 | 3.x | [tag v2.2.18](https://github.com/swagger-api/swagger-core/tree/v2.2.18) | Supported +2.2.17 | 2023-10-12 | 3.x | [tag v2.2.17](https://github.com/swagger-api/swagger-core/tree/v2.2.17) | Supported +2.2.16 | 2023-09-18 | 3.x | [tag v2.2.16](https://github.com/swagger-api/swagger-core/tree/v2.2.16) | Supported +2.2.15 | 2023-07-08 | 3.x | [tag v2.2.15](https://github.com/swagger-api/swagger-core/tree/v2.2.15) | Supported +2.2.14 | 2023-06-26 | 3.x | [tag v2.2.14](https://github.com/swagger-api/swagger-core/tree/v2.2.14) | Supported +2.2.13 | 2023-06-24 | 3.x | [tag v2.2.13](https://github.com/swagger-api/swagger-core/tree/v2.2.13) | Supported +2.2.12 | 2023-06-13 | 3.x | [tag v2.2.12](https://github.com/swagger-api/swagger-core/tree/v2.2.12) | Supported +2.2.11 | 2023-06-01 | 3.x | [tag v2.2.11](https://github.com/swagger-api/swagger-core/tree/v2.2.11) | Supported +2.2.10 | 2023-05-15 | 3.x | [tag v2.2.10](https://github.com/swagger-api/swagger-core/tree/v2.2.10) | Supported 2.2.9 | 2023-03-20 | 3.x | [tag v2.2.9](https://github.com/swagger-api/swagger-core/tree/v2.2.9) | Supported 2.2.8 | 2023-01-06 | 3.x | [tag v2.2.8](https://github.com/swagger-api/swagger-core/tree/v2.2.8) | Supported 2.2.7 | 2022-11-15 | 3.0 | [tag v2.2.7](https://github.com/swagger-api/swagger-core/tree/v2.2.7) | Supported From d5c37284f5dbb9b6e65858c25d55c1aa2969f8a2 Mon Sep 17 00:00:00 2001 From: frantuma Date: Tue, 26 Mar 2024 17:18:10 +0100 Subject: [PATCH 130/131] refs #4474 - fix NPE while resolving container types --- .../v3/core/jackson/ModelResolver.java | 15 +- .../swagger/v3/core/util/ReflectionUtils.java | 6 +- .../v3/core/resolving/Ticket4474Test.java | 164 ++++++++++++++++++ 3 files changed, 177 insertions(+), 8 deletions(-) create mode 100644 modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/Ticket4474Test.java 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 fc86e2184c..8abdcbad4b 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 @@ -34,7 +34,6 @@ import io.swagger.v3.core.util.AnnotationsUtils; import io.swagger.v3.core.util.Constants; import io.swagger.v3.core.util.Json; -import io.swagger.v3.core.util.Json31; import io.swagger.v3.core.util.ObjectMapperFactory; import io.swagger.v3.core.util.ReferenceTypeUtils; import io.swagger.v3.core.util.PrimitiveType; @@ -438,7 +437,7 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context if (keyType != null && valueType != null) { - if (ReflectionUtils.isSystemType(type) && !annotatedType.isSchemaProperty() && !annotatedType.isResolveAsRef()) { + if (ReflectionUtils.isSystemTypeNotArray(type) && !annotatedType.isSchemaProperty() && !annotatedType.isResolveAsRef()) { context.resolve(new AnnotatedType().components(annotatedType.getComponents()).type(valueType).jsonViewAnnotation(annotatedType.getJsonViewAnnotation())); return null; } @@ -470,7 +469,7 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context mapModel.name(name); model = mapModel; } else if (valueType != null) { - if (ReflectionUtils.isSystemType(type) && !annotatedType.isSchemaProperty() && !annotatedType.isResolveAsRef()) { + if (ReflectionUtils.isSystemTypeNotArray(type) && !annotatedType.isSchemaProperty() && !annotatedType.isResolveAsRef()) { context.resolve(new AnnotatedType().components(annotatedType.getComponents()).type(valueType).jsonViewAnnotation(annotatedType.getJsonViewAnnotation())); return null; } @@ -924,10 +923,12 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context .collect(Collectors.toList()); anyOfFiltered.forEach(c -> { Schema anyOfRef = context.resolve(new AnnotatedType().components(annotatedType.getComponents()).type(c).jsonViewAnnotation(annotatedType.getJsonViewAnnotation())); - if (StringUtils.isNotBlank(anyOfRef.getName())) { - composedSchema.addAnyOfItem(new Schema().$ref(Components.COMPONENTS_SCHEMAS_REF + anyOfRef.getName())); - } else { - composedSchema.addAnyOfItem(anyOfRef); + if (anyOfRef != null) { + if (StringUtils.isNotBlank(anyOfRef.getName())) { + composedSchema.addAnyOfItem(new Schema().$ref(Components.COMPONENTS_SCHEMAS_REF + anyOfRef.getName())); + } else { + composedSchema.addAnyOfItem(anyOfRef); + } } // remove shared properties defined in the parent if (isSubtype(beanDesc.getClassInfo(), c)) { diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/ReflectionUtils.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/ReflectionUtils.java index 307058ad53..f8b0c08a7d 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/ReflectionUtils.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/ReflectionUtils.java @@ -440,6 +440,10 @@ public static boolean isVoid(Type type) { } public static boolean isSystemType(JavaType type) { + return isSystemTypeNotArray(type) ? true : type.isArrayType(); + } + + public static boolean isSystemTypeNotArray(JavaType type) { // used while resolving container types to skip resolving system types; possibly extend by checking classloader // and/or other packages for (String systemPrefix: PrimitiveType.systemPrefixes()) { @@ -450,7 +454,7 @@ public static boolean isSystemType(JavaType type) { } } } - return type.isArrayType(); + return false; } /** diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/Ticket4474Test.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/Ticket4474Test.java new file mode 100644 index 0000000000..d9b6383a65 --- /dev/null +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/Ticket4474Test.java @@ -0,0 +1,164 @@ +package io.swagger.v3.core.resolving; + +import io.swagger.v3.core.converter.AnnotatedType; +import io.swagger.v3.core.converter.ModelConverterContextImpl; +import io.swagger.v3.core.jackson.ModelResolver; +import io.swagger.v3.core.matchers.SerializationMatchers; +import io.swagger.v3.oas.models.media.Schema; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.Test; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class Ticket4474Test extends SwaggerTestBase { + + @AfterMethod + public void afterTest() { + ModelResolver.enumsAsRef = false; + } + + @Test + public void testAnyOf() throws Exception { + ModelResolver.enumsAsRef = true; + + final ModelResolver modelResolver = new ModelResolver(mapper()); + + final ModelConverterContextImpl context = new ModelConverterContextImpl(modelResolver); + + final Schema model = context + .resolve(new AnnotatedType(Document.class)); + + SerializationMatchers.assertEqualsToYaml(context.getDefinedModels(), "Document:\n" + + " type: object\n" + + " properties:\n" + + " data:\n" + + " type: object\n" + + " additionalProperties:\n" + + " type: object\n" + + " anyOf:\n" + + " - type: array\n" + + " items:\n" + + " type: boolean\n" + + " - type: array\n" + + " items:\n" + + " type: integer\n" + + " format: int32\n" + + " - type: array\n" + + " items:\n" + + " type: integer\n" + + " format: int64\n" + + " - type: array\n" + + " items:\n" + + " type: number\n" + + " format: double\n" + + " - type: array\n" + + " items:\n" + + " type: string\n" + + " - type: boolean\n" + + " - type: integer\n" + + " format: int32\n" + + " - type: integer\n" + + " format: int64\n" + + " listData:\n" + + " type: array\n" + + " items:\n" + + " type: object\n" + + " anyOf:\n" + + " - type: array\n" + + " items:\n" + + " type: boolean\n" + + " - type: array\n" + + " items:\n" + + " type: integer\n" + + " format: int32\n" + + " - type: array\n" + + " items:\n" + + " type: integer\n" + + " format: int64\n" + + " - type: array\n" + + " items:\n" + + " type: number\n" + + " format: double\n" + + " - type: array\n" + + " items:\n" + + " type: string\n" + + " - type: boolean\n" + + " - type: integer\n" + + " format: int32\n" + + " - type: integer\n" + + " format: int64\n" + + " itemData:\n" + + " type: object\n" + + " anyOf:\n" + + " - type: array\n" + + " items:\n" + + " type: boolean\n" + + " - type: array\n" + + " items:\n" + + " type: integer\n" + + " format: int32\n" + + " - type: array\n" + + " items:\n" + + " type: integer\n" + + " format: int64\n" + + " - type: array\n" + + " items:\n" + + " type: number\n" + + " format: double\n" + + " - type: array\n" + + " items:\n" + + " type: string\n" + + " - type: boolean\n" + + " - type: integer\n" + + " format: int32\n" + + " - type: integer\n" + + " format: int64"); + } + + static class Document { + @io.swagger.v3.oas.annotations.media.Schema( + anyOf = { + Boolean[].class, + Integer[].class, + Long[].class, + Double[].class, + String[].class, + Boolean.class, + Integer.class, + Long.class, + Map.class, + }) + public Map data = new HashMap<>(); + + @io.swagger.v3.oas.annotations.media.Schema( + anyOf = { + Boolean[].class, + Integer[].class, + Long[].class, + Double[].class, + String[].class, + Boolean.class, + Integer.class, + Long.class, + Map.class, + }) + public List listData = new ArrayList<>(); + + @io.swagger.v3.oas.annotations.media.Schema( + anyOf = { + Boolean[].class, + Integer[].class, + Long[].class, + Double[].class, + String[].class, + Boolean.class, + Integer.class, + Long.class, + Map.class, + }) + public Object itemData = new Object(); + } +} From 95c8253c5239f6e980acd0b2998d037b35eb8761 Mon Sep 17 00:00:00 2001 From: frantuma Date: Tue, 9 Apr 2024 10:50:35 +0200 Subject: [PATCH 131/131] refs #4645 - fix NPE in header resolving with no components --- .../main/java/io/swagger/v3/core/util/AnnotationsUtils.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java index 4124acea79..0fa9e2bcee 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java @@ -1384,7 +1384,10 @@ public static Optional
getHeader(io.swagger.v3.oas.annotations.headers.H if (resolvedSchema.schema != null) { headerObject.setSchema(resolvedSchema.schema); } - resolvedSchema.referencedSchemas.forEach(components::addSchemas); + if (resolvedSchema.referencedSchemas != null && components != null) { + resolvedSchema.referencedSchemas.forEach(components::addSchemas); + } + } } if (hasArrayAnnotation(header.array())){