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.v3swagger-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.v3swagger-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.v3swagger-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.v3swagger-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-projectio.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-projectio.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-projectio.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.v3swagger-maven-plugin
- 2.2.9
+ 2.2.10openapi${project.build.directory}/generatedtest
@@ -47,7 +47,7 @@ Both `javax` and `jakarta` examples are provided below
io.swagger.core.v3swagger-jaxrs2
- 2.2.9
+ 2.2.10
@@ -73,7 +73,7 @@ Both `javax` and `jakarta` examples are provided below
io.swagger.core.v3swagger-maven-plugin-jakarta
- 2.2.9
+ 2.2.10openapi${project.build.directory}/generatedtest
@@ -98,7 +98,7 @@ Both `javax` and `jakarta` examples are provided below
io.swagger.core.v3swagger-jaxrs2-jakarta
- 2.2.9
+ 2.2.10
@@ -126,7 +126,7 @@ Both `javax` and `jakarta` examples are provided below
io.swagger.core.v3swagger-maven-plugin
- 2.2.9
+ 2.2.10openapi${project.build.directory}/generatedtest
@@ -155,7 +155,7 @@ Both `javax` and `jakarta` examples are provided below
io.swagger.core.v3swagger-maven-plugin-jakarta
- 2.2.9
+ 2.2.10openapi${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.v3swagger-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.v3swagger-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.v3swagger-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.v3swagger-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.v3swagger-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.v3swagger-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.v3swagger-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.v3swagger-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.v3swagger-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.v3swagger-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 @@
pomswagger-project-jakartaswagger-project-jakarta
- 2.2.10-SNAPSHOT
+ 2.2.10https://github.com/swagger-api/swagger-corescm: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 @@
pomswagger-projectswagger-project
- 2.2.10-SNAPSHOT
+ 2.2.10https://github.com/swagger-api/swagger-corescm: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.v3swagger-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.v3swagger-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.v3swagger-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.v3swagger-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-projectio.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-projectio.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-projectio.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.v3swagger-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.v3swagger-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.v3swagger-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.v3swagger-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.v3swagger-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.v3swagger-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.v3swagger-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.v3swagger-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.v3swagger-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.v3swagger-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 @@
pomswagger-project-jakartaswagger-project-jakarta
- 2.2.10
+ 2.2.11-SNAPSHOThttps://github.com/swagger-api/swagger-corescm: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 @@
pomswagger-projectswagger-project
- 2.2.10
+ 2.2.11-SNAPSHOThttps://github.com/swagger-api/swagger-corescm: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.03.0.14.13.2
- 2.14.2
- 2.14.2
+ 2.15.1
+ 2.15.11.4.54.8.15431.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.32.394.13.2
- 2.14.2
- 2.14.2
+ 2.15.1
+ 2.15.11.4.54.8.15431.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.v3swagger-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.v3swagger-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.v3swagger-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.v3swagger-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-projectio.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-projectio.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-projectio.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.v3swagger-maven-plugin
- 2.2.10
+ 2.2.11openapi${project.build.directory}/generatedtest
@@ -47,7 +47,7 @@ Both `javax` and `jakarta` examples are provided below
io.swagger.core.v3swagger-jaxrs2
- 2.2.10
+ 2.2.11
@@ -73,7 +73,7 @@ Both `javax` and `jakarta` examples are provided below
io.swagger.core.v3swagger-maven-plugin-jakarta
- 2.2.10
+ 2.2.11openapi${project.build.directory}/generatedtest
@@ -98,7 +98,7 @@ Both `javax` and `jakarta` examples are provided below
io.swagger.core.v3swagger-jaxrs2-jakarta
- 2.2.10
+ 2.2.11
@@ -126,7 +126,7 @@ Both `javax` and `jakarta` examples are provided below
io.swagger.core.v3swagger-maven-plugin
- 2.2.10
+ 2.2.11openapi${project.build.directory}/generatedtest
@@ -155,7 +155,7 @@ Both `javax` and `jakarta` examples are provided below
io.swagger.core.v3swagger-maven-plugin-jakarta
- 2.2.10
+ 2.2.11openapi${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.v3swagger-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.v3swagger-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.v3swagger-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.v3swagger-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.v3swagger-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.v3swagger-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.v3swagger-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.v3swagger-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.v3swagger-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.v3swagger-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 @@
pomswagger-project-jakartaswagger-project-jakarta
- 2.2.11-SNAPSHOT
+ 2.2.11https://github.com/swagger-api/swagger-corescm: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 @@
pomswagger-projectswagger-project
- 2.2.11-SNAPSHOT
+ 2.2.11https://github.com/swagger-api/swagger-corescm: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.v3swagger-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.v3swagger-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.v3swagger-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.v3swagger-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-projectio.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-projectio.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-projectio.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.v3swagger-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.v3swagger-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.v3swagger-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.v3swagger-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.v3swagger-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.v3swagger-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.v3swagger-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.v3swagger-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.v3swagger-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.v3swagger-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 @@
pomswagger-project-jakartaswagger-project-jakarta
- 2.2.11
+ 2.2.12-SNAPSHOThttps://github.com/swagger-api/swagger-corescm: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 @@
pomswagger-projectswagger-project
- 2.2.11
+ 2.2.12-SNAPSHOThttps://github.com/swagger-api/swagger-corescm: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 extends Annotation> 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 extends Annotation> 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 extends Annotation> 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.openAPI31true
+
+
+ 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 @@
JSONANDYAMLtrue
+ 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 extends Annotation> 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