diff --git a/modules/swagger-parser-v2-converter/pom.xml b/modules/swagger-parser-v2-converter/pom.xml
index 3ae8474a52..13b1c8bbed 100644
--- a/modules/swagger-parser-v2-converter/pom.xml
+++ b/modules/swagger-parser-v2-converter/pom.xml
@@ -103,7 +103,7 @@
com.fasterxml.jackson.core
jackson-annotations
- ${jackson-annotations-version}
+ ${jackson-version}
provided
diff --git a/modules/swagger-parser-v2-converter/src/main/java/io/swagger/v3/parser/converter/SwaggerConverter.java b/modules/swagger-parser-v2-converter/src/main/java/io/swagger/v3/parser/converter/SwaggerConverter.java
index 449a9e3a6f..019aeaf6fd 100644
--- a/modules/swagger-parser-v2-converter/src/main/java/io/swagger/v3/parser/converter/SwaggerConverter.java
+++ b/modules/swagger-parser-v2-converter/src/main/java/io/swagger/v3/parser/converter/SwaggerConverter.java
@@ -786,9 +786,7 @@ private Schema convert(SerializableParameter sp) {
if (sp instanceof AbstractSerializableParameter) {
AbstractSerializableParameter ap = (AbstractSerializableParameter) sp;
- if (ap.getDefault() != null) {
- schema.setDefault(ap.getDefault());
- }
+ schema.setDefault(ap.getDefault());
}
return schema;
}
@@ -1165,9 +1163,7 @@ public Parameter convert(io.swagger.models.parameters.Parameter v2Parameter) {
if (sp instanceof AbstractSerializableParameter) {
AbstractSerializableParameter ap = (AbstractSerializableParameter) sp;
- if (ap.getDefault() != null) {
- schema.setDefault(ap.getDefault());
- }
+ schema.setDefault(ap.getDefault());
}
}
diff --git a/modules/swagger-parser-v2-converter/src/test/java/io/swagger/parser/test/V2ConverterNullHandlingTest.java b/modules/swagger-parser-v2-converter/src/test/java/io/swagger/parser/test/V2ConverterNullHandlingTest.java
deleted file mode 100644
index 8c84c31bb2..0000000000
--- a/modules/swagger-parser-v2-converter/src/test/java/io/swagger/parser/test/V2ConverterNullHandlingTest.java
+++ /dev/null
@@ -1,311 +0,0 @@
-package io.swagger.parser.test;
-
-import io.swagger.v3.core.util.Json;
-import io.swagger.v3.oas.models.OpenAPI;
-import io.swagger.v3.oas.models.media.Schema;
-import io.swagger.v3.parser.OpenAPIV3Parser;
-import io.swagger.v3.parser.converter.SwaggerConverter;
-import org.testng.annotations.Test;
-
-import static org.testng.Assert.*;
-
-/**
- * Tests for null handling in Swagger V2 to OpenAPI V3 conversion
- */
-public class V2ConverterNullHandlingTest {
-
- @Test
- public void testV2ParameterWithoutDefaultNotSetInV3() {
- String v2Yaml = "swagger: '2.0'\n" +
- "info:\n" +
- " title: Test\n" +
- " version: 1.0.0\n" +
- "paths:\n" +
- " /test:\n" +
- " get:\n" +
- " parameters:\n" +
- " - name: param1\n" +
- " in: query\n" +
- " type: string\n" +
- " responses:\n" +
- " '200':\n" +
- " description: OK\n";
-
- OpenAPI openAPI = new SwaggerConverter().readContents(v2Yaml, null, null).getOpenAPI();
- assertNotNull(openAPI);
- System.out.println(Json.pretty(openAPI));
-
- java.util.List params = openAPI.getPaths().get("/test").getGet().getParameters();
- assertEquals(params.size(), 1);
-
- Schema schema = params.get(0).getSchema();
- assertNotNull(schema);
- assertNull(schema.getDefault(), "Default should be null");
- assertFalse(schema.getDefaultSetFlag(), "Default should not be set");
- }
-
- @Test
- public void testV2ParameterWithDefaultPreservedInV3() {
- String v2Yaml = "swagger: '2.0'\n" +
- "info:\n" +
- " title: Test\n" +
- " version: 1.0.0\n" +
- "paths:\n" +
- " /test:\n" +
- " get:\n" +
- " parameters:\n" +
- " - name: param1\n" +
- " in: query\n" +
- " type: string\n" +
- " default: 'test'\n" +
- " responses:\n" +
- " '200':\n" +
- " description: OK\n";
-
- OpenAPI openAPI = new SwaggerConverter().readContents(v2Yaml, null, null).getOpenAPI();
- assertNotNull(openAPI);
- System.out.println(Json.pretty(openAPI));
- java.util.List params = openAPI.getPaths().get("/test").getGet().getParameters();
- assertEquals(params.size(), 1);
-
- Schema schema = params.get(0).getSchema();
- assertNotNull(schema);
- assertEquals(schema.getDefault(), "test", "Default should be 'test'");
- assertTrue(schema.getDefaultSetFlag(), "Default should be set");
- }
-
- @Test
- public void testV2BodyParameterWithoutDefaultNotSetInV3() {
- String v2Yaml = "swagger: '2.0'\n" +
- "info:\n" +
- " title: Test\n" +
- " version: 1.0.0\n" +
- "paths:\n" +
- " /test:\n" +
- " post:\n" +
- " parameters:\n" +
- " - name: body\n" +
- " in: body\n" +
- " schema:\n" +
- " type: object\n" +
- " properties:\n" +
- " name:\n" +
- " type: string\n" +
- " responses:\n" +
- " '200':\n" +
- " description: OK\n";
-
- OpenAPI openAPI = new SwaggerConverter().readContents(v2Yaml, null, null).getOpenAPI();
- assertNotNull(openAPI);
- System.out.println(Json.pretty(openAPI));
-
- io.swagger.v3.oas.models.parameters.RequestBody requestBody = openAPI.getPaths().get("/test").getPost().getRequestBody();
- assertNotNull(requestBody);
- assertNotNull(requestBody.getContent());
- assertFalse(requestBody.getContent().isEmpty());
-
- String mediaType = requestBody.getContent().containsKey("application/json") ? "application/json" : "*/*";
- Schema schema = requestBody.getContent().get(mediaType).getSchema();
- assertNotNull(schema);
- assertNull(schema.getDefault(), "Default should be null");
- assertFalse(schema.getDefaultSetFlag(), "Default should not be set");
- }
-
- @Test
- public void testV2DefinitionWithoutDefaultNotSetInV3() {
- String v2Yaml = "swagger: '2.0'\n" +
- "info:\n" +
- " title: Test\n" +
- " version: 1.0.0\n" +
- "paths: {}\n" +
- "definitions:\n" +
- " TestModel:\n" +
- " type: object\n" +
- " properties:\n" +
- " name:\n" +
- " type: string\n";
-
- OpenAPI openAPI = new SwaggerConverter().readContents(v2Yaml, null, null).getOpenAPI();
- assertNotNull(openAPI);
- System.out.println(Json.pretty(openAPI));
-
- Schema schema = openAPI.getComponents().getSchemas().get("TestModel");
- assertNotNull(schema);
- assertNull(schema.getDefault(), "Default should be null");
- assertFalse(schema.getDefaultSetFlag(), "Default should not be set");
- }
-
- @Test
- public void testV2PropertyWithDefaultPreservedInV3() {
- String v2Yaml = "swagger: '2.0'\n" +
- "info:\n" +
- " title: Test\n" +
- " version: 1.0.0\n" +
- "paths: {}\n" +
- "definitions:\n" +
- " TestModel:\n" +
- " type: object\n" +
- " properties:\n" +
- " status:\n" +
- " type: string\n" +
- " default: 'active'\n";
-
- OpenAPI openAPI = new SwaggerConverter().readContents(v2Yaml, null, null).getOpenAPI();
- assertNotNull(openAPI);
- System.out.println(Json.pretty(openAPI));
-
- Schema schema = openAPI.getComponents().getSchemas().get("TestModel");
- assertNotNull(schema);
-
- Schema statusProp = (Schema) schema.getProperties().get("status");
- assertNotNull(statusProp);
- assertEquals(statusProp.getDefault(), "active", "Default should be 'active'");
- assertTrue(statusProp.getDefaultSetFlag(), "Default should be set");
- }
-
- @Test
- public void testV2ArrayItemsWithoutDefaultNotSetInV3() {
- String v2Yaml = "swagger: '2.0'\n" +
- "info:\n" +
- " title: Test\n" +
- " version: 1.0.0\n" +
- "paths:\n" +
- " /test:\n" +
- " get:\n" +
- " parameters:\n" +
- " - name: items\n" +
- " in: query\n" +
- " type: array\n" +
- " items:\n" +
- " type: string\n" +
- " responses:\n" +
- " '200':\n" +
- " description: OK\n";
-
- OpenAPI openAPI = new SwaggerConverter().readContents(v2Yaml, null, null).getOpenAPI();
- assertNotNull(openAPI);
- System.out.println(Json.pretty(openAPI));
-
- java.util.List params = openAPI.getPaths().get("/test").getGet().getParameters();
- assertEquals(params.size(), 1);
-
- Schema schema = params.get(0).getSchema();
- assertNotNull(schema);
- assertTrue(schema instanceof io.swagger.v3.oas.models.media.ArraySchema);
-
- io.swagger.v3.oas.models.media.ArraySchema arraySchema =
- (io.swagger.v3.oas.models.media.ArraySchema) schema;
- assertNull(arraySchema.getDefault(), "Default should be null");
- assertFalse(arraySchema.getDefaultSetFlag(), "Default should not be set");
- }
-
- @Test
- public void testV2ExamplePreservedInV3() {
- String v2Yaml = "swagger: '2.0'\n" +
- "info:\n" +
- " title: Test\n" +
- " version: 1.0.0\n" +
- "paths: {}\n" +
- "definitions:\n" +
- " TestModel:\n" +
- " type: object\n" +
- " example:\n" +
- " name: 'test'\n" +
- " properties:\n" +
- " name:\n" +
- " type: string\n";
-
- OpenAPI openAPI = new SwaggerConverter().readContents(v2Yaml, null, null).getOpenAPI();
- assertNotNull(openAPI);
-
- Schema schema = openAPI.getComponents().getSchemas().get("TestModel");
- assertNotNull(schema);
- assertNotNull(schema.getExample(), "Example should be set");
- }
-
- @Test
- public void testV2PropertyWithoutExampleNotSetInV3() {
- String v2Yaml = "swagger: '2.0'\n" +
- "info:\n" +
- " title: Test\n" +
- " version: 1.0.0\n" +
- "paths: {}\n" +
- "definitions:\n" +
- " TestModel:\n" +
- " type: object\n" +
- " properties:\n" +
- " name:\n" +
- " type: string\n";
-
- OpenAPI openAPI = new SwaggerConverter().readContents(v2Yaml, null, null).getOpenAPI();
- assertNotNull(openAPI);
-
- Schema schema = openAPI.getComponents().getSchemas().get("TestModel");
- assertNotNull(schema);
-
- Schema nameProp = (Schema) schema.getProperties().get("name");
- assertNotNull(nameProp);
- assertNull(nameProp.getExample(), "Example should be null");
- assertFalse(nameProp.getExampleSetFlag(), "Example should not be set");
- }
-
- @Test
- public void testV2IntegerParameterWithDefault() {
- String v2Yaml = "swagger: '2.0'\n" +
- "info:\n" +
- " title: Test\n" +
- " version: 1.0.0\n" +
- "paths:\n" +
- " /test:\n" +
- " get:\n" +
- " parameters:\n" +
- " - name: limit\n" +
- " in: query\n" +
- " type: integer\n" +
- " default: 10\n" +
- " responses:\n" +
- " '200':\n" +
- " description: OK\n";
-
- OpenAPI openAPI = new SwaggerConverter().readContents(v2Yaml, null, null).getOpenAPI();
- assertNotNull(openAPI);
-
- java.util.List params = openAPI.getPaths().get("/test").getGet().getParameters();
- assertEquals(params.size(), 1);
-
- Schema schema = params.get(0).getSchema();
- assertNotNull(schema);
- assertEquals(schema.getDefault(), 10, "Default should be 10");
- assertTrue(schema.getDefaultSetFlag(), "Default should be set");
- }
-
- @Test
- public void testV2BooleanParameterWithDefault() {
- String v2Yaml = "swagger: '2.0'\n" +
- "info:\n" +
- " title: Test\n" +
- " version: 1.0.0\n" +
- "paths:\n" +
- " /test:\n" +
- " get:\n" +
- " parameters:\n" +
- " - name: verbose\n" +
- " in: query\n" +
- " type: boolean\n" +
- " default: false\n" +
- " responses:\n" +
- " '200':\n" +
- " description: OK\n";
-
- OpenAPI openAPI = new SwaggerConverter().readContents(v2Yaml, null, null).getOpenAPI();
- assertNotNull(openAPI);
-
- java.util.List params = openAPI.getPaths().get("/test").getGet().getParameters();
- assertEquals(params.size(), 1);
-
- Schema schema = params.get(0).getSchema();
- assertNotNull(schema);
- assertEquals(schema.getDefault(), false, "Default should be false");
- assertTrue(schema.getDefaultSetFlag(), "Default should be set");
- }
-}
diff --git a/modules/swagger-parser-v3/pom.xml b/modules/swagger-parser-v3/pom.xml
index 9d90ce4f19..561e654db2 100644
--- a/modules/swagger-parser-v3/pom.xml
+++ b/modules/swagger-parser-v3/pom.xml
@@ -50,7 +50,7 @@
com.fasterxml.jackson.core
jackson-annotations
- ${jackson-annotations-version}
+ ${jackson-version}
com.fasterxml.jackson.core
diff --git a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/OpenAPIDeserializer.java b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/OpenAPIDeserializer.java
index 421822dd3b..35edf978b1 100644
--- a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/OpenAPIDeserializer.java
+++ b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/OpenAPIDeserializer.java
@@ -2994,6 +2994,8 @@ at the moment path passed as string (basePath) from upper components can be both
if (defaultObject != null) {
schema.setDefault(defaultObject);
}
+ } else {
+ schema.setDefault(null);
}
Map extensions = getExtensions(node);
diff --git a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/ResolverFully.java b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/ResolverFully.java
index 777c7742f0..3f3e19ec3b 100644
--- a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/ResolverFully.java
+++ b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/ResolverFully.java
@@ -437,10 +437,7 @@ public Schema resolveSchema(Schema schema) {
aggregateSchemaCombinators(composedSchema, combinedModel, composedSchema.getAnyOf(), examples, defaultValues);
}
if (defaultValues.size() == 1) {
- Object defaultValue = defaultValues.iterator().next();
- if (defaultValue != null) {
- combinedModel.setDefault(defaultValue);
- }
+ combinedModel.setDefault(defaultValues.iterator().next());
}
if (schema.getExample() != null) {
@@ -603,11 +600,10 @@ private void aggregateSchemaCombinators(ComposedSchema sourceSchema, Schema targ
if (resolved.getExample() != null) {
examples.add(resolved.getExample());
}
- if (resolved.getDefault() != null) {
- defaultValues.add(resolved.getDefault());
- } else if (sourceSchema.getDefault() != null) {
+ if (sourceSchema.getDefault() != null && resolved.getDefault() == null)
defaultValues.add(sourceSchema.getDefault());
- }
+ else
+ defaultValues.add(resolved.getDefault());
if (resolved.getExtensions() != null) {
Map extensions = resolved.getExtensions();
diff --git a/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/test/NullHandlingTest.java b/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/test/NullHandlingTest.java
deleted file mode 100644
index 4992fa1ff9..0000000000
--- a/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/test/NullHandlingTest.java
+++ /dev/null
@@ -1,475 +0,0 @@
-package io.swagger.v3.parser.test;
-
-import io.swagger.v3.core.util.Json;
-import io.swagger.v3.oas.models.OpenAPI;
-import io.swagger.v3.oas.models.examples.Example;
-import io.swagger.v3.oas.models.media.Schema;
-import io.swagger.v3.parser.OpenAPIV3Parser;
-import io.swagger.v3.parser.core.models.ParseOptions;
-import io.swagger.v3.parser.core.models.SwaggerParseResult;
-import org.testng.annotations.Test;
-
-import static org.testng.Assert.*;
-
-/**
- * Comprehensive tests for null handling after swagger-core changes.
- * Tests verify the distinction between "field not set" and "field explicitly set to null".
- */
-public class NullHandlingTest {
-
- @Test
- public void testSchemaDefaultExplicitlyNull() {
- String yaml = "openapi: 3.0.0\n" +
- "info:\n" +
- " title: Test\n" +
- " version: 1.0.0\n" +
- "paths: {}\n" +
- "components:\n" +
- " schemas:\n" +
- " NullableSchema:\n" +
- " type: string\n" +
- " nullable: true\n" +
- " default: null\n";
-
- OpenAPI openAPI = new OpenAPIV3Parser().readContents(yaml, null, null).getOpenAPI();
- assertNotNull(openAPI);
-
- Schema schema = openAPI.getComponents().getSchemas().get("NullableSchema");
- assertNotNull(schema);
- assertNull(schema.getDefault(), "Default should be null");
- assertTrue(schema.getDefaultSetFlag(), "Default set flag should be true");
- }
-
- @Test
- public void testSchemaDefaultNotSet() {
- String yaml = "openapi: 3.0.0\n" +
- "info:\n" +
- " title: Test\n" +
- " version: 1.0.0\n" +
- "paths: {}\n" +
- "components:\n" +
- " schemas:\n" +
- " NoDefaultSchema:\n" +
- " type: string\n";
-
- OpenAPI openAPI = new OpenAPIV3Parser().readContents(yaml, null, null).getOpenAPI();
- assertNotNull(openAPI);
-
- Schema schema = openAPI.getComponents().getSchemas().get("NoDefaultSchema");
- assertNotNull(schema);
- assertNull(schema.getDefault(), "Default should be null");
- assertFalse(schema.getDefaultSetFlag(), "Default set flag should be false");
- }
-
- @Test
- public void testSchemaExampleExplicitlyNull() {
- String yaml = "openapi: 3.0.0\n" +
- "info:\n" +
- " title: Test\n" +
- " version: 1.0.0\n" +
- "paths: {}\n" +
- "components:\n" +
- " schemas:\n" +
- " NullExampleSchema:\n" +
- " type: string\n" +
- " example: null\n";
-
- OpenAPI openAPI = new OpenAPIV3Parser().readContents(yaml, null, null).getOpenAPI();
- assertNotNull(openAPI);
-
-
- Schema schema = openAPI.getComponents().getSchemas().get("NullExampleSchema");
- assertNotNull(schema);
- assertNull(schema.getExample(), "Example should be null");
- assertTrue(schema.getExampleSetFlag(), "Example set flag should be true");
- }
-
- @Test
- public void testSchemaExampleNotSet() {
- String yaml = "openapi: 3.0.0\n" +
- "info:\n" +
- " title: Test\n" +
- " version: 1.0.0\n" +
- "paths: {}\n" +
- "components:\n" +
- " schemas:\n" +
- " NoExampleSchema:\n" +
- " type: string\n";
-
- OpenAPI openAPI = new OpenAPIV3Parser().readContents(yaml, null, null).getOpenAPI();
- assertNotNull(openAPI);
-
-
- Schema schema = openAPI.getComponents().getSchemas().get("NoExampleSchema");
- assertNotNull(schema);
- assertNull(schema.getExample(), "Example should be null");
- assertFalse(schema.getExampleSetFlag(), "Example set flag should be false");
- }
-
- @Test
- public void testExampleValueExplicitlyNull() {
- String yaml = "openapi: 3.0.0\n" +
- "info:\n" +
- " title: Test\n" +
- " version: 1.0.0\n" +
- "paths: {}\n" +
- "components:\n" +
- " examples:\n" +
- " NullExample:\n" +
- " value: null\n";
-
- OpenAPI openAPI = new OpenAPIV3Parser().readContents(yaml, null, null).getOpenAPI();
- assertNotNull(openAPI);
-
-
- Example example = openAPI.getComponents().getExamples().get("NullExample");
- assertNotNull(example);
- assertNull(example.getValue(), "Value should be null");
- assertTrue(example.getValueSetFlag(), "Value set flag should be true");
- }
-
- @Test
- public void testExampleValueNotSet() {
- String yaml = "openapi: 3.0.0\n" +
- "info:\n" +
- " title: Test\n" +
- " version: 1.0.0\n" +
- "paths: {}\n" +
- "components:\n" +
- " examples:\n" +
- " NoValueExample:\n" +
- " summary: Example without value\n";
-
- OpenAPI openAPI = new OpenAPIV3Parser().readContents(yaml, null, null).getOpenAPI();
- assertNotNull(openAPI);
-
-
- Example example = openAPI.getComponents().getExamples().get("NoValueExample");
- assertNotNull(example);
- assertNull(example.getValue(), "Value should be null");
- assertFalse(example.getValueSetFlag(), "Value set flag should be false");
- }
-
- @Test(description = "Test allOf with source default preserves it when not resolving combinators")
- public void testAllOfSourceDefaultPreservedWithoutResolvingCombinators() {
- String yaml = "openapi: 3.0.0\n" +
- "info:\n" +
- " title: Test\n" +
- " version: 1.0.0\n" +
- "paths: {}\n" +
- "components:\n" +
- " schemas:\n" +
- " BaseSchema:\n" +
- " type: object\n" +
- " properties:\n" +
- " name:\n" +
- " type: string\n" +
- " ExtendedSchema:\n" +
- " allOf:\n" +
- " - $ref: '#/components/schemas/BaseSchema'\n" +
- " default:\n" +
- " name: 'default'\n";
-
- ParseOptions options = new ParseOptions();
- options.setResolveFully(true);
- options.setResolveCombinators(false);
-
- OpenAPI openAPI = new OpenAPIV3Parser().readContents(yaml, null, options).getOpenAPI();
- assertNotNull(openAPI);
-
- Schema extended = openAPI.getComponents().getSchemas().get("ExtendedSchema");
- assertNotNull(extended);
- assertNotNull(extended.getDefault(), "Default should be preserved when not resolving combinators");
- assertTrue(extended.getDefaultSetFlag(), "Default should be set");
- }
-
- @Test(description = "Test anyOf does not propagate null example")
- public void testAnyOfNullExampleNotPropagated() {
- String yaml = "openapi: 3.0.0\n" +
- "info:\n" +
- " title: Test\n" +
- " version: 1.0.0\n" +
- "paths: {}\n" +
- "components:\n" +
- " schemas:\n" +
- " Schema1:\n" +
- " type: string\n" +
- " Schema2:\n" +
- " type: number\n" +
- " CombinedSchema:\n" +
- " anyOf:\n" +
- " - $ref: '#/components/schemas/Schema1'\n" +
- " - $ref: '#/components/schemas/Schema2'\n";
-
- ParseOptions options = new ParseOptions();
- options.setResolveFully(true);
- options.setResolveCombinators(true);
-
- OpenAPI openAPI = new OpenAPIV3Parser().readContents(yaml, null, options).getOpenAPI();
- assertNotNull(openAPI);
-
- Schema combined = openAPI.getComponents().getSchemas().get("CombinedSchema");
- assertNotNull(combined);
- assertNull(combined.getExample(), "Example should be null");
- assertFalse(combined.getExampleSetFlag(), "Example should not be set");
- }
-
- @Test(description = "Test oneOf preserves explicit null example from source")
- public void testOneOfExplicitNullExamplePreserved() {
- String yaml = "openapi: 3.0.0\n" +
- "info:\n" +
- " title: Test\n" +
- " version: 1.0.0\n" +
- "paths: {}\n" +
- "components:\n" +
- " schemas:\n" +
- " Schema1:\n" +
- " type: string\n" +
- " Schema2:\n" +
- " type: number\n" +
- " CombinedSchema:\n" +
- " oneOf:\n" +
- " - $ref: '#/components/schemas/Schema1'\n" +
- " - $ref: '#/components/schemas/Schema2'\n" +
- " example: null\n";
-
- ParseOptions options = new ParseOptions();
- options.setResolveFully(true);
- options.setResolveCombinators(true);
-
- OpenAPI openAPI = new OpenAPIV3Parser().readContents(yaml, null, options).getOpenAPI();
- assertNotNull(openAPI);
-
- Schema combined = openAPI.getComponents().getSchemas().get("CombinedSchema");
- assertNotNull(combined);
- assertNull(combined.getExample(), "Example should be null");
- assertTrue(combined.getExampleSetFlag(), "Example should be explicitly set");
- }
-
- @Test(description = "Test property example null vs not set")
- public void testPropertyExampleNullVsNotSet() {
- String yaml = "openapi: 3.0.0\n" +
- "info:\n" +
- " title: Test\n" +
- " version: 1.0.0\n" +
- "paths: {}\n" +
- "components:\n" +
- " schemas:\n" +
- " TestSchema:\n" +
- " type: object\n" +
- " properties:\n" +
- " withNullExample:\n" +
- " type: string\n" +
- " example: null\n" +
- " withoutExample:\n" +
- " type: string\n" +
- " withExample:\n" +
- " type: string\n" +
- " example: 'test'\n";
-
- OpenAPI openAPI = new OpenAPIV3Parser().readContents(yaml, null, null).getOpenAPI();
- assertNotNull(openAPI);
-
- Schema testSchema = openAPI.getComponents().getSchemas().get("TestSchema");
- assertNotNull(testSchema);
-
- Schema withNull = (Schema) testSchema.getProperties().get("withNullExample");
- assertNull(withNull.getExample());
- assertTrue(withNull.getExampleSetFlag(), "Should be explicitly set to null");
-
- Schema without = (Schema) testSchema.getProperties().get("withoutExample");
- assertNull(without.getExample());
- assertFalse(without.getExampleSetFlag(), "Should not be set");
-
- Schema withExample = (Schema) testSchema.getProperties().get("withExample");
- assertEquals(withExample.getExample(), "test");
- assertTrue(withExample.getExampleSetFlag(), "Should be set");
- }
-
- @Test(description = "Test parameter schema example null vs not set")
- public void testParameterSchemaExampleNullVsNotSet() {
- String yaml = "openapi: 3.0.0\n" +
- "info:\n" +
- " title: Test\n" +
- " version: 1.0.0\n" +
- "paths:\n" +
- " /test:\n" +
- " get:\n" +
- " parameters:\n" +
- " - name: nullExample\n" +
- " in: query\n" +
- " schema:\n" +
- " type: string\n" +
- " example: null\n" +
- " - name: noExample\n" +
- " in: query\n" +
- " schema:\n" +
- " type: string\n" +
- " responses:\n" +
- " '200':\n" +
- " description: OK\n";
-
- OpenAPI openAPI = new OpenAPIV3Parser().readContents(yaml, null, null).getOpenAPI();
- assertNotNull(openAPI);
-
- java.util.List params = openAPI.getPaths().get("/test").getGet().getParameters();
- assertEquals(params.size(), 2);
-
- Schema nullSchema = params.get(0).getSchema();
- assertNull(nullSchema.getExample());
- assertTrue(nullSchema.getExampleSetFlag(), "Should be explicitly set to null");
-
- Schema noExampleSchema = params.get(1).getSchema();
- assertNull(noExampleSchema.getExample());
- assertFalse(noExampleSchema.getExampleSetFlag(), "Should not be set");
- }
-
- @Test(description = "Test media type example null vs not set")
- public void testMediaTypeExampleNullVsNotSet() {
- String yaml = "openapi: 3.0.0\n" +
- "info:\n" +
- " title: Test\n" +
- " version: 1.0.0\n" +
- "paths:\n" +
- " /test:\n" +
- " post:\n" +
- " requestBody:\n" +
- " content:\n" +
- " application/json:\n" +
- " schema:\n" +
- " type: object\n" +
- " example: null\n" +
- " application/xml:\n" +
- " schema:\n" +
- " type: object\n" +
- " responses:\n" +
- " '200':\n" +
- " description: OK\n";
-
- OpenAPI openAPI = new OpenAPIV3Parser().readContents(yaml, null, null).getOpenAPI();
- assertNotNull(openAPI);
-
- io.swagger.v3.oas.models.media.Content content = openAPI.getPaths().get("/test").getPost().getRequestBody().getContent();
-
- io.swagger.v3.oas.models.media.MediaType jsonMedia = content.get("application/json");
- assertNull(jsonMedia.getExample());
- assertTrue(jsonMedia.getExampleSetFlag(), "Should be explicitly set to null");
-
- io.swagger.v3.oas.models.media.MediaType xmlMedia = content.get("application/xml");
- assertNull(xmlMedia.getExample());
- assertFalse(xmlMedia.getExampleSetFlag(), "Should not be set");
- }
-
- @Test(description = "Test header schema example null vs not set")
- public void testHeaderSchemaExampleNullVsNotSet() {
- String yaml = "openapi: 3.0.0\n" +
- "info:\n" +
- " title: Test\n" +
- " version: 1.0.0\n" +
- "paths:\n" +
- " /test:\n" +
- " get:\n" +
- " responses:\n" +
- " '200':\n" +
- " description: OK\n" +
- " headers:\n" +
- " X-Null-Example:\n" +
- " schema:\n" +
- " type: string\n" +
- " example: null\n" +
- " X-No-Example:\n" +
- " schema:\n" +
- " type: string\n";
-
- OpenAPI openAPI = new OpenAPIV3Parser().readContents(yaml, null, null).getOpenAPI();
- assertNotNull(openAPI);
-
- java.util.Map headers = openAPI.getPaths().get("/test").getGet().getResponses().get("200").getHeaders();
-
- Schema nullSchema = headers.get("X-Null-Example").getSchema();
- assertNull(nullSchema.getExample());
- assertTrue(nullSchema.getExampleSetFlag(), "Should be explicitly set to null");
-
- Schema noExampleSchema = headers.get("X-No-Example").getSchema();
- assertNull(noExampleSchema.getExample());
- assertFalse(noExampleSchema.getExampleSetFlag(), "Should not be set");
- }
-
- @Test(description = "Test multiple defaults in allOf - should not set any if different")
- public void testAllOfMultipleDifferentDefaults() {
- String yaml = "openapi: 3.0.0\n" +
- "info:\n" +
- " title: Test\n" +
- " version: 1.0.0\n" +
- "paths: {}\n" +
- "components:\n" +
- " schemas:\n" +
- " Schema1:\n" +
- " type: object\n" +
- " default:\n" +
- " value: 1\n" +
- " properties:\n" +
- " value:\n" +
- " type: integer\n" +
- " Schema2:\n" +
- " type: object\n" +
- " default:\n" +
- " value: 2\n" +
- " properties:\n" +
- " value:\n" +
- " type: integer\n" +
- " CombinedSchema:\n" +
- " allOf:\n" +
- " - $ref: '#/components/schemas/Schema1'\n" +
- " - $ref: '#/components/schemas/Schema2'\n";
-
- ParseOptions options = new ParseOptions();
- options.setResolveFully(true);
- options.setResolveCombinators(true);
-
- OpenAPI openAPI = new OpenAPIV3Parser().readContents(yaml, null, options).getOpenAPI();
- assertNotNull(openAPI);
-
- Schema combined = openAPI.getComponents().getSchemas().get("CombinedSchema");
- assertNotNull(combined);
- // When multiple different defaults exist, none should be set
- assertNull(combined.getDefault(), "Default should not be set when multiple different defaults exist");
- }
-
- @Test(description = "Test resolveFully without resolveCombinators preserves defaults")
- public void testResolveFullyWithoutCombinators() {
- String yaml = "openapi: 3.0.0\n" +
- "info:\n" +
- " title: Test\n" +
- " version: 1.0.0\n" +
- "paths: {}\n" +
- "components:\n" +
- " schemas:\n" +
- " BaseSchema:\n" +
- " type: object\n" +
- " default:\n" +
- " name: 'test'\n" +
- " properties:\n" +
- " name:\n" +
- " type: string\n" +
- " ExtendedSchema:\n" +
- " allOf:\n" +
- " - $ref: '#/components/schemas/BaseSchema'\n" +
- " default:\n" +
- " name: 'extended'\n";
-
- ParseOptions options = new ParseOptions();
- options.setResolveFully(true);
- options.setResolveCombinators(false);
-
- OpenAPI openAPI = new OpenAPIV3Parser().readContents(yaml, null, options).getOpenAPI();
- assertNotNull(openAPI);
-
-
- Schema extended = openAPI.getComponents().getSchemas().get("ExtendedSchema");
- assertNotNull(extended);
- assertNotNull(extended.getDefault(), "Default should be preserved");
- // Default is stored as a JsonNode internally
- assertTrue(extended.getDefault() instanceof com.fasterxml.jackson.databind.node.ObjectNode);
- }
-}
diff --git a/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/test/OpenAPIResolverNullHandlingTest.java b/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/test/OpenAPIResolverNullHandlingTest.java
deleted file mode 100644
index 6ddf2fa7db..0000000000
--- a/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/test/OpenAPIResolverNullHandlingTest.java
+++ /dev/null
@@ -1,387 +0,0 @@
-package io.swagger.v3.parser.test;
-
-import io.swagger.v3.core.util.Json;
-import io.swagger.v3.oas.models.OpenAPI;
-import io.swagger.v3.oas.models.media.Schema;
-import io.swagger.v3.oas.models.parameters.Parameter;
-import io.swagger.v3.parser.OpenAPIV3Parser;
-import io.swagger.v3.parser.core.models.ParseOptions;
-import io.swagger.v3.parser.core.models.SwaggerParseResult;
-import org.testng.annotations.Test;
-
-import java.util.List;
-import java.util.Map;
-
-import static org.testng.Assert.*;
-
-/**
- * Tests for null handling in OpenAPI resolver with references and schema resolution.
- * These tests verify that example: null and default: null are properly handled
- * during the resolution process, including with $ref references.
- */
-public class OpenAPIResolverNullHandlingTest {
-
- @Test
- public void testSchemaWithExplicitNullExample() {
- String yaml = "openapi: 3.0.0\n" +
- "info:\n" +
- " title: Test\n" +
- " version: 1.0.0\n" +
- "paths:\n" +
- " /test:\n" +
- " get:\n" +
- " responses:\n" +
- " '200':\n" +
- " description: Success\n" +
- " content:\n" +
- " application/json:\n" +
- " schema:\n" +
- " $ref: '#/components/schemas/TestSchema'\n" +
- "components:\n" +
- " schemas:\n" +
- " TestSchema:\n" +
- " type: object\n" +
- " example: null\n" +
- " properties:\n" +
- " id:\n" +
- " type: string\n" +
- " value:\n" +
- " type: string\n" +
- " example: null\n";
-
- ParseOptions options = new ParseOptions();
- options.setResolve(true);
- options.setResolveFully(true);
-
- SwaggerParseResult result = new OpenAPIV3Parser().readContents(yaml, null, options);
- OpenAPI openAPI = result.getOpenAPI();
-
- assertNotNull(openAPI);
- Schema testSchema = openAPI.getComponents().getSchemas().get("TestSchema");
- assertNotNull(testSchema);
- assertNull(testSchema.getExample());
-
- Schema valueProperty = (Schema) testSchema.getProperties().get("value");
- assertNotNull(valueProperty);
- assertNull(valueProperty.getExample());
-
- Schema responseSchema = openAPI.getPaths().get("/test").getGet()
- .getResponses().get("200").getContent().get("application/json").getSchema();
- assertNull(responseSchema.getExample());
- }
-
- @Test
- public void testSchemaWithExplicitNullDefault() {
- String yaml = "openapi: 3.0.0\n" +
- "info:\n" +
- " title: Test\n" +
- " version: 1.0.0\n" +
- "paths:\n" +
- " /test:\n" +
- " post:\n" +
- " requestBody:\n" +
- " content:\n" +
- " application/json:\n" +
- " schema:\n" +
- " $ref: '#/components/schemas/TestSchema'\n" +
- " responses:\n" +
- " '200':\n" +
- " description: Success\n" +
- "components:\n" +
- " schemas:\n" +
- " TestSchema:\n" +
- " type: object\n" +
- " default: null\n" +
- " properties:\n" +
- " status:\n" +
- " type: string\n" +
- " default: null\n" +
- " count:\n" +
- " type: integer\n" +
- " default: null\n";
-
- ParseOptions options = new ParseOptions();
- options.setResolve(true);
- options.setResolveFully(true);
-
- SwaggerParseResult result = new OpenAPIV3Parser().readContents(yaml, null, options);
- OpenAPI openAPI = result.getOpenAPI();
-
-
- assertNotNull(openAPI);
- Schema testSchema = openAPI.getComponents().getSchemas().get("TestSchema");
- assertNotNull(testSchema);
- assertNull(testSchema.getDefault());
-
- Schema statusProperty = (Schema) testSchema.getProperties().get("status");
- assertNotNull(statusProperty);
- assertNull(statusProperty.getDefault());
-
- Schema countProperty = (Schema) testSchema.getProperties().get("count");
- assertNotNull(countProperty);
- assertNull(countProperty.getDefault());
-
- Schema requestBodySchema = openAPI.getPaths().get("/test").getPost()
- .getRequestBody().getContent().get("application/json").getSchema();
- assertNull(requestBodySchema.getDefault());
- }
-
- @Test
- public void testAllOfWithNullExampleAndDefault() {
- String yaml = "openapi: 3.0.0\n" +
- "info:\n" +
- " title: Test\n" +
- " version: 1.0.0\n" +
- "paths: {}\n" +
- "components:\n" +
- " schemas:\n" +
- " BaseSchema:\n" +
- " type: object\n" +
- " example: null\n" +
- " default: null\n" +
- " properties:\n" +
- " id:\n" +
- " type: string\n" +
- " ExtendedSchema:\n" +
- " allOf:\n" +
- " - $ref: '#/components/schemas/BaseSchema'\n" +
- " - type: object\n" +
- " properties:\n" +
- " name:\n" +
- " type: string\n" +
- " example: null\n" +
- " default: null\n";
-
- ParseOptions options = new ParseOptions();
- options.setResolveFully(true);
- options.setResolveCombinators(true);
-
- SwaggerParseResult result = new OpenAPIV3Parser().readContents(yaml, null, options);
- OpenAPI openAPI = result.getOpenAPI();
-
- assertNotNull(openAPI);
- Schema extendedSchema = openAPI.getComponents().getSchemas().get("ExtendedSchema");
- assertNotNull(extendedSchema);
-
- assertNull(extendedSchema.getExample());
- assertNull(extendedSchema.getDefault());
-
- if (extendedSchema.getProperties() != null) {
- Schema nameProperty = (Schema) extendedSchema.getProperties().get("name");
- if (nameProperty != null) {
- assertNull(nameProperty.getExample());
- assertNull(nameProperty.getDefault());
- }
- }
- }
-
- @Test
- public void testParameterWithNullExampleAndDefault() {
- String yaml = "openapi: 3.0.0\n" +
- "info:\n" +
- " title: Test\n" +
- " version: 1.0.0\n" +
- "paths:\n" +
- " /test:\n" +
- " get:\n" +
- " parameters:\n" +
- " - name: testParam\n" +
- " in: query\n" +
- " schema:\n" +
- " type: string\n" +
- " example: null\n" +
- " default: null\n" +
- " - $ref: '#/components/parameters/RefParam'\n" +
- " responses:\n" +
- " '200':\n" +
- " description: Success\n" +
- "components:\n" +
- " parameters:\n" +
- " RefParam:\n" +
- " name: refParam\n" +
- " in: query\n" +
- " schema:\n" +
- " type: integer\n" +
- " example: null\n" +
- " default: null\n";
-
- ParseOptions options = new ParseOptions();
- options.setResolve(true);
- options.setResolveFully(true);
-
- SwaggerParseResult result = new OpenAPIV3Parser().readContents(yaml, null, options);
- OpenAPI openAPI = result.getOpenAPI();
-
- assertNotNull(openAPI);
- List parameters = openAPI.getPaths().get("/test").getGet().getParameters();
- assertNotNull(parameters);
- assertEquals(2, parameters.size());
-
- Parameter testParam = parameters.get(0);
- assertNotNull(testParam.getSchema());
- assertNull(testParam.getSchema().getExample());
- assertNull(testParam.getSchema().getDefault());
-
- Parameter refParam = parameters.get(1);
- assertNotNull(refParam.getSchema());
- assertNull(refParam.getSchema().getExample());
- assertNull(refParam.getSchema().getDefault());
- }
-
-
- @Test
- public void testNullDefaultNotPropagatedInAllOf() {
- String yaml = "openapi: 3.0.0\n" +
- "info:\n" +
- " title: Test\n" +
- " version: 1.0.0\n" +
- "paths: {}\n" +
- "components:\n" +
- " schemas:\n" +
- " BaseSchema:\n" +
- " type: object\n" +
- " properties:\n" +
- " id:\n" +
- " type: string\n" +
- " ExtendedSchema:\n" +
- " allOf:\n" +
- " - $ref: '#/components/schemas/BaseSchema'\n" +
- " - type: object\n" +
- " properties:\n" +
- " name:\n" +
- " type: string\n";
-
- ParseOptions options = new ParseOptions();
- options.setResolveFully(true);
- options.setResolveCombinators(true);
-
- SwaggerParseResult result = new OpenAPIV3Parser().readContents(yaml, null, options);
- OpenAPI openAPI = result.getOpenAPI();
-
- assertNotNull(openAPI);
- Schema extendedSchema = openAPI.getComponents().getSchemas().get("ExtendedSchema");
- assertNotNull(extendedSchema);
-
- assertNull(extendedSchema.getDefault());
-
-
- if (extendedSchema.getProperties() != null) {
- Schema idProperty = (Schema) extendedSchema.getProperties().get("id");
- Schema nameProperty = (Schema) extendedSchema.getProperties().get("name");
- if (idProperty != null) {
- assertNull(idProperty.getDefault());
- }
- if (nameProperty != null) {
- assertNull(nameProperty.getDefault());
- }
- }
-
- }
-
-
- @Test
- public void testSourceDefaultWhenResolvedIsNull() {
- String yaml = "openapi: 3.0.0\n" +
- "info:\n" +
- " title: Test\n" +
- " version: 1.0.0\n" +
- "paths: {}\n" +
- "components:\n" +
- " schemas:\n" +
- " BaseSchema:\n" +
- " type: object\n" +
- " properties:\n" +
- " count:\n" +
- " type: integer\n" +
- " ExtendedSchema:\n" +
- " allOf:\n" +
- " - $ref: '#/components/schemas/BaseSchema'\n" +
- " default:\n" +
- " count: 10\n";
-
- ParseOptions options = new ParseOptions();
- options.setResolveFully(true);
- options.setResolveCombinators(true);
-
- SwaggerParseResult result = new OpenAPIV3Parser().readContents(yaml, null, options);
- OpenAPI openAPI = result.getOpenAPI();
-
- assertNotNull(openAPI);
- Schema extendedSchema = openAPI.getComponents().getSchemas().get("ExtendedSchema");
- assertNotNull(extendedSchema);
-
- assertNotNull(extendedSchema.getDefault());
- }
-
- @Test
- public void testOneOfNullDefaultNotPropagated() {
- String yaml = "openapi: 3.0.0\n" +
- "info:\n" +
- " title: Test\n" +
- " version: 1.0.0\n" +
- "paths: {}\n" +
- "components:\n" +
- " schemas:\n" +
- " StringSchema:\n" +
- " type: string\n" +
- " NumberSchema:\n" +
- " type: number\n" +
- " UnionSchema:\n" +
- " oneOf:\n" +
- " - $ref: '#/components/schemas/StringSchema'\n" +
- " - $ref: '#/components/schemas/NumberSchema'\n";
-
- ParseOptions options = new ParseOptions();
- options.setResolveFully(true);
- options.setResolveCombinators(false);
-
- SwaggerParseResult result = new OpenAPIV3Parser().readContents(yaml, null, options);
- OpenAPI openAPI = result.getOpenAPI();
-
- assertNotNull(openAPI);
- Schema unionSchema = openAPI.getComponents().getSchemas().get("UnionSchema");
- assertNotNull(unionSchema);
-
- assertNull(unionSchema.getDefault());
- }
-
- @Test
- public void testAnyOfNonNullDefaultPreserved() {
- String yaml = "openapi: 3.0.0\n" +
- "info:\n" +
- " title: Test\n" +
- " version: 1.0.0\n" +
- "paths: {}\n" +
- "components:\n" +
- " schemas:\n" +
- " Schema1:\n" +
- " type: object\n" +
- " properties:\n" +
- " prop1:\n" +
- " type: string\n" +
- " Schema2:\n" +
- " type: object\n" +
- " properties:\n" +
- " prop2:\n" +
- " type: integer\n" +
- " CombinedSchema:\n" +
- " anyOf:\n" +
- " - $ref: '#/components/schemas/Schema1'\n" +
- " - $ref: '#/components/schemas/Schema2'\n" +
- " default:\n" +
- " prop1: 'test'\n";
-
- ParseOptions options = new ParseOptions();
- options.setResolveFully(true);
- options.setResolveCombinators(false);
-
- SwaggerParseResult result = new OpenAPIV3Parser().readContents(yaml, null, options);
- OpenAPI openAPI = result.getOpenAPI();
-
- assertNotNull(openAPI);
- Schema combinedSchema = openAPI.getComponents().getSchemas().get("CombinedSchema");
- assertNotNull(combinedSchema);
-
- assertNotNull(combinedSchema.getDefault());
- }
-}
diff --git a/pom.xml b/pom.xml
index daa8070254..6e657c8ed5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -294,16 +294,6 @@
-
- io.swagger.core.v3
- swagger-core
- ${swagger-core-version}
-
-
- io.swagger.core.v3
- swagger-models
- ${swagger-core-version}
-
org.yaml
snakeyaml
@@ -317,7 +307,7 @@
com.fasterxml.jackson.core
jackson-annotations
- ${jackson-annotations-version}
+ ${jackson-version}
com.fasterxml.jackson.core
@@ -375,7 +365,7 @@
1.0.75
2.20.0
2.0.9
- 2.2.45
+ 2.2.37
1.6.16
4.13.2
7.11.0
@@ -383,9 +373,8 @@
2.35.2
3.2.2
3.18.0
- 2.21.1
- 2.21
- 2.21.1
+ 2.19.0
+ 2.19.0
UTF-8