You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2023/05/13 06:59:22 UTC

[camel-spring-boot] branch main updated: CAMEL-18963: upgrade both spring-boot starters using camel-openapi-java (#837)

This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-spring-boot.git


The following commit(s) were added to refs/heads/main by this push:
     new 64900389e43 CAMEL-18963: upgrade both spring-boot starters using camel-openapi-java (#837)
64900389e43 is described below

commit 64900389e43c2793d96239f6fef4e5044ccad0a6
Author: klease <38...@users.noreply.github.com>
AuthorDate: Sat May 13 08:59:17 2023 +0200

    CAMEL-18963: upgrade both spring-boot starters using camel-openapi-java (#837)
    
    Modify the AutoConfiguration classes to use the modified return type in
    RestOpenApiReader.read method. Since OpenAPI is now directly returned
    there is no need to convert it to json and reparse it with swagger. In
    addition, this change allows handling of an OpenAPI 2.x specification
    which will be automatically upgraded to OpenAPI 3.x. Previously this
    would have failed due to the direct use of OpenAPIV3Parser.
---
 .../camel-openapi-java-starter/pom.xml             |   8 ++
 .../openapi/OpenApiAutoConfiguration.java          |  37 ++-----
 .../org/apache/camel/openapi/ComplexTypesTest.java |  16 +--
 ...estOpenApiModelApiSecurityRequirementsTest.java |  27 +----
 .../RestOpenApiReaderApiDocsOverrideTest.java      |  23 ++--
 .../openapi/RestOpenApiReaderApiDocsTest.java      |  23 ++--
 .../openapi/RestOpenApiReaderContextPathTest.java  |  43 +++-----
 .../openapi/RestOpenApiReaderDayOfWeekTest.java    |  23 ++--
 ...RestOpenApiReaderEnableVendorExtensionTest.java |  23 ++--
 .../RestOpenApiReaderFileResponseModelTest.java    |  30 ++----
 .../RestOpenApiReaderModelApiSecurityTest.java     |  23 ++--
 .../RestOpenApiReaderModelBookOrderTest.java       |  23 ++--
 .../camel/openapi/RestOpenApiReaderModelTest.java  |  23 ++--
 .../RestOpenApiReaderOverrideHostApiDocsTest.java  |  23 ++--
 .../RestOpenApiReaderPropertyPlaceholderTest.java  |  15 +--
 .../camel/openapi/RestOpenApiReaderTest.java       |  40 +++----
 .../openapi/RestOpenApiV2SecuritySchemesTest.java  |  32 ++----
 .../openapi/RestOpenApiV3SecuritySchemesTest.java  |  42 ++++----
 ...pringRestOpenApiReaderModelApiSecurityTest.java |  23 ++--
 .../{log4j2.properties => application.properties}  |  13 +--
 .../src/test/resources/logback.xml                 |  33 ++++++
 .../openapi/V2SchemaForComplexTypesRequest.json    | 118 ++++++++++-----------
 .../openapi/V2SchemaForComplexTypesResponse.json   |  70 ++++++------
 .../openapi/V3SchemaForComplexTypesRequest.json    |  46 ++++----
 .../openapi/V3SchemaForComplexTypesResponse.json   |  36 +++----
 .../springdoc/SpringdocAutoConfiguration.java      |  40 ++-----
 26 files changed, 328 insertions(+), 525 deletions(-)

diff --git a/components-starter/camel-openapi-java-starter/pom.xml b/components-starter/camel-openapi-java-starter/pom.xml
index 4dfbfe923cf..229f64c2c92 100644
--- a/components-starter/camel-openapi-java-starter/pom.xml
+++ b/components-starter/camel-openapi-java-starter/pom.xml
@@ -38,6 +38,14 @@
       <groupId>org.apache.camel</groupId>
       <artifactId>camel-openapi-java</artifactId>
       <version>${camel-version}</version>
+      <!--START OF GENERATED CODE-->
+      <exclusions>
+        <exclusion>
+          <groupId>commons-logging</groupId>
+          <artifactId>commons-logging</artifactId>
+        </exclusion>
+      </exclusions>
+      <!--END OF GENERATED CODE-->
     </dependency>
     <dependency>
       <groupId>io.swagger.parser.v3</groupId>
diff --git a/components-starter/camel-openapi-java-starter/src/main/java/org/apache/camel/springboot/openapi/OpenApiAutoConfiguration.java b/components-starter/camel-openapi-java-starter/src/main/java/org/apache/camel/springboot/openapi/OpenApiAutoConfiguration.java
index 7142c2febb6..cb329cf3b6f 100644
--- a/components-starter/camel-openapi-java-starter/src/main/java/org/apache/camel/springboot/openapi/OpenApiAutoConfiguration.java
+++ b/components-starter/camel-openapi-java-starter/src/main/java/org/apache/camel/springboot/openapi/OpenApiAutoConfiguration.java
@@ -16,17 +16,9 @@
  */
 package org.apache.camel.springboot.openapi;
 
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
-import com.fasterxml.jackson.dataformat.yaml.YAMLMapper;
-import io.apicurio.datamodels.openapi.models.OasDocument;
 import io.swagger.v3.oas.models.OpenAPI;
 import io.swagger.v3.oas.models.info.Contact;
 import io.swagger.v3.oas.models.info.Info;
-import io.swagger.v3.parser.OpenAPIV3Parser;
-import io.swagger.v3.parser.core.models.SwaggerParseResult;
 import org.apache.camel.CamelContext;
 import org.apache.camel.model.rest.RestDefinition;
 import org.apache.camel.openapi.BeanConfig;
@@ -134,29 +126,14 @@ public class OpenApiAutoConfiguration {
         RestConfiguration rc = camelContext.getRestConfiguration();
         initOpenApi(bc, info, rc.getApiProperties());
 
-        OasDocument openApi = reader.read(camelContext, rests, bc, null, camelContext.getClassResolver());
-        if (!rc.isApiVendorExtension()) {
-            clearVendorExtensions(openApi);
-        }
-
-        // dump to json
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.enable(SerializationFeature.INDENT_OUTPUT);
-        mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
-        Object dump = io.apicurio.datamodels.Library.writeNode(openApi);
-        byte[] jsonData = mapper.writeValueAsBytes(dump);
-        // json to yaml
-        JsonNode node = mapper.readTree(jsonData);
-        String yaml = new YAMLMapper().writeValueAsString(node);
-
-        // parse bytes into swagger
-        OpenAPIV3Parser parser = new OpenAPIV3Parser();
-        SwaggerParseResult spr = parser.readContents(yaml);
-        OpenAPI answer = spr.getOpenAPI();
-        if (answer != null) {
-            answer.setInfo(info);
+        OpenAPI openApi = reader.read(camelContext, rests, bc, null, camelContext.getClassResolver());
+        if (openApi != null){
+            if (!rc.isApiVendorExtension()) {
+                clearVendorExtensions(openApi);
+            }
+            openApi.setInfo(info);
         }
-        return answer;
+        return openApi;
     }
 
     private static void initOpenApi(BeanConfig bc, Info info, Map<String, Object> config) {
diff --git a/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/ComplexTypesTest.java b/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/ComplexTypesTest.java
index 399ffcd6527..afa9bbd196e 100644
--- a/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/ComplexTypesTest.java
+++ b/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/ComplexTypesTest.java
@@ -41,10 +41,6 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.test.annotation.DirtiesContext;
 
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
-
 import java.io.BufferedReader;
 import java.io.InputStream;
 import java.io.InputStreamReader;
@@ -52,8 +48,7 @@ import java.nio.charset.StandardCharsets;
 import java.util.List;
 import java.util.stream.Collectors;
 
-import io.apicurio.datamodels.Library;
-import io.apicurio.datamodels.openapi.models.OasDocument;
+import io.swagger.v3.oas.models.OpenAPI;
 
 @DirtiesContext
 @CamelSpringBootTest
@@ -160,14 +155,9 @@ public class ComplexTypesTest {
 				.collect(Collectors.toList());
 
 		RestOpenApiReader reader = new RestOpenApiReader();
-		OasDocument openApi = reader.read(context, rests, config, context.getName(), new DefaultClassResolver());
+		OpenAPI openApi = reader.read(context, rests, config, context.getName(), new DefaultClassResolver());
 		assertNotNull(openApi);
-
-		ObjectMapper mapper = new ObjectMapper();
-		mapper.enable(SerializationFeature.INDENT_OUTPUT);
-		mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
-		Object dump = Library.writeNode(openApi);
-		String json = mapper.writeValueAsString(dump);
+		String json = RestOpenApiSupport.getJsonFromOpenAPI(openApi, config);
 
 		LOG.info(json);
 
diff --git a/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiModelApiSecurityRequirementsTest.java b/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiModelApiSecurityRequirementsTest.java
index e5d438e9cf8..281730f05a5 100644
--- a/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiModelApiSecurityRequirementsTest.java
+++ b/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiModelApiSecurityRequirementsTest.java
@@ -36,12 +36,7 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.test.annotation.DirtiesContext;
 
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
-
-import io.apicurio.datamodels.Library;
-import io.apicurio.datamodels.openapi.models.OasDocument;
+import io.swagger.v3.oas.models.OpenAPI;
 
 @DirtiesContext
 @CamelSpringBootTest
@@ -99,16 +94,10 @@ public class RestOpenApiModelApiSecurityRequirementsTest {
 		config.setVersion("2.0");
 		RestOpenApiReader reader = new RestOpenApiReader();
 
-		OasDocument openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
+		OpenAPI openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
 				new DefaultClassResolver());
 		assertNotNull(openApi);
-
-		ObjectMapper mapper = new ObjectMapper();
-		mapper.enable(SerializationFeature.INDENT_OUTPUT);
-		mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
-		Object dump = Library.writeNode(openApi);
-		String json = mapper.writeValueAsString(dump);
-
+		String json = RestOpenApiSupport.getJsonFromOpenAPI(openApi, config);
 		log.info(json);
 
 		assertTrue(json.contains("\"securityDefinitions\" : {"));
@@ -132,16 +121,10 @@ public class RestOpenApiModelApiSecurityRequirementsTest {
 		config.setLicenseUrl("https://www.apache.org/licenses/LICENSE-2.0.html");
 		RestOpenApiReader reader = new RestOpenApiReader();
 
-		OasDocument openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
+		OpenAPI openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
 				new DefaultClassResolver());
 		assertNotNull(openApi);
-
-		ObjectMapper mapper = new ObjectMapper();
-		mapper.enable(SerializationFeature.INDENT_OUTPUT);
-		mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
-		Object dump = Library.writeNode(openApi);
-		String json = mapper.writeValueAsString(dump);
-
+        String json = io.swagger.v3.core.util.Json.pretty(openApi);
 		log.info(json);
 
 		assertTrue(json.contains("securitySchemes"));
diff --git a/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderApiDocsOverrideTest.java b/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderApiDocsOverrideTest.java
index 60ce55b76b6..09cefca521a 100644
--- a/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderApiDocsOverrideTest.java
+++ b/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderApiDocsOverrideTest.java
@@ -39,12 +39,9 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.test.annotation.DirtiesContext;
 
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
 
-import io.apicurio.datamodels.Library;
-import io.apicurio.datamodels.openapi.models.OasDocument;
+import io.swagger.v3.core.util.Json;
+import io.swagger.v3.oas.models.OpenAPI;
 
 @DirtiesContext
 @CamelSpringBootTest
@@ -98,17 +95,13 @@ public class RestOpenApiReaderApiDocsOverrideTest {
 		config.setBasePath("/api");
 		config.setVersion("2.0");
 		RestOpenApiReader reader = new RestOpenApiReader();
-		OasDocument openApi = null;
+		OpenAPI openApi = null;
 		openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
 				new DefaultClassResolver());
 
 		assertNotNull(openApi);
 
-		ObjectMapper mapper = new ObjectMapper();
-		mapper.enable(SerializationFeature.INDENT_OUTPUT);
-		mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
-		Object dump = Library.writeNode(openApi);
-		String json = mapper.writeValueAsString(dump);
+		String json = RestOpenApiSupport.getJsonFromOpenAPI(openApi, config);
 		log.info(json);
 
 		assertFalse(json.contains("\"/hello/bye\""));
@@ -126,17 +119,13 @@ public class RestOpenApiReaderApiDocsOverrideTest {
 		config.setSchemes(new String[] {"http"});
 		config.setBasePath("/api");
 		RestOpenApiReader reader = new RestOpenApiReader();
-		OasDocument openApi = null;
+		OpenAPI openApi = null;
 		openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
 				new DefaultClassResolver());
 
 		assertNotNull(openApi);
 
-		ObjectMapper mapper = new ObjectMapper();
-		mapper.enable(SerializationFeature.INDENT_OUTPUT);
-		mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
-		Object dump = Library.writeNode(openApi);
-		String json = mapper.writeValueAsString(dump);
+		String json = Json.pretty(openApi);
 		log.info(json);
 
 		assertFalse(json.contains("\"/hello/bye\""));
diff --git a/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderApiDocsTest.java b/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderApiDocsTest.java
index eb4aa7ca221..081996ea048 100644
--- a/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderApiDocsTest.java
+++ b/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderApiDocsTest.java
@@ -39,12 +39,9 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.test.annotation.DirtiesContext;
 
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
 
-import io.apicurio.datamodels.Library;
-import io.apicurio.datamodels.openapi.models.OasDocument;
+import io.swagger.v3.core.util.Json;
+import io.swagger.v3.oas.models.OpenAPI;
 
 @DirtiesContext
 @CamelSpringBootTest
@@ -99,15 +96,11 @@ public class RestOpenApiReaderApiDocsTest {
 		config.setVersion("2.0");
 		RestOpenApiReader reader = new RestOpenApiReader();
 
-		OasDocument openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
+		OpenAPI openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
 				new DefaultClassResolver());
 		assertNotNull(openApi);
 
-		ObjectMapper mapper = new ObjectMapper();
-		mapper.enable(SerializationFeature.INDENT_OUTPUT);
-		mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
-		Object dump = Library.writeNode(openApi);
-		String json = mapper.writeValueAsString(dump);
+		String json = RestOpenApiSupport.getJsonFromOpenAPI(openApi, config);
 
 		log.info(json);
 
@@ -130,15 +123,11 @@ public class RestOpenApiReaderApiDocsTest {
 		config.setBasePath("/api");
 		RestOpenApiReader reader = new RestOpenApiReader();
 
-		OasDocument openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
+		OpenAPI openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
 				new DefaultClassResolver());
 		assertNotNull(openApi);
 
-		ObjectMapper mapper = new ObjectMapper();
-		mapper.enable(SerializationFeature.INDENT_OUTPUT);
-		mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
-		Object dump = Library.writeNode(openApi);
-		String json = mapper.writeValueAsString(dump);
+		String json = Json.pretty(openApi);
 
 		log.info(json);
 
diff --git a/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderContextPathTest.java b/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderContextPathTest.java
index f3f5fd20333..c17b73a1ef8 100644
--- a/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderContextPathTest.java
+++ b/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderContextPathTest.java
@@ -39,14 +39,10 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.test.annotation.DirtiesContext;
 
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
 
-import io.apicurio.datamodels.Library;
-import io.apicurio.datamodels.openapi.models.OasDocument;
-import io.apicurio.datamodels.openapi.v2.models.Oas20Info;
-import io.apicurio.datamodels.openapi.v3.models.Oas30Info;
+import io.swagger.v3.core.util.Json;
+import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.oas.models.info.Info;
 
 @DirtiesContext
 @CamelSpringBootTest
@@ -102,20 +98,16 @@ public class RestOpenApiReaderContextPathTest {
 		config.setHost("localhost:8080");
 		config.setSchemes(new String[] {"http"});
 		config.setBasePath("/api");
-		Oas20Info info = new Oas20Info();
+		Info info = new Info();
 		config.setInfo(info);
 		config.setVersion("2.0");
 		RestOpenApiReader reader = new RestOpenApiReader();
 
-		OasDocument openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
+		OpenAPI openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
 				new DefaultClassResolver());
 		assertNotNull(openApi);
 
-		ObjectMapper mapper = new ObjectMapper();
-		mapper.enable(SerializationFeature.INDENT_OUTPUT);
-		mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
-		Object dump = Library.writeNode(openApi);
-		String json = mapper.writeValueAsString(dump);
+		String json = RestOpenApiSupport.getJsonFromOpenAPI(openApi, config);
 
 		log.info(json);
 
@@ -144,22 +136,19 @@ public class RestOpenApiReaderContextPathTest {
 		config.setHost("localhost:8080");
 		config.setSchemes(new String[] {"http"});
 		config.setBasePath("/api");
-		Oas30Info info = new Oas30Info();
+		Info info = new Info();
 		config.setInfo(info);
 		RestOpenApiReader reader = new RestOpenApiReader();
 
-		OasDocument openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
+		OpenAPI openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
 				new DefaultClassResolver());
 		assertNotNull(openApi);
 
-		ObjectMapper mapper = new ObjectMapper();
-		mapper.enable(SerializationFeature.INDENT_OUTPUT);
-		mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
-		Object dump = Library.writeNode(openApi);
-		String json = mapper.writeValueAsString(dump);
+		String json = Json.pretty(openApi);
 
 		log.info(json);
-
+		json = json.replace("\n", " ").replaceAll("\\s+", " ");
+		
 		assertTrue(json.contains("\"url\" : \"http://localhost:8080/api\""));
 		assertTrue(json.contains("\"/hello/bye\""));
 		assertTrue(json.contains("\"summary\" : \"To update the greeting message\""));
@@ -169,10 +158,12 @@ public class RestOpenApiReaderContextPathTest {
 		assertFalse(json.contains("\"/api/hello/hi/{name}\""));
 		assertTrue(json.contains("\"type\" : \"number\""));
 		assertTrue(json.contains("\"format\" : \"float\""));
-		assertTrue(json.contains("\"application/xml\" : \"<hello>Hi</hello>\""));
-		assertTrue(json.contains("\"x-example\" : \"Donald Duck\""));
-		assertTrue(json.contains("\"success\" : \"123\""));
-		assertTrue(json.contains("\"error\" : \"-1\""));
+		// The example is under the section for this media type
+        assertTrue(json.contains("\"application/xml\" : {"));
+        assertTrue(json.contains("\"example\" : \"<hello>Hi</hello>\""));
+		assertTrue(json.contains("\"example\" : \"Donald Duck\""));
+		assertTrue(json.contains("\"success\" : { \"value\" : \"123\" }"));
+        assertTrue(json.contains("\"error\" : { \"value\" : \"-1\" }"));
 		assertTrue(json.contains("\"type\" : \"array\""));
 		assertTrue(json.contains("\"format\" : \"date-time\""));
 
diff --git a/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderDayOfWeekTest.java b/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderDayOfWeekTest.java
index 668cb460011..d04358b4bb2 100644
--- a/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderDayOfWeekTest.java
+++ b/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderDayOfWeekTest.java
@@ -38,12 +38,9 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.test.annotation.DirtiesContext;
 
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
 
-import io.apicurio.datamodels.Library;
-import io.apicurio.datamodels.openapi.models.OasDocument;
+import io.swagger.v3.core.util.Json;
+import io.swagger.v3.oas.models.OpenAPI;
 
 @DirtiesContext
 @CamelSpringBootTest
@@ -101,15 +98,11 @@ public class RestOpenApiReaderDayOfWeekTest {
 		config.setVersion("2.0");
 		RestOpenApiReader reader = new RestOpenApiReader();
 
-		OasDocument openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
+		OpenAPI openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
 				new DefaultClassResolver());
 		assertNotNull(openApi);
 
-		ObjectMapper mapper = new ObjectMapper();
-		mapper.enable(SerializationFeature.INDENT_OUTPUT);
-		mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
-		Object dump = Library.writeNode(openApi);
-		String json = mapper.writeValueAsString(dump);
+		String json = RestOpenApiSupport.getJsonFromOpenAPI(openApi, config);
 
 		log.info(json);
 
@@ -136,15 +129,11 @@ public class RestOpenApiReaderDayOfWeekTest {
 		//config.setVersion("2.0");
 		RestOpenApiReader reader = new RestOpenApiReader();
 
-		OasDocument openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
+		OpenAPI openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
 				new DefaultClassResolver());
 		assertNotNull(openApi);
 
-		ObjectMapper mapper = new ObjectMapper();
-		mapper.enable(SerializationFeature.INDENT_OUTPUT);
-		mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
-		Object dump = Library.writeNode(openApi);
-		String json = mapper.writeValueAsString(dump);
+		String json = Json.pretty(openApi);
 
 		log.info(json);
 
diff --git a/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderEnableVendorExtensionTest.java b/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderEnableVendorExtensionTest.java
index db0ba37e654..db630ad6322 100644
--- a/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderEnableVendorExtensionTest.java
+++ b/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderEnableVendorExtensionTest.java
@@ -39,12 +39,9 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.test.annotation.DirtiesContext;
 
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
 
-import io.apicurio.datamodels.Library;
-import io.apicurio.datamodels.openapi.models.OasDocument;
+import io.swagger.v3.core.util.Json;
+import io.swagger.v3.oas.models.OpenAPI;
 
 @DirtiesContext
 @CamelSpringBootTest
@@ -115,15 +112,11 @@ public class RestOpenApiReaderEnableVendorExtensionTest {
 		config.setLicenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html");
 		RestOpenApiReader reader = new RestOpenApiReader();
 
-		OasDocument openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
+		OpenAPI openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
 				new DefaultClassResolver());
 		assertNotNull(openApi);
 
-		ObjectMapper mapper = new ObjectMapper();
-		mapper.enable(SerializationFeature.INDENT_OUTPUT);
-		mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
-		Object dump = Library.writeNode(openApi);
-		String json = mapper.writeValueAsString(dump);
+		String json = RestOpenApiSupport.getJsonFromOpenAPI(openApi, config);
 
 		log.info(json);
 
@@ -149,15 +142,11 @@ public class RestOpenApiReaderEnableVendorExtensionTest {
 		config.setLicenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html");
 		RestOpenApiReader reader = new RestOpenApiReader();
 
-		OasDocument openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
+		OpenAPI openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
 				new DefaultClassResolver());
 		assertNotNull(openApi);
 
-		ObjectMapper mapper = new ObjectMapper();
-		mapper.enable(SerializationFeature.INDENT_OUTPUT);
-		mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
-		Object dump = Library.writeNode(openApi);
-		String json = mapper.writeValueAsString(dump);
+		String json = Json.pretty(openApi);
 
 		log.info(json);
 
diff --git a/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderFileResponseModelTest.java b/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderFileResponseModelTest.java
index af22a357c26..f494a92c20a 100644
--- a/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderFileResponseModelTest.java
+++ b/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderFileResponseModelTest.java
@@ -38,14 +38,10 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.test.annotation.DirtiesContext;
 
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
 
-import io.apicurio.datamodels.Library;
-import io.apicurio.datamodels.openapi.models.OasDocument;
-import io.apicurio.datamodels.openapi.v2.models.Oas20Info;
-import io.apicurio.datamodels.openapi.v3.models.Oas30Info;
+import io.swagger.v3.core.util.Json;
+import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.oas.models.info.Info;
 
 @DirtiesContext
 @CamelSpringBootTest
@@ -90,20 +86,16 @@ public class RestOpenApiReaderFileResponseModelTest {
 		config.setHost("localhost:8080");
 		config.setSchemes(new String[] {"http"});
 		config.setBasePath("/api");
-		Oas20Info info = new Oas20Info();
+		Info info = new Info();
 		config.setInfo(info);
 		config.setVersion("2.0");
 		RestOpenApiReader reader = new RestOpenApiReader();
 
-		OasDocument openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
+		OpenAPI openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
 				new DefaultClassResolver());
 		assertNotNull(openApi);
 
-		ObjectMapper mapper = new ObjectMapper();
-		mapper.enable(SerializationFeature.INDENT_OUTPUT);
-		mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
-		Object dump = Library.writeNode(openApi);
-		String json = mapper.writeValueAsString(dump);
+		String json = RestOpenApiSupport.getJsonFromOpenAPI(openApi, config);
 
 		LOG.info(json);
 		assertTrue(json.contains("\"type\" : \"file\""));
@@ -117,19 +109,15 @@ public class RestOpenApiReaderFileResponseModelTest {
 		config.setHost("localhost:8080");
 		config.setSchemes(new String[] {"http"});
 		config.setBasePath("/api");
-		Oas30Info info = new Oas30Info();
+		Info info = new Info();
 		config.setInfo(info);
 		RestOpenApiReader reader = new RestOpenApiReader();
 
-		OasDocument openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
+		OpenAPI openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
 				new DefaultClassResolver());
 		assertNotNull(openApi);
 
-		ObjectMapper mapper = new ObjectMapper();
-		mapper.enable(SerializationFeature.INDENT_OUTPUT);
-		mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
-		Object dump = Library.writeNode(openApi);
-		String json = mapper.writeValueAsString(dump);
+		String json = Json.pretty(openApi);
 
 		LOG.info(json);
 		assertTrue(json.contains("\"format\" : \"binary\""));
diff --git a/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderModelApiSecurityTest.java b/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderModelApiSecurityTest.java
index e210f9ca1f9..3e2e52ea5e7 100644
--- a/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderModelApiSecurityTest.java
+++ b/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderModelApiSecurityTest.java
@@ -39,12 +39,9 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.test.annotation.DirtiesContext;
 
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
 
-import io.apicurio.datamodels.Library;
-import io.apicurio.datamodels.openapi.models.OasDocument;
+import io.swagger.v3.core.util.Json;
+import io.swagger.v3.oas.models.OpenAPI;
 
 @DirtiesContext
 @CamelSpringBootTest
@@ -120,15 +117,11 @@ public class RestOpenApiReaderModelApiSecurityTest {
 		config.setVersion("2.0");
 		RestOpenApiReader reader = new RestOpenApiReader();
 
-		OasDocument openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
+		OpenAPI openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
 				new DefaultClassResolver());
 		assertNotNull(openApi);
 
-		ObjectMapper mapper = new ObjectMapper();
-		mapper.enable(SerializationFeature.INDENT_OUTPUT);
-		mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
-		Object dump = Library.writeNode(openApi);
-		String json = mapper.writeValueAsString(dump);
+		String json = RestOpenApiSupport.getJsonFromOpenAPI(openApi, config);
 
 		log.info(json);
 
@@ -163,15 +156,11 @@ public class RestOpenApiReaderModelApiSecurityTest {
 		config.setLicenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html");
 		RestOpenApiReader reader = new RestOpenApiReader();
 
-		OasDocument openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
+		OpenAPI openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
 				new DefaultClassResolver());
 		assertNotNull(openApi);
 
-		ObjectMapper mapper = new ObjectMapper();
-		mapper.enable(SerializationFeature.INDENT_OUTPUT);
-		mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
-		Object dump = Library.writeNode(openApi);
-		String json = mapper.writeValueAsString(dump);
+		String json = Json.pretty(openApi);
 
 		log.info(json);
 
diff --git a/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderModelBookOrderTest.java b/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderModelBookOrderTest.java
index a2d5212132d..2902dd59de9 100644
--- a/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderModelBookOrderTest.java
+++ b/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderModelBookOrderTest.java
@@ -38,12 +38,9 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.test.annotation.DirtiesContext;
 
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
 
-import io.apicurio.datamodels.Library;
-import io.apicurio.datamodels.openapi.models.OasDocument;
+import io.swagger.v3.core.util.Json;
+import io.swagger.v3.oas.models.OpenAPI;
 
 @DirtiesContext
 @CamelSpringBootTest
@@ -115,15 +112,11 @@ public class RestOpenApiReaderModelBookOrderTest {
 		config.setVersion("2.0");
 		RestOpenApiReader reader = new RestOpenApiReader();
 
-		OasDocument openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
+		OpenAPI openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
 				new DefaultClassResolver());
 		assertNotNull(openApi);
 
-		ObjectMapper mapper = new ObjectMapper();
-		mapper.enable(SerializationFeature.INDENT_OUTPUT);
-		mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
-		Object dump = Library.writeNode(openApi);
-		String json = mapper.writeValueAsString(dump);
+		String json = RestOpenApiSupport.getJsonFromOpenAPI(openApi, config);
 
 		log.info(json);
 
@@ -151,15 +144,11 @@ public class RestOpenApiReaderModelBookOrderTest {
 		config.setLicenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html");
 		RestOpenApiReader reader = new RestOpenApiReader();
 
-		OasDocument openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
+		OpenAPI openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
 				new DefaultClassResolver());
 		assertNotNull(openApi);
 
-		ObjectMapper mapper = new ObjectMapper();
-		mapper.enable(SerializationFeature.INDENT_OUTPUT);
-		mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
-		Object dump = Library.writeNode(openApi);
-		String json = mapper.writeValueAsString(dump);
+		String json = Json.pretty(openApi);
 
 		log.info(json);
 
diff --git a/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderModelTest.java b/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderModelTest.java
index cb3803f0ee6..0e493bae6de 100644
--- a/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderModelTest.java
+++ b/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderModelTest.java
@@ -39,12 +39,9 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.test.annotation.DirtiesContext;
 
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
 
-import io.apicurio.datamodels.Library;
-import io.apicurio.datamodels.openapi.models.OasDocument;
+import io.swagger.v3.core.util.Json;
+import io.swagger.v3.oas.models.OpenAPI;
 
 @DirtiesContext
 @CamelSpringBootTest
@@ -113,15 +110,11 @@ public class RestOpenApiReaderModelTest {
 		config.setLicenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html");
 		RestOpenApiReader reader = new RestOpenApiReader();
 
-		OasDocument openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
+		OpenAPI openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
 				new DefaultClassResolver());
 		assertNotNull(openApi);
 
-		ObjectMapper mapper = new ObjectMapper();
-		mapper.enable(SerializationFeature.INDENT_OUTPUT);
-		mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
-		Object dump = Library.writeNode(openApi);
-		String json = mapper.writeValueAsString(dump);
+		String json = RestOpenApiSupport.getJsonFromOpenAPI(openApi, config);
 
 		log.info(json);
 
@@ -147,15 +140,11 @@ public class RestOpenApiReaderModelTest {
 		config.setLicenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html");
 		RestOpenApiReader reader = new RestOpenApiReader();
 
-		OasDocument openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
+		OpenAPI openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
 				new DefaultClassResolver());
 		assertNotNull(openApi);
 
-		ObjectMapper mapper = new ObjectMapper();
-		mapper.enable(SerializationFeature.INDENT_OUTPUT);
-		mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
-		Object dump = Library.writeNode(openApi);
-		String json = mapper.writeValueAsString(dump);
+		String json = Json.pretty(openApi);
 
 		log.info(json);
 
diff --git a/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderOverrideHostApiDocsTest.java b/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderOverrideHostApiDocsTest.java
index 875ae80f824..07ae52b9193 100644
--- a/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderOverrideHostApiDocsTest.java
+++ b/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderOverrideHostApiDocsTest.java
@@ -28,12 +28,9 @@ import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
 
-import io.apicurio.datamodels.Library;
-import io.apicurio.datamodels.openapi.models.OasDocument;
+import io.swagger.v3.core.util.Json;
+import io.swagger.v3.oas.models.OpenAPI;
 
 public class RestOpenApiReaderOverrideHostApiDocsTest extends RestOpenApiReaderApiDocsTest {
 
@@ -50,15 +47,11 @@ public class RestOpenApiReaderOverrideHostApiDocsTest extends RestOpenApiReaderA
 		config.setHost("http:mycoolserver:8888/myapi");
 		RestOpenApiReader reader = new RestOpenApiReader();
 
-		OasDocument openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
+		OpenAPI openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
 				new DefaultClassResolver());
 		assertNotNull(openApi);
 
-		ObjectMapper mapper = new ObjectMapper();
-		mapper.enable(SerializationFeature.INDENT_OUTPUT);
-		mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
-		Object dump = Library.writeNode(openApi);
-		String json = mapper.writeValueAsString(dump);
+		String json = RestOpenApiSupport.getJsonFromOpenAPI(openApi, config);
 
 		log.info(json);
 
@@ -83,15 +76,11 @@ public class RestOpenApiReaderOverrideHostApiDocsTest extends RestOpenApiReaderA
 		config.setHost("http:mycoolserver:8888/myapi");
 		RestOpenApiReader reader = new RestOpenApiReader();
 
-		OasDocument openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
+		OpenAPI openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
 				new DefaultClassResolver());
 		assertNotNull(openApi);
 
-		ObjectMapper mapper = new ObjectMapper();
-		mapper.enable(SerializationFeature.INDENT_OUTPUT);
-		mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
-		Object dump = Library.writeNode(openApi);
-		String json = mapper.writeValueAsString(dump);
+		String json = Json.pretty(openApi);
 
 		log.info(json);
 
diff --git a/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderPropertyPlaceholderTest.java b/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderPropertyPlaceholderTest.java
index 645c0a629d0..4805ff0616e 100644
--- a/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderPropertyPlaceholderTest.java
+++ b/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderPropertyPlaceholderTest.java
@@ -40,14 +40,9 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.test.annotation.DirtiesContext;
 
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
-
 import java.util.List;
 
-import io.apicurio.datamodels.Library;
-import io.apicurio.datamodels.openapi.models.OasDocument;
+import io.swagger.v3.oas.models.OpenAPI;
 
 @DirtiesContext
 @CamelSpringBootTest
@@ -110,15 +105,11 @@ public class RestOpenApiReaderPropertyPlaceholderTest {
 		RestOpenApiSupport support = new RestOpenApiSupport();
 		List<RestDefinition> rests = support.getRestDefinitions(context);
 
-		OasDocument openApi = reader.read(context, rests, config, context.getName(), new DefaultClassResolver());
+		OpenAPI openApi = reader.read(context, rests, config, context.getName(), new DefaultClassResolver());
 		assertNotNull(openApi);
 
-		ObjectMapper mapper = new ObjectMapper();
-		mapper.enable(SerializationFeature.INDENT_OUTPUT);
-		mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
 
-		Object dump = Library.writeNode(openApi);
-		String json = mapper.writeValueAsString(dump);
+		String json = RestOpenApiSupport.getJsonFromOpenAPI(openApi, config);
 
 		log.info(json);
 
diff --git a/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderTest.java b/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderTest.java
index b3d49e9cc2d..ab2bb8d398e 100644
--- a/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderTest.java
+++ b/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiReaderTest.java
@@ -38,14 +38,10 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.test.annotation.DirtiesContext;
 
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
 
-import io.apicurio.datamodels.Library;
-import io.apicurio.datamodels.openapi.models.OasDocument;
-import io.apicurio.datamodels.openapi.v2.models.Oas20Info;
-import io.apicurio.datamodels.openapi.v3.models.Oas30Info;
+import io.swagger.v3.core.util.Json;
+import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.oas.models.info.Info;
 
 @DirtiesContext
 @CamelSpringBootTest
@@ -101,20 +97,16 @@ public class RestOpenApiReaderTest {
 		config.setHost("localhost:8080");
 		config.setSchemes(new String[] {"http"});
 		config.setBasePath("/api");
-		Oas20Info info = new Oas20Info();
+		Info info = new Info();
 		config.setInfo(info);
 		config.setVersion("2.0");
 		RestOpenApiReader reader = new RestOpenApiReader();
 
-		OasDocument openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
+		OpenAPI openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
 				new DefaultClassResolver());
 		assertNotNull(openApi);
 
-		ObjectMapper mapper = new ObjectMapper();
-		mapper.enable(SerializationFeature.INDENT_OUTPUT);
-		mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
-		Object dump = Library.writeNode(openApi);
-		String json = mapper.writeValueAsString(dump);
+		String json = RestOpenApiSupport.getJsonFromOpenAPI(openApi, config);
 
 		log.info(json);
 
@@ -141,21 +133,17 @@ public class RestOpenApiReaderTest {
 		config.setHost("localhost:8080");
 		config.setSchemes(new String[] {"http"});
 		config.setBasePath("/api");
-		Oas30Info info = new Oas30Info();
+		Info info = new Info();
 		config.setInfo(info);
 		RestOpenApiReader reader = new RestOpenApiReader();
 
-		OasDocument openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
+		OpenAPI openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
 				new DefaultClassResolver());
 		assertNotNull(openApi);
 
-		ObjectMapper mapper = new ObjectMapper();
-		mapper.enable(SerializationFeature.INDENT_OUTPUT);
-		mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
-		Object dump = Library.writeNode(openApi);
-		String json = mapper.writeValueAsString(dump);
-
+		String json = Json.pretty(openApi);
 		log.info(json);
+		 json = json.replace("\n", " ").replaceAll("\\s+", " ");
 
 		assertTrue(json.contains("\"url\" : \"http://localhost:8080/api\""));
 		assertTrue(json.contains("\"/hello/bye\""));
@@ -164,10 +152,10 @@ public class RestOpenApiReaderTest {
 		assertTrue(json.contains("\"/hello/hi/{name}\""));
 		assertTrue(json.contains("\"type\" : \"number\""));
 		assertTrue(json.contains("\"format\" : \"float\""));
-		assertTrue(json.contains("\"application/xml\" : \"<hello>Hi</hello>\""));
-		assertTrue(json.contains("\"x-example\" : \"Donald Duck\""));
-		assertTrue(json.contains("\"success\" : \"123\""));
-		assertTrue(json.contains("\"error\" : \"-1\""));
+		assertTrue(json.contains("\"example\" : \"<hello>Hi</hello>\""));
+        assertTrue(json.contains("\"example\" : \"Donald Duck\""));
+        assertTrue(json.contains("\"success\" : { \"value\" : \"123\" }"));
+        assertTrue(json.contains("\"error\" : { \"value\" : \"-1\" }"));
 		assertTrue(json.contains("\"type\" : \"array\""));
 		assertTrue(json.contains("\"format\" : \"date-time\""));
 
diff --git a/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiV2SecuritySchemesTest.java b/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiV2SecuritySchemesTest.java
index ae9afb05d0e..84444882436 100644
--- a/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiV2SecuritySchemesTest.java
+++ b/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiV2SecuritySchemesTest.java
@@ -36,12 +36,7 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.test.annotation.DirtiesContext;
 
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
-
-import io.apicurio.datamodels.Library;
-import io.apicurio.datamodels.openapi.models.OasDocument;
+import io.swagger.v3.oas.models.OpenAPI;
 
 @DirtiesContext
 @CamelSpringBootTest
@@ -105,29 +100,24 @@ public class RestOpenApiV2SecuritySchemesTest {
 		config.setVersion("2.0");
 
 		RestOpenApiReader reader = new RestOpenApiReader();
-		OasDocument openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
+		OpenAPI openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
 				new DefaultClassResolver());
 		assertNotNull(openApi);
 
-		ObjectMapper mapper = new ObjectMapper();
-		mapper.enable(SerializationFeature.INDENT_OUTPUT);
-		mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
-		Object dump = Library.writeNode(openApi);
-		String json = mapper.writeValueAsString(dump);
+		String json = RestOpenApiSupport.getJsonFromOpenAPI(openApi, config);
 
 		log.info(json);
 
 		json = json.replace("\n", " ").replaceAll("\\s+", " ");
-
-		assertTrue(json.contains("\"petstore_auth_implicit\" : { \"flow\" : \"implicit\", \"authorizationUrl\" : " +
-				"\"https://petstore.swagger.io/oauth/dialog\", \"type\" : \"oauth2\" }"));
-		assertTrue(json.contains("\"oauth_password\" : { \"flow\" : \"password\", \"tokenUrl\" : " +
-				"\"https://petstore.swagger.io/oauth/token\", \"type\" : \"oauth2\" }"));
-		assertTrue(json.contains("\"oauth2_accessCode\" : { \"flow\" : \"accessCode\", \"authorizationUrl\" : " +
-				"\"https://petstore.swagger.io/oauth/dialog\", \"tokenUrl\" : " +
-				"\"https://petstore.swagger.io/oauth/token\", \"type\" : \"oauth2\" }"));
+		assertTrue(json.contains("\"petstore_auth_implicit\" : { \"type\" : \"oauth2\", \"authorizationUrl\" : " +
+		        "\"https://petstore.swagger.io/oauth/dialog\", \"flow\" : \"implicit\" }"));
+		assertTrue(json.contains("\"oauth_password\" : { \"type\" : \"oauth2\", \"tokenUrl\" : " +
+		        "\"https://petstore.swagger.io/oauth/token\", \"flow\" : \"password\" }"));
+		assertTrue(json.contains("\"oauth2_accessCode\" : { \"type\" : \"oauth2\", \"authorizationUrl\" : " +
+		        "\"https://petstore.swagger.io/oauth/dialog\", \"tokenUrl\" : " +
+		        "\"https://petstore.swagger.io/oauth/token\", \"flow\" : \"accessCode\" }"));
 		assertTrue(
-				json.contains("\"api_key_header\" : { \"type\" : \"apiKey\", \"name\" : \"myHeader\", \"in\" : \"header\" }"));
+		        json.contains("\"api_key_header\" : { \"type\" : \"apiKey\", \"name\" : \"myHeader\", \"in\" : \"header\" }"));
 		assertTrue(json.contains("\"api_key_query\" : { \"type\" : \"apiKey\", \"name\" : \"myQuery\", \"in\" : \"query\" }"));
 	}
 }
diff --git a/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiV3SecuritySchemesTest.java b/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiV3SecuritySchemesTest.java
index 50d87f6a872..00c841ba523 100644
--- a/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiV3SecuritySchemesTest.java
+++ b/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/RestOpenApiV3SecuritySchemesTest.java
@@ -37,12 +37,9 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.test.annotation.DirtiesContext;
 
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
 
-import io.apicurio.datamodels.Library;
-import io.apicurio.datamodels.openapi.models.OasDocument;
+import io.swagger.v3.core.util.Json;
+import io.swagger.v3.oas.models.OpenAPI;
 
 @DirtiesContext
 @CamelSpringBootTest
@@ -111,36 +108,35 @@ public class RestOpenApiV3SecuritySchemesTest {
 		config.setLicenseUrl("https://www.apache.org/licenses/LICENSE-2.0.html");
 
 		RestOpenApiReader reader = new RestOpenApiReader();
-		OasDocument openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
+		OpenAPI openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
 				new DefaultClassResolver());
 		assertNotNull(openApi);
 
-		ObjectMapper mapper = new ObjectMapper();
-		mapper.enable(SerializationFeature.INDENT_OUTPUT);
-		mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
-		Object dump = Library.writeNode(openApi);
-		String json = mapper.writeValueAsString(dump);
+		String json = Json.pretty(openApi);
 
 		log.info(json);
 
 		json = json.replace("\n", " ").replaceAll("\\s+", " ");
 
-		assertTrue(json.contains("\"petstore_auth_implicit\" : { \"flows\" : { \"implicit\" : { \"authorizationUrl\" : " +
-				"\"https://petstore.swagger.io/oauth/dialog\", \"refreshUrl\" : " +
-				"\"https://petstore.swagger.io/oauth/refresh\" } }, \"type\" : \"oauth2\" }"));
-		assertTrue(json.contains("\"oauth_password\" : { \"flows\" : { \"password\" : { \"tokenUrl\" : " +
-				"\"https://petstore.swagger.io/oauth/token\" } }, \"type\" : \"oauth2\" }"));
-		assertTrue(json.contains("\"oauth2_accessCode\" : { \"flows\" : { \"authorizationCode\" : { \"authorizationUrl\" : " +
-				"\"https://petstore.swagger.io/oauth/dialog\", \"tokenUrl\" : " +
-				"\"https://petstore.swagger.io/oauth/token\" } }, \"type\" : \"oauth2\" }"));
+		assertTrue(json.contains(
+		        "\"petstore_auth_implicit\" : { \"type\" : \"oauth2\", \"flows\" : { \"implicit\" : { \"authorizationUrl\" : " +
+		                "\"https://petstore.swagger.io/oauth/dialog\", \"refreshUrl\" : " +
+		        "\"https://petstore.swagger.io/oauth/refresh\" } } }"));
 		assertTrue(
-				json.contains("\"api_key_header\" : { \"type\" : \"apiKey\", \"name\" : \"myHeader\", \"in\" : \"header\" }"));
+		        json.contains("\"oauth_password\" : { \"type\" : \"oauth2\", \"flows\" : { \"password\" : { \"tokenUrl\" : " +
+		                "\"https://petstore.swagger.io/oauth/token\" } } }"));
+		assertTrue(json.contains(
+		        "\"oauth2_accessCode\" : { \"type\" : \"oauth2\", \"flows\" : { \"authorizationCode\" : { \"authorizationUrl\" : "
+		                + "\"https://petstore.swagger.io/oauth/dialog\", \"tokenUrl\" : " +
+		        "\"https://petstore.swagger.io/oauth/token\" } } }"));
+		assertTrue(
+		        json.contains("\"api_key_header\" : { \"type\" : \"apiKey\", \"name\" : \"myHeader\", \"in\" : \"header\" }"));
 		assertTrue(json.contains("\"api_key_query\" : { \"type\" : \"apiKey\", \"name\" : \"myQuery\", \"in\" : \"query\" }"));
 		assertTrue(json.contains("\"api_key_cookie\" : { \"type\" : \"apiKey\", \"description\" : \"API Key using cookie\", " +
-				"\"name\" : \"myCookie\", \"in\" : \"cookie\" }"));
+		        "\"name\" : \"myCookie\", \"in\" : \"cookie\" }"));
 		assertTrue(
-				json.contains("\"openIdConnect_auth\" : { \"openIdConnectUrl\" : " +
-						"\"https://petstore.swagger.io/openidconnect\", \"type\" : \"openIdConnect\" }"));
+		        json.contains("\"openIdConnect_auth\" : { \"type\" : \"openIdConnect\", \"openIdConnectUrl\" : " +
+		                "\"https://petstore.swagger.io/openidconnect\" }"));
 		assertTrue(json.contains("\"mutualTLS_auth\" : { \"type\" : \"mutualTLS\" }"));
 	}
 
diff --git a/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/SpringRestOpenApiReaderModelApiSecurityTest.java b/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/SpringRestOpenApiReaderModelApiSecurityTest.java
index d077215dd00..35356e16e0d 100644
--- a/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/SpringRestOpenApiReaderModelApiSecurityTest.java
+++ b/components-starter/camel-openapi-java-starter/src/test/java/org/apache/camel/openapi/SpringRestOpenApiReaderModelApiSecurityTest.java
@@ -34,12 +34,9 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.annotation.DirtiesContext;
 
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
 
-import io.apicurio.datamodels.Library;
-import io.apicurio.datamodels.openapi.models.OasDocument;
+import io.swagger.v3.core.util.Json;
+import io.swagger.v3.oas.models.OpenAPI;
 
 @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
 @CamelSpringBootTest
@@ -71,15 +68,11 @@ public class SpringRestOpenApiReaderModelApiSecurityTest {
 		config.setVersion("2.0");
 		RestOpenApiReader reader = new RestOpenApiReader();
 
-		OasDocument openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
+		OpenAPI openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
 				new DefaultClassResolver());
 		assertNotNull(openApi);
 
-		ObjectMapper mapper = new ObjectMapper();
-		mapper.enable(SerializationFeature.INDENT_OUTPUT);
-		mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
-		Object dump = Library.writeNode(openApi);
-		String json = mapper.writeValueAsString(dump);
+		String json = RestOpenApiSupport.getJsonFromOpenAPI(openApi, config);
 
 		log.info(json);
 
@@ -115,15 +108,11 @@ public class SpringRestOpenApiReaderModelApiSecurityTest {
 		config.setLicenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html");
 		RestOpenApiReader reader = new RestOpenApiReader();
 
-		OasDocument openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
+		OpenAPI openApi = reader.read(context, ((ModelCamelContext) context).getRestDefinitions(), config, context.getName(),
 				new DefaultClassResolver());
 		assertNotNull(openApi);
 
-		ObjectMapper mapper = new ObjectMapper();
-		mapper.enable(SerializationFeature.INDENT_OUTPUT);
-		mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
-		Object dump = Library.writeNode(openApi);
-		String json = mapper.writeValueAsString(dump);
+		String json = Json.pretty(openApi);
 
 		log.info(json);
 
diff --git a/components-starter/camel-openapi-java-starter/src/test/resources/log4j2.properties b/components-starter/camel-openapi-java-starter/src/test/resources/application.properties
similarity index 68%
rename from components-starter/camel-openapi-java-starter/src/test/resources/log4j2.properties
rename to components-starter/camel-openapi-java-starter/src/test/resources/application.properties
index 7ea1cb5a52e..2f91fc32820 100644
--- a/components-starter/camel-openapi-java-starter/src/test/resources/log4j2.properties
+++ b/components-starter/camel-openapi-java-starter/src/test/resources/application.properties
@@ -14,15 +14,4 @@
 ## See the License for the specific language governing permissions and
 ## limitations under the License.
 ## ---------------------------------------------------------------------------
-
-appender.file.type = File
-appender.file.name = file
-appender.file.fileName = target/camel-openapi-java-test.log
-appender.file.layout.type = PatternLayout
-appender.file.layout.pattern = %d [%-15.15t] %-5p %-30.30c{1} - %m%n
-appender.out.type = Console
-appender.out.name = out
-appender.out.layout.type = PatternLayout
-appender.out.layout.pattern = %d [%-15.15t] %-5p %-30.30c{1} - %m%n
-rootLogger.level = INFO
-rootLogger.appenderRef.file.ref = file
+spring.main.banner-mode=off
diff --git a/components-starter/camel-openapi-java-starter/src/test/resources/logback.xml b/components-starter/camel-openapi-java-starter/src/test/resources/logback.xml
new file mode 100644
index 00000000000..42439b4d591
--- /dev/null
+++ b/components-starter/camel-openapi-java-starter/src/test/resources/logback.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+-->
+<configuration>
+
+  <appender name="FILE" class="ch.qos.logback.core.FileAppender">
+    <encoder>
+      <pattern>%d{HH:mm:ss.SSS} [%-15.15thread] %-5level %-30.30logger - %msg%n</pattern>
+    </encoder>
+    <file>target/camel-openapi-java-starter-test.log</file>
+  </appender>
+
+  <root level="INFO">
+    <appender-ref ref="FILE"/>
+  </root>
+
+</configuration>
diff --git a/components-starter/camel-openapi-java-starter/src/test/resources/org/apache/camel/openapi/V2SchemaForComplexTypesRequest.json b/components-starter/camel-openapi-java-starter/src/test/resources/org/apache/camel/openapi/V2SchemaForComplexTypesRequest.json
index 99276fa67d1..54bcc6a854b 100644
--- a/components-starter/camel-openapi-java-starter/src/test/resources/org/apache/camel/openapi/V2SchemaForComplexTypesRequest.json
+++ b/components-starter/camel-openapi-java-starter/src/test/resources/org/apache/camel/openapi/V2SchemaForComplexTypesRequest.json
@@ -6,15 +6,17 @@
   "paths" : {
     "/complexRequest" : {
       "post" : {
+        "summary" : "Demo complex request type",
+        "operationId" : "verb",
         "consumes" : [ "application/json" ],
         "produces" : [ "text/plain" ],
         "parameters" : [ {
+          "in" : "body",
           "name" : "body",
+          "required" : true,
           "schema" : {
             "$ref" : "#/definitions/SampleComplexRequestType"
-          },
-          "in" : "body",
-          "required" : true
+          }
         } ],
         "responses" : {
           "200" : {
@@ -24,13 +26,35 @@
             }
           }
         },
-        "operationId" : "verb",
-        "summary" : "Demo complex request type",
         "x-camelContextId" : "camel"
       }
     }
   },
+  "securityDefinitions" : {
+    "global" : {
+      "type" : "oauth2",
+      "authorizationUrl" : "https://AUTHORIZATION_URL",
+      "tokenUrl" : "https://TOKEN_URL",
+      "flow" : "accessCode",
+      "scopes" : {
+        "groups" : "Required scopes for Camel REST APIs"
+      }
+    }
+  },
   "definitions" : {
+    "SampleComplexResponseType_InnerClass" : {
+      "type" : "object",
+      "properties" : {
+        "doubleField" : {
+          "type" : "number",
+          "format" : "double"
+        }
+      },
+      "x-className" : {
+        "format" : "org.apache.camel.openapi.model.SampleComplexResponseType$InnerClass",
+        "type" : "string"
+      }
+    },
     "CustomData" : {
       "type" : "object",
       "properties" : {
@@ -44,33 +68,36 @@
       }
     },
     "SampleComplexRequestType" : {
-      "required" : [ "mapOfStrings", "requestField1" ],
       "type" : "object",
+      "required" : [ "mapOfStrings", "requestField1" ],
       "properties" : {
-        "data" : {
-          "$ref" : "#/definitions/CustomData"
+        "requestField1" : {
+          "type" : "string"
         },
-        "listOfData" : {
-          "type" : "array",
-          "items" : {
-            "$ref" : "#/definitions/CustomData"
-          }
+        "requestField2" : {
+          "type" : "string"
         },
-        "listOfListOfData" : {
+        "listOfStrings" : {
           "type" : "array",
           "items" : {
-            "type" : "array",
-            "items" : {
-              "$ref" : "#/definitions/CustomData"
-            }
+            "type" : "string"
           }
         },
+        "data" : {
+          "$ref" : "#/definitions/CustomData"
+        },
         "mapOfData" : {
           "type" : "object",
           "additionalProperties" : {
             "$ref" : "#/definitions/CustomData"
           }
         },
+        "arrayOfString" : {
+          "type" : "array",
+          "items" : {
+            "type" : "string"
+          }
+        },
         "mapOfMapOfData" : {
           "type" : "object",
           "additionalProperties" : {
@@ -80,22 +107,22 @@
             }
           }
         },
-        "requestField1" : {
-          "type" : "string"
-        },
-        "requestField2" : {
-          "type" : "string"
+        "innerClass" : {
+          "$ref" : "#/definitions/SampleComplexRequestType_InnerClass"
         },
-        "listOfStrings" : {
+        "listOfListOfData" : {
           "type" : "array",
           "items" : {
-            "type" : "string"
+            "type" : "array",
+            "items" : {
+              "$ref" : "#/definitions/CustomData"
+            }
           }
         },
-        "arrayOfString" : {
+        "listOfData" : {
           "type" : "array",
           "items" : {
-            "type" : "string"
+            "$ref" : "#/definitions/CustomData"
           }
         },
         "mapOfStrings" : {
@@ -105,11 +132,8 @@
           }
         },
         "timeUnit" : {
-          "enum" : [ "NANOSECONDS", "MICROSECONDS", "MILLISECONDS", "SECONDS", "MINUTES", "HOURS", "DAYS" ],
-          "type" : "string"
-        },
-        "innerClass" : {
-          "$ref" : "#/definitions/SampleComplexRequestType_InnerClass"
+          "type" : "string",
+          "enum" : [ "NANOSECONDS", "MICROSECONDS", "MILLISECONDS", "SECONDS", "MINUTES", "HOURS", "DAYS" ]
         }
       },
       "x-className" : {
@@ -121,38 +145,14 @@
       "type" : "object",
       "properties" : {
         "longField" : {
-          "format" : "int64",
-          "type" : "integer"
+          "type" : "integer",
+          "format" : "int64"
         }
       },
       "x-className" : {
         "format" : "org.apache.camel.openapi.model.SampleComplexRequestType$InnerClass",
         "type" : "string"
       }
-    },
-    "SampleComplexResponseType_InnerClass" : {
-      "type" : "object",
-      "properties" : {
-        "doubleField" : {
-          "format" : "double",
-          "type" : "number"
-        }
-      },
-      "x-className" : {
-        "format" : "org.apache.camel.openapi.model.SampleComplexResponseType$InnerClass",
-        "type" : "string"
-      }
-    }
-  },
-  "securityDefinitions" : {
-    "global" : {
-      "flow" : "accessCode",
-      "authorizationUrl" : "https://AUTHORIZATION_URL",
-      "tokenUrl" : "https://TOKEN_URL",
-      "scopes" : {
-        "groups" : "Required scopes for Camel REST APIs"
-      },
-      "type" : "oauth2"
     }
   }
-}
\ No newline at end of file
+}
diff --git a/components-starter/camel-openapi-java-starter/src/test/resources/org/apache/camel/openapi/V2SchemaForComplexTypesResponse.json b/components-starter/camel-openapi-java-starter/src/test/resources/org/apache/camel/openapi/V2SchemaForComplexTypesResponse.json
index 4193eab11b5..c5fc9b0ede1 100644
--- a/components-starter/camel-openapi-java-starter/src/test/resources/org/apache/camel/openapi/V2SchemaForComplexTypesResponse.json
+++ b/components-starter/camel-openapi-java-starter/src/test/resources/org/apache/camel/openapi/V2SchemaForComplexTypesResponse.json
@@ -6,15 +6,17 @@
   "paths" : {
     "/complexResponse" : {
       "get" : {
+        "summary" : "Demo complex response type",
+        "operationId" : "verb",
         "consumes" : [ "application/json" ],
         "produces" : [ "application/json" ],
         "parameters" : [ {
+          "in" : "body",
           "name" : "body",
+          "required" : true,
           "schema" : {
             "$ref" : "#/definitions/SampleComplexRequestType_InnerClass"
-          },
-          "in" : "body",
-          "required" : true
+          }
         } ],
         "responses" : {
           "200" : {
@@ -24,35 +26,41 @@
             }
           }
         },
-        "operationId" : "verb",
-        "summary" : "Demo complex response type",
         "x-camelContextId" : "camel"
       }
     }
   },
+  "securityDefinitions" : {
+    "global" : {
+      "type" : "oauth2",
+      "authorizationUrl" : "https://AUTHORIZATION_URL",
+      "tokenUrl" : "https://TOKEN_URL",
+      "flow" : "accessCode",
+      "scopes" : {
+        "groups" : "Required scopes for Camel REST APIs"
+      }
+    }
+  },
   "definitions" : {
-    "SampleComplexRequestType_InnerClass" : {
+    "SampleComplexResponseType_InnerClass" : {
       "type" : "object",
       "properties" : {
-        "longField" : {
-          "format" : "int64",
-          "type" : "integer"
+        "doubleField" : {
+          "type" : "number",
+          "format" : "double"
         }
       },
       "x-className" : {
-        "format" : "org.apache.camel.openapi.model.SampleComplexRequestType$InnerClass",
+        "format" : "org.apache.camel.openapi.model.SampleComplexResponseType$InnerClass",
         "type" : "string"
       }
     },
     "SampleComplexResponseType" : {
-      "required" : [ "arrayOfStrings", "responseField1" ],
       "type" : "object",
+      "required" : [ "arrayOfStrings", "responseField1" ],
       "properties" : {
-        "responseField1" : {
-          "type" : "string"
-        },
-        "responseField2" : {
-          "type" : "string"
+        "innerClass" : {
+          "$ref" : "#/definitions/SampleComplexResponseType_InnerClass"
         },
         "arrayOfStrings" : {
           "type" : "array",
@@ -61,11 +69,14 @@
           }
         },
         "month" : {
-          "enum" : [ "JANUARY", "FEBRUARY", "MARCH", "APRIL", "MAY", "JUNE", "JULY", "AUGUST", "SEPTEMBER", "OCTOBER", "NOVEMBER", "DECEMBER" ],
+          "type" : "string",
+          "enum" : [ "JANUARY", "FEBRUARY", "MARCH", "APRIL", "MAY", "JUNE", "JULY", "AUGUST", "SEPTEMBER", "OCTOBER", "NOVEMBER", "DECEMBER" ]
+        },
+        "responseField2" : {
           "type" : "string"
         },
-        "innerClass" : {
-          "$ref" : "#/definitions/SampleComplexResponseType_InnerClass"
+        "responseField1" : {
+          "type" : "string"
         }
       },
       "x-className" : {
@@ -73,29 +84,18 @@
         "type" : "string"
       }
     },
-    "SampleComplexResponseType_InnerClass" : {
+    "SampleComplexRequestType_InnerClass" : {
       "type" : "object",
       "properties" : {
-        "doubleField" : {
-          "format" : "double",
-          "type" : "number"
+        "longField" : {
+          "type" : "integer",
+          "format" : "int64"
         }
       },
       "x-className" : {
-        "format" : "org.apache.camel.openapi.model.SampleComplexResponseType$InnerClass",
+        "format" : "org.apache.camel.openapi.model.SampleComplexRequestType$InnerClass",
         "type" : "string"
       }
     }
-  },
-  "securityDefinitions" : {
-    "global" : {
-      "flow" : "accessCode",
-      "authorizationUrl" : "https://AUTHORIZATION_URL",
-      "tokenUrl" : "https://TOKEN_URL",
-      "scopes" : {
-        "groups" : "Required scopes for Camel REST APIs"
-      },
-      "type" : "oauth2"
-    }
   }
 }
\ No newline at end of file
diff --git a/components-starter/camel-openapi-java-starter/src/test/resources/org/apache/camel/openapi/V3SchemaForComplexTypesRequest.json b/components-starter/camel-openapi-java-starter/src/test/resources/org/apache/camel/openapi/V3SchemaForComplexTypesRequest.json
index 7abf17480b3..870499eab05 100644
--- a/components-starter/camel-openapi-java-starter/src/test/resources/org/apache/camel/openapi/V3SchemaForComplexTypesRequest.json
+++ b/components-starter/camel-openapi-java-starter/src/test/resources/org/apache/camel/openapi/V3SchemaForComplexTypesRequest.json
@@ -6,6 +6,8 @@
   "paths" : {
     "/complexRequest" : {
       "post" : {
+        "summary" : "Demo complex request type",
+        "operationId" : "verb",
         "requestBody" : {
           "description" : "",
           "content" : {
@@ -19,24 +21,35 @@
         },
         "responses" : {
           "200" : {
+            "description" : "Receives a complex object as parameter",
             "content" : {
               "text/plain" : {
                 "schema" : {
                   "$ref" : "#/components/schemas/SampleComplexResponseType_InnerClass"
                 }
               }
-            },
-            "description" : "Receives a complex object as parameter"
+            }
           }
         },
-        "operationId" : "verb",
-        "summary" : "Demo complex request type",
         "x-camelContextId" : "camel"
       }
     }
   },
   "components" : {
     "schemas" : {
+      "SampleComplexResponseType_InnerClass" : {
+        "type" : "object",
+        "properties" : {
+          "doubleField" : {
+            "type" : "number",
+            "format" : "double"
+          }
+        },
+        "x-className" : {
+          "format" : "org.apache.camel.openapi.model.SampleComplexResponseType$InnerClass",
+          "type" : "string"
+        }
+      },
       "CustomData" : {
         "type" : "object",
         "properties" : {
@@ -111,8 +124,8 @@
             }
           },
           "timeUnit" : {
-            "enum" : [ "NANOSECONDS", "MICROSECONDS", "MILLISECONDS", "SECONDS", "MINUTES", "HOURS", "DAYS" ],
-            "type" : "string"
+            "type" : "string",
+            "enum" : [ "NANOSECONDS", "MICROSECONDS", "MILLISECONDS", "SECONDS", "MINUTES", "HOURS", "DAYS" ]
           },
           "innerClass" : {
             "$ref" : "#/components/schemas/SampleComplexRequestType_InnerClass"
@@ -127,31 +140,19 @@
         "type" : "object",
         "properties" : {
           "longField" : {
-            "format" : "int64",
-            "type" : "integer"
+            "type" : "integer",
+            "format" : "int64"
           }
         },
         "x-className" : {
           "format" : "org.apache.camel.openapi.model.SampleComplexRequestType$InnerClass",
           "type" : "string"
         }
-      },
-      "SampleComplexResponseType_InnerClass" : {
-        "type" : "object",
-        "properties" : {
-          "doubleField" : {
-            "format" : "double",
-            "type" : "number"
-          }
-        },
-        "x-className" : {
-          "format" : "org.apache.camel.openapi.model.SampleComplexResponseType$InnerClass",
-          "type" : "string"
-        }
       }
     },
     "securitySchemes" : {
       "global" : {
+        "type" : "oauth2",
         "flows" : {
           "authorizationCode" : {
             "authorizationUrl" : "https://AUTHORIZATION_URL",
@@ -160,8 +161,7 @@
               "groups" : "Required scopes for Camel REST APIs"
             }
           }
-        },
-        "type" : "oauth2"
+        }
       }
     }
   }
diff --git a/components-starter/camel-openapi-java-starter/src/test/resources/org/apache/camel/openapi/V3SchemaForComplexTypesResponse.json b/components-starter/camel-openapi-java-starter/src/test/resources/org/apache/camel/openapi/V3SchemaForComplexTypesResponse.json
index 88c81ebd9c0..66a4e86264e 100644
--- a/components-starter/camel-openapi-java-starter/src/test/resources/org/apache/camel/openapi/V3SchemaForComplexTypesResponse.json
+++ b/components-starter/camel-openapi-java-starter/src/test/resources/org/apache/camel/openapi/V3SchemaForComplexTypesResponse.json
@@ -6,6 +6,8 @@
   "paths" : {
     "/complexResponse" : {
       "get" : {
+        "summary" : "Demo complex response type",
+        "operationId" : "verb",
         "requestBody" : {
           "description" : "",
           "content" : {
@@ -19,34 +21,32 @@
         },
         "responses" : {
           "200" : {
+            "description" : "Returns a complex object",
             "content" : {
               "application/json" : {
                 "schema" : {
                   "$ref" : "#/components/schemas/SampleComplexResponseType"
                 }
               }
-            },
-            "description" : "Returns a complex object"
+            }
           }
         },
-        "operationId" : "verb",
-        "summary" : "Demo complex response type",
         "x-camelContextId" : "camel"
       }
     }
   },
   "components" : {
     "schemas" : {
-      "SampleComplexRequestType_InnerClass" : {
+      "SampleComplexResponseType_InnerClass" : {
         "type" : "object",
         "properties" : {
-          "longField" : {
-            "format" : "int64",
-            "type" : "integer"
+          "doubleField" : {
+            "type" : "number",
+            "format" : "double"
           }
         },
         "x-className" : {
-          "format" : "org.apache.camel.openapi.model.SampleComplexRequestType$InnerClass",
+          "format" : "org.apache.camel.openapi.model.SampleComplexResponseType$InnerClass",
           "type" : "string"
         }
       },
@@ -67,8 +67,8 @@
             }
           },
           "month" : {
-            "enum" : [ "JANUARY", "FEBRUARY", "MARCH", "APRIL", "MAY", "JUNE", "JULY", "AUGUST", "SEPTEMBER", "OCTOBER", "NOVEMBER", "DECEMBER" ],
-            "type" : "string"
+            "type" : "string",
+            "enum" : [ "JANUARY", "FEBRUARY", "MARCH", "APRIL", "MAY", "JUNE", "JULY", "AUGUST", "SEPTEMBER", "OCTOBER", "NOVEMBER", "DECEMBER" ]
           },
           "innerClass" : {
             "$ref" : "#/components/schemas/SampleComplexResponseType_InnerClass"
@@ -79,22 +79,23 @@
           "type" : "string"
         }
       },
-      "SampleComplexResponseType_InnerClass" : {
+      "SampleComplexRequestType_InnerClass" : {
         "type" : "object",
         "properties" : {
-          "doubleField" : {
-            "format" : "double",
-            "type" : "number"
+          "longField" : {
+            "type" : "integer",
+            "format" : "int64"
           }
         },
         "x-className" : {
-          "format" : "org.apache.camel.openapi.model.SampleComplexResponseType$InnerClass",
+          "format" : "org.apache.camel.openapi.model.SampleComplexRequestType$InnerClass",
           "type" : "string"
         }
       }
     },
     "securitySchemes" : {
       "global" : {
+        "type" : "oauth2",
         "flows" : {
           "authorizationCode" : {
             "authorizationUrl" : "https://AUTHORIZATION_URL",
@@ -103,8 +104,7 @@
               "groups" : "Required scopes for Camel REST APIs"
             }
           }
-        },
-        "type" : "oauth2"
+        }
       }
     }
   }
diff --git a/components-starter/camel-springdoc-starter/src/main/java/org/apache/camel/springboot/springdoc/SpringdocAutoConfiguration.java b/components-starter/camel-springdoc-starter/src/main/java/org/apache/camel/springboot/springdoc/SpringdocAutoConfiguration.java
index d1e94be207d..337f8b96a7c 100644
--- a/components-starter/camel-springdoc-starter/src/main/java/org/apache/camel/springboot/springdoc/SpringdocAutoConfiguration.java
+++ b/components-starter/camel-springdoc-starter/src/main/java/org/apache/camel/springboot/springdoc/SpringdocAutoConfiguration.java
@@ -16,20 +16,11 @@
  */
 package org.apache.camel.springboot.springdoc;
 
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.core.JsonFactory;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
-import com.fasterxml.jackson.dataformat.yaml.YAMLMapper;
-import io.apicurio.datamodels.openapi.models.OasDocument;
-import io.apicurio.datamodels.openapi.v3.models.Oas30Document;
-import io.apicurio.datamodels.core.models.common.Server;
 import io.swagger.v3.oas.models.OpenAPI;
 import io.swagger.v3.oas.models.info.Contact;
 import io.swagger.v3.oas.models.info.Info;
-import io.swagger.v3.parser.OpenAPIV3Parser;
-import io.swagger.v3.parser.core.models.SwaggerParseResult;
+import io.swagger.v3.oas.models.servers.Server;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.model.rest.RestDefinition;
 import org.apache.camel.openapi.BeanConfig;
@@ -135,35 +126,22 @@ public class SpringdocAutoConfiguration {
         initOpenApi(bc, info, apiProps, 
                 getBasePath(springContextPath, apiProps.get("base.path"), rc.getContextPath()));
 
-        final OasDocument openApi = reader.read(camelContext, rests, bc, null, camelContext.getClassResolver());
+        final OpenAPI openApi = reader.read(camelContext, rests, bc, null, camelContext.getClassResolver());
         if (!rc.isApiVendorExtension()) {
             clearVendorExtensions(openApi);
         }
         // Set relative path in URL if basepath is set
-        if (bc.getBasePath()!=null && !bc.getBasePath().isEmpty() && openApi.is3xDocument()) {
-            for (Server server : ((Oas30Document)openApi).getServers()) {
-                if (server.url.endsWith(bc.getBasePath())) {
+        if (bc.getBasePath()!=null && !bc.getBasePath().isEmpty() 
+               /* && openApi.getSpecVersion().equals(SpecVersion)*/) {
+            for (Server server : openApi.getServers()) {
+                if (server.getUrl().endsWith(bc.getBasePath())) {
                     LOG.info("Setting Server URL in ApiDoc to base path: {}", bc.getBasePath());
-                    server.url = bc.getBasePath();
+                    server.setUrl(bc.getBasePath());
                 }
             }
         }
 
-        // dump to json
-        final ObjectMapper mapper = new ObjectMapper(new JsonFactory());
-        mapper.enable(SerializationFeature.INDENT_OUTPUT);
-        mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
-        final Object dump = io.apicurio.datamodels.Library.writeNode(openApi);
-        final byte[] jsonData = mapper.writeValueAsBytes(dump);
-        // json to yaml
-        final JsonNode node = mapper.readTree(jsonData);
-        final String yaml = new YAMLMapper().writeValueAsString(node);
-
-        // parse bytes into swagger
-        return Optional.ofNullable(new OpenAPIV3Parser().readContents(yaml))
-                .map(SwaggerParseResult::getOpenAPI)
-                .map(a -> a.info(info))
-                .orElse(null);
+        return openApi;
     }
 
     /**