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.git


The following commit(s) were added to refs/heads/main by this push:
     new c13169b4495 Camel-20547: openapi-rest-dsl-generator migrate from 
apicurio to openapi3  (#14677)
c13169b4495 is described below

commit c13169b44957dd1d8682850910808ec3960bcc98
Author: Jono Morris <[email protected]>
AuthorDate: Sat Jun 29 17:46:15 2024 +1200

    Camel-20547: openapi-rest-dsl-generator migrate from apicurio to openapi3  
(#14677)
    
    * CAMEL-20547 migrate from apicurio to openapi3
    
    * CAMEL-20547 update test cases to use openapi3
---
 .../core/commands/generate/CodeRestGenerator.java  |  40 +--
 .../reload/OpenApiGeneratorReloadStrategy.java     |  18 +-
 .../generator/openapi/AbstractGenerateMojo.java    |  60 ----
 .../maven/generator/openapi/GenerateMojo.java      |  10 +-
 .../maven/generator/openapi/GenerateXmlMojo.java   |  10 +-
 .../maven/generator/openapi/GenerateYamlMojo.java  |  10 +-
 tooling/openapi-rest-dsl-generator/pom.xml         |  20 +-
 .../generator/openapi/AppendableGenerator.java     |   4 +-
 .../openapi/DefaultDestinationGenerator.java       |   4 +-
 .../generator/openapi/DestinationGenerator.java    |   4 +-
 .../camel/generator/openapi/FilerGenerator.java    |   4 +-
 .../camel/generator/openapi/OperationVisitor.java  | 373 +++++----------------
 .../camel/generator/openapi/PathGenerator.java     |   4 +-
 .../camel/generator/openapi/PathVisitor.java       |  48 +--
 .../openapi/RestDslDefinitionGenerator.java        |  10 +-
 .../camel/generator/openapi/RestDslGenerator.java  |  96 ++----
 .../openapi/RestDslSourceCodeGenerator.java        |  22 +-
 .../generator/openapi/RestDslXmlGenerator.java     |  10 +-
 .../generator/openapi/RestDslYamlGenerator.java    |  10 +-
 .../generator/openapi/OperationVisitorTest.java    | 209 ++++++++----
 .../generator/openapi/RestDslGeneratorV3Test.java  |  13 +-
 .../openapi/RestDslSourceCodeGeneratorTest.java    |  49 +--
 .../openapi/RestDslSourceCodeGeneratorV3Test.java  |  51 ++-
 .../openapi/RestDslXmlGeneratorV3SimpleTest.java   |  14 +-
 .../openapi/RestDslXmlGeneratorV3Test.java         |  13 +-
 .../openapi/RestDslYamlGeneratorV302Test.java      |  16 +-
 .../openapi/RestDslYamlGeneratorV31Test.java       |  13 +-
 .../openapi/RestDslYamlGeneratorV3SimpleTest.java  |  13 +-
 ...GeneratorV3SimpleWithRoutesDescriptionTest.java |  16 +-
 ...RestDslYamlGeneratorV3SimpleWithRoutesTest.java |  14 +-
 .../openapi/RestDslYamlGeneratorV3Test.java        |  13 +-
 .../openapi/RestDslYamlGreetingsTest.java          |  13 +-
 .../src/test/resources/GreetingsYaml.txt           |   3 +
 .../src/test/resources/MyRestRouteV3.txt           |   3 +
 .../src/test/resources/OpenApiV302PetstoreYaml.txt |  19 +-
 .../src/test/resources/OpenApiV3Petstore.txt       |   3 +
 .../resources/OpenApiV3PetstoreWithModelYaml.txt   |   9 +-
 .../OpenApiV3PetstoreWithRestComponent.txt         |   3 +
 .../OpenApiV3PetstoreWithRestComponentXml.txt      |   6 +-
 .../OpenApiV3PetstoreWithRestComponentYaml.txt     |   9 +-
 .../src/test/resources/OpenApiV3PetstoreXml.txt    |   6 +-
 .../src/test/resources/OpenApiV3PetstoreYaml.txt   |   9 +-
 .../camel/generator/openapi/greetings-spec.json    |  84 -----
 .../camel/generator/openapi/greetings-spec.yaml    |  87 +++++
 .../generator/openapi/openapi-v3-ref-param.yaml    |  48 +++
 .../generator/openapi/openapi-v3-ref-schema.yaml   |  63 ++++
 46 files changed, 651 insertions(+), 905 deletions(-)

diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-generate/src/main/java/org/apache/camel/dsl/jbang/core/commands/generate/CodeRestGenerator.java
 
b/dsl/camel-jbang/camel-jbang-plugin-generate/src/main/java/org/apache/camel/dsl/jbang/core/commands/generate/CodeRestGenerator.java
index 27317f0556c..b6e7fe90416 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-generate/src/main/java/org/apache/camel/dsl/jbang/core/commands/generate/CodeRestGenerator.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-generate/src/main/java/org/apache/camel/dsl/jbang/core/commands/generate/CodeRestGenerator.java
@@ -17,19 +17,13 @@
 package org.apache.camel.dsl.jbang.core.commands.generate;
 
 import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.util.Map;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import io.apicurio.datamodels.Library;
-import io.apicurio.datamodels.models.Document;
-import io.apicurio.datamodels.models.ModelType;
-import io.apicurio.datamodels.models.openapi.OpenApiDocument;
+import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.parser.OpenAPIV3Parser;
 import org.apache.camel.CamelContext;
 import org.apache.camel.dsl.jbang.core.commands.CamelCommand;
 import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
@@ -40,9 +34,6 @@ import org.apache.logging.log4j.core.config.Configurator;
 import org.openapitools.codegen.ClientOptInput;
 import org.openapitools.codegen.DefaultGenerator;
 import org.openapitools.codegen.config.CodegenConfigurator;
-import org.yaml.snakeyaml.LoaderOptions;
-import org.yaml.snakeyaml.Yaml;
-import org.yaml.snakeyaml.constructor.SafeConstructor;
 import picocli.CommandLine;
 
 import static org.openapitools.codegen.CodegenConstants.GENERATE_MODELS;
@@ -77,19 +68,10 @@ public class CodeRestGenerator extends CamelCommand {
 
     @Override
     public Integer doCall() throws Exception {
-        OpenApiDocument doc;
+        OpenAPI doc;
 
-        final ObjectNode node = input.endsWith("json") ? readNodeFromJson() : 
readNodeFromYaml();
-        Document source = Library.readDocument(node);
-        ModelType mt = ModelType.OPENAPI30;
-        if ("3.1".equals(openApiVersion)) {
-            mt = ModelType.OPENAPI31;
-        }
-        if (!source.root().modelType().equals(mt)) {
-            doc = (OpenApiDocument) Library.transformDocument(source, mt);
-        } else {
-            doc = (OpenApiDocument) source;
-        }
+        OpenAPIV3Parser parser = new OpenAPIV3Parser();
+        doc = parser.read(input);
 
         Configurator.setRootLevel(Level.OFF);
         try (CamelContext context = new DefaultCamelContext()) {
@@ -117,18 +99,6 @@ public class CodeRestGenerator extends CamelCommand {
         return 0;
     }
 
-    private ObjectNode readNodeFromJson() throws Exception {
-        final ObjectMapper mapper = new ObjectMapper();
-        return (ObjectNode) mapper.readTree(Paths.get(input).toFile());
-    }
-
-    private ObjectNode readNodeFromYaml() throws FileNotFoundException {
-        final ObjectMapper mapper = new ObjectMapper();
-        Yaml loader = new Yaml(new SafeConstructor(new LoaderOptions()));
-        Map<?, ?> map = loader.load(new 
FileInputStream(Paths.get(input).toFile()));
-        return mapper.convertValue(map, ObjectNode.class);
-    }
-
     private void generateDto() throws IOException {
         final String code = "code";
         final String generatorName = "quarkus".equals(runtime) ? "jaxrs-spec" 
: "java-camel";
diff --git 
a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/reload/OpenApiGeneratorReloadStrategy.java
 
b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/reload/OpenApiGeneratorReloadStrategy.java
index 3f789f2ae3c..846cf37e81e 100644
--- 
a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/reload/OpenApiGeneratorReloadStrategy.java
+++ 
b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/reload/OpenApiGeneratorReloadStrategy.java
@@ -21,11 +21,8 @@ import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.fasterxml.jackson.dataformat.yaml.YAMLMapper;
-import io.apicurio.datamodels.Library;
-import io.apicurio.datamodels.models.openapi.OpenApiDocument;
+import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.parser.OpenAPIV3Parser;
 import org.apache.camel.generator.openapi.RestDslGenerator;
 import org.apache.camel.support.FileWatcherResourceReloadStrategy;
 import org.slf4j.Logger;
@@ -61,15 +58,8 @@ public class OpenApiGeneratorReloadStrategy extends 
FileWatcherResourceReloadStr
 
             LOG.info("Generating open-api rest-dsl from: {}", openapi);
             try {
-                ObjectMapper mapper;
-                boolean yaml = openapi.getName().endsWith(".yaml") || 
openapi.getName().endsWith(".yml");
-                if (yaml) {
-                    mapper = new YAMLMapper();
-                } else {
-                    mapper = new ObjectMapper();
-                }
-                ObjectNode node = (ObjectNode) mapper.readTree(openapi);
-                OpenApiDocument document = (OpenApiDocument) 
Library.readDocument(node);
+                OpenAPIV3Parser parser = new OpenAPIV3Parser();
+                OpenAPI document = parser.read(openapi.getAbsolutePath());
                 String out = 
RestDslGenerator.toYaml(document).generate(getCamelContext(), false);
                 Files.write(Paths.get(OPENAPI_GENERATED_FILE), out.getBytes());
             } catch (Exception e) {
diff --git 
a/tooling/maven/camel-restdsl-openapi-plugin/src/main/java/org/apache/camel/maven/generator/openapi/AbstractGenerateMojo.java
 
b/tooling/maven/camel-restdsl-openapi-plugin/src/main/java/org/apache/camel/maven/generator/openapi/AbstractGenerateMojo.java
index b878a2d66f1..413e4d1889e 100644
--- 
a/tooling/maven/camel-restdsl-openapi-plugin/src/main/java/org/apache/camel/maven/generator/openapi/AbstractGenerateMojo.java
+++ 
b/tooling/maven/camel-restdsl-openapi-plugin/src/main/java/org/apache/camel/maven/generator/openapi/AbstractGenerateMojo.java
@@ -18,7 +18,6 @@ package org.apache.camel.maven.generator.openapi;
 
 import java.io.File;
 import java.io.FileInputStream;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.lang.reflect.InvocationTargetException;
@@ -27,24 +26,15 @@ import java.net.URI;
 import java.net.URISyntaxException;
 import java.net.URL;
 import java.net.URLClassLoader;
-import java.net.URLConnection;
 import java.net.URLDecoder;
-import java.nio.channels.Channels;
-import java.nio.channels.FileChannel;
-import java.nio.channels.ReadableByteChannel;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Map.Entry;
 import java.util.Optional;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import io.apicurio.datamodels.Library;
-import io.apicurio.datamodels.models.openapi.OpenApiDocument;
 import org.apache.camel.generator.openapi.DestinationGenerator;
 import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.ObjectHelper;
@@ -57,9 +47,6 @@ import org.apache.maven.plugins.annotations.Component;
 import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.project.MavenProject;
 import org.twdata.maven.mojoexecutor.MojoExecutor;
-import org.yaml.snakeyaml.LoaderOptions;
-import org.yaml.snakeyaml.Yaml;
-import org.yaml.snakeyaml.constructor.SafeConstructor;
 import org.yaml.snakeyaml.inspector.TagInspector;
 import org.yaml.snakeyaml.nodes.Tag;
 
@@ -314,53 +301,6 @@ abstract class AbstractGenerateMojo extends AbstractMojo {
         return null;
     }
 
-    OpenApiDocument readOpenApiDoc(String specificationUri) throws Exception {
-        ObjectMapper mapper = new ObjectMapper();
-
-        URL inputSpecRemoteUrl = inputSpecRemoteUrl(specificationUri);
-        File inputSpecTempFile = new File(specificationUri);
-
-        if (inputSpecRemoteUrl != null) {
-            inputSpecTempFile = File.createTempFile("openapi-spec", ".tmp");
-
-            URLConnection conn = inputSpecRemoteUrl.openConnection();
-            if (isNotEmpty(auth)) {
-                Map<String, String> authList = parse(auth);
-                for (Entry<String, String> a : authList.entrySet()) {
-                    conn.setRequestProperty(a.getKey(), a.getValue());
-                }
-            }
-            try (ReadableByteChannel readableByteChannel = 
Channels.newChannel(conn.getInputStream())) {
-                FileChannel fileChannel;
-                try (FileOutputStream fileOutputStream = new 
FileOutputStream(inputSpecTempFile)) {
-                    fileChannel = fileOutputStream.getChannel();
-                    fileChannel.transferFrom(readableByteChannel, 0, 
Long.MAX_VALUE);
-                }
-            }
-        }
-
-        InputStream is;
-        try {
-            is = new FileInputStream(inputSpecTempFile);
-        } catch (Exception ex) {
-            //use classloader resource stream as fallback
-            is = 
this.getClass().getClassLoader().getResourceAsStream(specificationUri);
-        }
-
-        String suffix = ".yaml";
-        if (specificationUri.regionMatches(true, specificationUri.length() - 
suffix.length(), suffix, 0, suffix.length())) {
-            LoaderOptions options = new LoaderOptions();
-            options.setTagInspector(new TrustedTagInspector());
-            Yaml loader = new Yaml(new SafeConstructor(options));
-            Map<?, ?> map = loader.load(is);
-            ObjectNode node = mapper.convertValue(map, ObjectNode.class);
-            return (OpenApiDocument) Library.readDocument(node);
-        } else {
-            ObjectNode node = (ObjectNode) mapper.readTree(is);
-            return (OpenApiDocument) Library.readDocument(node);
-        }
-    }
-
     protected String findAppropriateComponent() {
         String comp = detectRestComponentFromClasspath();
         if (comp != null) {
diff --git 
a/tooling/maven/camel-restdsl-openapi-plugin/src/main/java/org/apache/camel/maven/generator/openapi/GenerateMojo.java
 
b/tooling/maven/camel-restdsl-openapi-plugin/src/main/java/org/apache/camel/maven/generator/openapi/GenerateMojo.java
index 48d0fccdb6a..8ff2560ef54 100644
--- 
a/tooling/maven/camel-restdsl-openapi-plugin/src/main/java/org/apache/camel/maven/generator/openapi/GenerateMojo.java
+++ 
b/tooling/maven/camel-restdsl-openapi-plugin/src/main/java/org/apache/camel/maven/generator/openapi/GenerateMojo.java
@@ -20,7 +20,8 @@ import java.io.File;
 import java.io.IOException;
 import java.nio.file.Path;
 
-import io.apicurio.datamodels.models.openapi.OpenApiDocument;
+import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.parser.OpenAPIV3Parser;
 import org.apache.camel.generator.openapi.DestinationGenerator;
 import org.apache.camel.generator.openapi.RestDslGenerator;
 import org.apache.camel.generator.openapi.RestDslSourceCodeGenerator;
@@ -57,12 +58,7 @@ public class GenerateMojo extends AbstractGenerateMojo {
             return;
         }
 
-        OpenApiDocument openapi;
-        try {
-            openapi = readOpenApiDoc(specificationUri);
-        } catch (Exception e1) {
-            throw new MojoExecutionException("can't load open api doc from " + 
specificationUri, e1);
-        }
+        OpenAPI openapi = new OpenAPIV3Parser().read(specificationUri);
 
         if (openapi == null) {
             throw new MojoExecutionException(
diff --git 
a/tooling/maven/camel-restdsl-openapi-plugin/src/main/java/org/apache/camel/maven/generator/openapi/GenerateXmlMojo.java
 
b/tooling/maven/camel-restdsl-openapi-plugin/src/main/java/org/apache/camel/maven/generator/openapi/GenerateXmlMojo.java
index c107947f87d..fcd2eb2c0ed 100644
--- 
a/tooling/maven/camel-restdsl-openapi-plugin/src/main/java/org/apache/camel/maven/generator/openapi/GenerateXmlMojo.java
+++ 
b/tooling/maven/camel-restdsl-openapi-plugin/src/main/java/org/apache/camel/maven/generator/openapi/GenerateXmlMojo.java
@@ -19,7 +19,8 @@ package org.apache.camel.maven.generator.openapi;
 import java.io.File;
 import java.io.FileOutputStream;
 
-import io.apicurio.datamodels.models.openapi.OpenApiDocument;
+import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.parser.OpenAPIV3Parser;
 import org.apache.camel.CamelContext;
 import org.apache.camel.generator.openapi.DestinationGenerator;
 import org.apache.camel.generator.openapi.RestDslGenerator;
@@ -55,12 +56,7 @@ public class GenerateXmlMojo extends AbstractGenerateMojo {
             return;
         }
 
-        OpenApiDocument openapi;
-        try {
-            openapi = readOpenApiDoc(specificationUri);
-        } catch (Exception e1) {
-            throw new MojoExecutionException("can't load open api doc from " + 
specificationUri, e1);
-        }
+        OpenAPI openapi = new OpenAPIV3Parser().read(specificationUri);
 
         if (openapi == null) {
             throw new MojoExecutionException(
diff --git 
a/tooling/maven/camel-restdsl-openapi-plugin/src/main/java/org/apache/camel/maven/generator/openapi/GenerateYamlMojo.java
 
b/tooling/maven/camel-restdsl-openapi-plugin/src/main/java/org/apache/camel/maven/generator/openapi/GenerateYamlMojo.java
index e1797d15f46..3a8d00241cc 100644
--- 
a/tooling/maven/camel-restdsl-openapi-plugin/src/main/java/org/apache/camel/maven/generator/openapi/GenerateYamlMojo.java
+++ 
b/tooling/maven/camel-restdsl-openapi-plugin/src/main/java/org/apache/camel/maven/generator/openapi/GenerateYamlMojo.java
@@ -19,7 +19,8 @@ package org.apache.camel.maven.generator.openapi;
 import java.io.File;
 import java.io.FileOutputStream;
 
-import io.apicurio.datamodels.models.openapi.OpenApiDocument;
+import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.parser.OpenAPIV3Parser;
 import org.apache.camel.CamelContext;
 import org.apache.camel.generator.openapi.DestinationGenerator;
 import org.apache.camel.generator.openapi.RestDslGenerator;
@@ -52,12 +53,7 @@ public class GenerateYamlMojo extends AbstractGenerateMojo {
             return;
         }
 
-        OpenApiDocument openapi;
-        try {
-            openapi = readOpenApiDoc(specificationUri);
-        } catch (Exception e1) {
-            throw new MojoExecutionException("can't load open api doc from " + 
specificationUri, e1);
-        }
+        OpenAPI openapi = new OpenAPIV3Parser().read(specificationUri);
 
         if (openapi == null) {
             throw new MojoExecutionException(
diff --git a/tooling/openapi-rest-dsl-generator/pom.xml 
b/tooling/openapi-rest-dsl-generator/pom.xml
index 803e7d862f9..6135fc7ebb6 100644
--- a/tooling/openapi-rest-dsl-generator/pom.xml
+++ b/tooling/openapi-rest-dsl-generator/pom.xml
@@ -49,13 +49,23 @@
             <version>${javapoet-version}</version>
         </dependency>
         <dependency>
-            <groupId>io.apicurio</groupId>
-            <artifactId>apicurio-data-models</artifactId>
-            <version>${apicurio-version}</version>
+            <groupId>io.swagger.core.v3</groupId>
+            <artifactId>swagger-core-jakarta</artifactId>
+            <version>${swagger-openapi3-version}</version>
+        </dependency>
+        <dependency>
+            <groupId>io.swagger.core.v3</groupId>
+            <artifactId>swagger-models-jakarta</artifactId>
+            <version>${swagger-openapi3-version}</version>
+        </dependency>
+        <dependency>
+            <groupId>io.swagger.parser.v3</groupId>
+            <artifactId>swagger-parser-v3</artifactId>
+            <version>${swagger-openapi3-java-parser-version}</version>
             <exclusions>
                 <exclusion>
-                    <groupId>com.fasterxml.jackson.core</groupId>
-                    <artifactId>jackson-core</artifactId>
+                    <groupId>io.swagger.core.v3</groupId>
+                    <artifactId>*</artifactId>
                 </exclusion>
             </exclusions>
         </dependency>
diff --git 
a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/AppendableGenerator.java
 
b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/AppendableGenerator.java
index 9045f91b2a5..be7fd5d75b0 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/AppendableGenerator.java
+++ 
b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/AppendableGenerator.java
@@ -19,11 +19,11 @@ package org.apache.camel.generator.openapi;
 import java.io.IOException;
 
 import com.squareup.javapoet.JavaFile;
-import io.apicurio.datamodels.models.openapi.OpenApiDocument;
+import io.swagger.v3.oas.models.OpenAPI;
 
 final class AppendableGenerator extends RestDslSourceCodeGenerator<Appendable> 
{
 
-    AppendableGenerator(final OpenApiDocument document) {
+    AppendableGenerator(final OpenAPI document) {
         super(document);
     }
 
diff --git 
a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/DefaultDestinationGenerator.java
 
b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/DefaultDestinationGenerator.java
index e57df4389c1..bdf94f036a1 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/DefaultDestinationGenerator.java
+++ 
b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/DefaultDestinationGenerator.java
@@ -19,7 +19,7 @@ package org.apache.camel.generator.openapi;
 import java.util.Optional;
 import java.util.concurrent.atomic.AtomicInteger;
 
-import io.apicurio.datamodels.models.openapi.OpenApiOperation;
+import io.swagger.v3.oas.models.Operation;
 
 public class DefaultDestinationGenerator implements DestinationGenerator {
 
@@ -35,7 +35,7 @@ public class DefaultDestinationGenerator implements 
DestinationGenerator {
     }
 
     @Override
-    public String generateDestinationFor(final OpenApiOperation operation) {
+    public String generateDestinationFor(final Operation operation) {
         String answer = syntax;
         if (answer.contains("${operationId")) {
             String id = 
Optional.ofNullable(operation.getOperationId()).orElseGet(this::generateDirectName);
diff --git 
a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/DestinationGenerator.java
 
b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/DestinationGenerator.java
index 41cc5180743..7f8c0bb884d 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/DestinationGenerator.java
+++ 
b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/DestinationGenerator.java
@@ -16,11 +16,11 @@
  */
 package org.apache.camel.generator.openapi;
 
-import io.apicurio.datamodels.models.openapi.OpenApiOperation;
+import io.swagger.v3.oas.models.Operation;
 
 @FunctionalInterface
 public interface DestinationGenerator {
 
-    String generateDestinationFor(OpenApiOperation operation);
+    String generateDestinationFor(Operation operation);
 
 }
diff --git 
a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/FilerGenerator.java
 
b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/FilerGenerator.java
index 78fe0dcefd6..a274b35b773 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/FilerGenerator.java
+++ 
b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/FilerGenerator.java
@@ -21,11 +21,11 @@ import java.io.IOException;
 import javax.annotation.processing.Filer;
 
 import com.squareup.javapoet.JavaFile;
-import io.apicurio.datamodels.models.openapi.OpenApiDocument;
+import io.swagger.v3.oas.models.OpenAPI;
 
 final class FilerGenerator extends RestDslSourceCodeGenerator<Filer> {
 
-    FilerGenerator(final OpenApiDocument document) {
+    FilerGenerator(final OpenAPI document) {
         super(document);
     }
 
diff --git 
a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/OperationVisitor.java
 
b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/OperationVisitor.java
index bc18533f3d5..dafba893aea 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/OperationVisitor.java
+++ 
b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/OperationVisitor.java
@@ -21,32 +21,19 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.LinkedHashSet;
 import java.util.List;
+import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
 
-import io.apicurio.datamodels.models.Referenceable;
-import io.apicurio.datamodels.models.Schema;
-import io.apicurio.datamodels.models.openapi.OpenApiMediaType;
-import io.apicurio.datamodels.models.openapi.OpenApiOperation;
-import io.apicurio.datamodels.models.openapi.OpenApiParameter;
-import io.apicurio.datamodels.models.openapi.OpenApiPathItem;
-import io.apicurio.datamodels.models.openapi.OpenApiResponse;
-import io.apicurio.datamodels.models.openapi.v20.OpenApi20Items;
-import io.apicurio.datamodels.models.openapi.v20.OpenApi20Operation;
-import io.apicurio.datamodels.models.openapi.v20.OpenApi20Parameter;
-import io.apicurio.datamodels.models.openapi.v30.OpenApi30MediaType;
-import io.apicurio.datamodels.models.openapi.v30.OpenApi30Operation;
-import io.apicurio.datamodels.models.openapi.v30.OpenApi30Parameter;
-import io.apicurio.datamodels.models.openapi.v30.OpenApi30RequestBody;
-import io.apicurio.datamodels.models.openapi.v30.OpenApi30Response;
-import io.apicurio.datamodels.models.openapi.v30.OpenApi30Schema;
-import io.apicurio.datamodels.models.openapi.v31.OpenApi31MediaType;
-import io.apicurio.datamodels.models.openapi.v31.OpenApi31Operation;
-import io.apicurio.datamodels.models.openapi.v31.OpenApi31Parameter;
-import io.apicurio.datamodels.models.openapi.v31.OpenApi31RequestBody;
-import io.apicurio.datamodels.models.openapi.v31.OpenApi31Response;
-import io.apicurio.datamodels.models.openapi.v31.OpenApi31Schema;
-import io.apicurio.datamodels.refs.ReferenceUtil;
+import io.swagger.v3.oas.models.Operation;
+import io.swagger.v3.oas.models.PathItem;
+import io.swagger.v3.oas.models.media.MediaType;
+import io.swagger.v3.oas.models.media.Schema;
+import io.swagger.v3.oas.models.parameters.Parameter;
+import io.swagger.v3.oas.models.parameters.Parameter.StyleEnum;
+import io.swagger.v3.oas.models.parameters.RequestBody;
+import io.swagger.v3.oas.models.responses.ApiResponse;
+import io.swagger.v3.oas.models.responses.ApiResponses;
 import org.apache.camel.model.rest.CollectionFormat;
 import org.apache.camel.model.rest.RestParamType;
 import org.apache.camel.util.ObjectHelper;
@@ -84,122 +71,50 @@ class OperationVisitor<T> {
         return stringList;
     }
 
-    CodeEmitter<T> emit(final OpenApiParameter parameter) {
+    CodeEmitter<T> emit(final Parameter parameter) {
         emitter.emit("param");
 
-        OpenApiParameter toUse = parameter;
-        if (toUse instanceof OpenApi20Parameter) {
-            String ref = ((OpenApi20Parameter) toUse).get$ref();
-            if (ObjectHelper.isNotEmpty(ref)) {
-                toUse = (OpenApi20Parameter) ReferenceUtil.resolveRef(ref, 
parameter);
-            }
-        } else if (toUse instanceof OpenApi30Parameter) {
-            String ref = ((OpenApi30Parameter) toUse).get$ref();
-            if (ObjectHelper.isNotEmpty(ref)) {
-                toUse = (OpenApi30Parameter) ReferenceUtil.resolveRef(ref, 
parameter);
-            }
-        } else if (toUse instanceof OpenApi31Parameter) {
-            String ref = ((OpenApi31Parameter) toUse).get$ref();
-            if (ObjectHelper.isNotEmpty(ref)) {
-                toUse = (OpenApi31Parameter) ReferenceUtil.resolveRef(ref, 
parameter);
-            }
-        }
-
-        emit("name", toUse.getName());
-        final String parameterType = toUse.getIn();
+        emit("name", parameter.getName());
+        final String parameterType = parameter.getIn();
         if (ObjectHelper.isNotEmpty(parameterType)) {
             emit("type", RestParamType.valueOf(parameterType));
         }
         if (!"body".equals(parameterType)) {
-            if (toUse instanceof OpenApi20Parameter) {
-                final OpenApi20Parameter serializableParameter = 
(OpenApi20Parameter) toUse;
-
-                final String dataType = serializableParameter.getType();
-                emit("dataType", dataType);
-                emit("allowableValues", 
asStringList(serializableParameter.getEnum()));
-                final String collectionFormat = 
serializableParameter.getCollectionFormat();
-                if (ObjectHelper.isNotEmpty(collectionFormat)) {
-                    emit("collectionFormat", 
CollectionFormat.valueOf(collectionFormat));
-                }
-                if 
(ObjectHelper.isNotEmpty(serializableParameter.getDefault())) {
-                    final String value
-                            = 
StringHelper.removeLeadingAndEndingQuotes(serializableParameter.getDefault().toString());
-                    emit("defaultValue", value);
-                }
-
-                final OpenApi20Items items = serializableParameter.getItems();
-                if ("array".equals(dataType) && items != null) {
-                    emit("arrayType", items.getType());
-                }
-            } else if (toUse instanceof OpenApi30Parameter) {
-                final OpenApi30Parameter serializableParameter = 
(OpenApi30Parameter) toUse;
-                final OpenApi30Schema schema = (OpenApi30Schema) 
serializableParameter.getSchema();
-                if (schema != null) {
-                    final String dataType = schema.getType();
-                    if (ObjectHelper.isNotEmpty(dataType)) {
-                        emit("dataType", dataType);
-                    }
-                    emit("allowableValues", asStringList(schema.getEnum()));
-                    final String style = serializableParameter.getStyle();
-                    if (ObjectHelper.isNotEmpty(style)) {
-                        if (style.equals("form")) {
-                            // Guard against null explode value
-                            // See: 
https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.3.md#fixed-fields-10
-                            if 
(Boolean.FALSE.equals(serializableParameter.isExplode())) {
-                                emit("collectionFormat", CollectionFormat.csv);
-                            } else {
-                                emit("collectionFormat", 
CollectionFormat.multi);
-                            }
+            final Schema schema = parameter.getSchema();
+            if (schema != null) {
+                final String dataType = schema.getType();
+                if (ObjectHelper.isNotEmpty(dataType)) {
+                    emit("dataType", dataType);
+                }
+                emit("allowableValues", asStringList(schema.getEnum()));
+                final StyleEnum style = parameter.getStyle();
+                if (ObjectHelper.isNotEmpty(style)) {
+                    if (style.equals(StyleEnum.FORM)) {
+                        // Guard against null explode value
+                        // See: 
https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.3.md#fixed-fields-10
+                        if (Boolean.FALSE.equals(parameter.getExplode())) {
+                            emit("collectionFormat", CollectionFormat.csv);
+                        } else {
+                            emit("collectionFormat", CollectionFormat.multi);
                         }
                     }
-                    if (ObjectHelper.isNotEmpty(schema.getDefault())) {
-                        final String value = 
StringHelper.removeLeadingAndEndingQuotes(schema.getDefault().toString());
-                        emit("defaultValue", value);
-                    }
-
-                    if ("array".equals(dataType) && schema.getItems() != null) 
{
-                        emit("arrayType", schema.getItems().getType());
-                    }
                 }
-            } else if (toUse instanceof OpenApi31Parameter) {
-                final OpenApi31Parameter serializableParameter = 
(OpenApi31Parameter) toUse;
-                final OpenApi31Schema schema = (OpenApi31Schema) 
serializableParameter.getSchema();
-                if (schema != null) {
-                    final String dataType
-                            = schema.getType() != null && 
schema.getType().isString() ? schema.getType().asString() : null;
-                    if (ObjectHelper.isNotEmpty(dataType)) {
-                        emit("dataType", dataType);
-                    }
-                    emit("allowableValues", asStringList(schema.getEnum()));
-                    final String style = serializableParameter.getStyle();
-                    if (ObjectHelper.isNotEmpty(style)) {
-                        if (style.equals("form")) {
-                            // Guard against null explode value
-                            // See: 
https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.3.md#fixed-fields-10
-                            if 
(Boolean.FALSE.equals(serializableParameter.isExplode())) {
-                                emit("collectionFormat", CollectionFormat.csv);
-                            } else {
-                                emit("collectionFormat", 
CollectionFormat.multi);
-                            }
-                        }
-                    }
-                    if (ObjectHelper.isNotEmpty(schema.getDefault())) {
-                        final String value = 
StringHelper.removeLeadingAndEndingQuotes(schema.getDefault().toString());
-                        emit("defaultValue", value);
-                    }
+                if (ObjectHelper.isNotEmpty(schema.getDefault())) {
+                    final String value = 
StringHelper.removeLeadingAndEndingQuotes(schema.getDefault().toString());
+                    emit("defaultValue", value);
+                }
 
-                    if ("array".equals(dataType) && schema.getItems() != null) 
{
-                        emit("arrayType", 
schema.getItems().getType().asString());
-                    }
+                if ("array".equals(dataType) && schema.getItems() != null) {
+                    emit("arrayType", schema.getItems().getType());
                 }
             }
         }
-        if (toUse.isRequired() != null) {
-            emit("required", toUse.isRequired());
+        if (parameter.getRequired() != null) {
+            emit("required", parameter.getRequired());
         } else {
             emit("required", Boolean.FALSE);
         }
-        emit("description", toUse.getDescription());
+        emit("description", parameter.getDescription());
         emitter.emit("endParam");
 
         return emitter;
@@ -221,7 +136,7 @@ class OperationVisitor<T> {
         return emitter.emit(method, value);
     }
 
-    void visit(final PathVisitor.HttpMethod method, final OpenApiOperation 
operation) {
+    void visit(final PathItem.HttpMethod method, final Operation operation, 
final PathItem pathItem) {
         if (filter.accept(operation.getOperationId())) {
             final String methodName = method.name().toLowerCase();
             emitter.emit(methodName, path);
@@ -229,58 +144,20 @@ class OperationVisitor<T> {
             emit("id", operation.getOperationId());
             emit("description", operation.getDescription());
             Set<String> operationLevelConsumes = new LinkedHashSet<>();
-            if (operation instanceof OpenApi20Operation) {
-                OpenApi20Operation oas20Operation = (OpenApi20Operation) 
operation;
-                if (oas20Operation.getConsumes() != null) {
-                    
operationLevelConsumes.addAll(oas20Operation.getConsumes());
-                }
-            } else if (operation instanceof OpenApi30Operation) {
-                OpenApi30Operation oas30Operation = (OpenApi30Operation) 
operation;
-                if (oas30Operation.getRequestBody() != null
-                        && oas30Operation.getRequestBody().getContent() != 
null) {
-                    
operationLevelConsumes.addAll(oas30Operation.getRequestBody().getContent().keySet());
-                }
-            } else if (operation instanceof OpenApi31Operation) {
-                OpenApi31Operation oas31Operation = (OpenApi31Operation) 
operation;
-                if (oas31Operation.getRequestBody() != null
-                        && oas31Operation.getRequestBody().getContent() != 
null) {
-                    
operationLevelConsumes.addAll(oas31Operation.getRequestBody().getContent().keySet());
-                }
+            if (operation.getRequestBody() != null && 
operation.getRequestBody().getContent() != null) {
+                
operationLevelConsumes.addAll(operation.getRequestBody().getContent().keySet());
             }
             emit("consumes", operationLevelConsumes);
             Set<String> operationLevelProduces = new LinkedHashSet<>();
-            if (operation instanceof OpenApi20Operation) {
-                OpenApi20Operation oas20Operation = (OpenApi20Operation) 
operation;
-                if (oas20Operation.getProduces() != null) {
-                    
operationLevelProduces.addAll(oas20Operation.getProduces());
-                }
-            } else if (operation instanceof OpenApi30Operation) {
-                final OpenApi30Operation oas30Operation = (OpenApi30Operation) 
operation;
-                if (oas30Operation.getResponses() != null) {
-                    for (OpenApiResponse response : 
oas30Operation.getResponses().getItems()) {
-                        OpenApi30Response oas30Response = (OpenApi30Response) 
response;
-                        if (oas30Response.getContent() != null) {
-                            
operationLevelProduces.addAll(oas30Response.getContent().keySet());
-                        }
-                    }
-                    OpenApi30Response oas30Response = (OpenApi30Response) 
oas30Operation.getResponses().getDefault();
-                    if (oas30Response != null && oas30Response.getContent() != 
null) {
-                        
operationLevelProduces.addAll(oas30Response.getContent().keySet());
+            if (operation.getResponses() != null) {
+                for (ApiResponse response : operation.getResponses().values()) 
{
+                    if (response.getContent() != null) {
+                        
operationLevelProduces.addAll(response.getContent().keySet());
                     }
                 }
-            } else if (operation instanceof OpenApi31Operation) {
-                final OpenApi31Operation oas31Operation = (OpenApi31Operation) 
operation;
-                if (oas31Operation.getResponses() != null) {
-                    for (OpenApiResponse response : 
oas31Operation.getResponses().getItems()) {
-                        OpenApi31Response oas31Response = (OpenApi31Response) 
response;
-                        if (oas31Response.getContent() != null) {
-                            
operationLevelProduces.addAll(oas31Response.getContent().keySet());
-                        }
-                    }
-                    OpenApi31Response oas31Response = (OpenApi31Response) 
oas31Operation.getResponses().getDefault();
-                    if (oas31Response != null && oas31Response.getContent() != 
null) {
-                        
operationLevelProduces.addAll(oas31Response.getContent().keySet());
-                    }
+                ApiResponse response = 
operation.getResponses().get(ApiResponses.DEFAULT);
+                if (response != null && response.getContent() != null) {
+                    
operationLevelProduces.addAll(response.getContent().keySet());
                 }
             }
             emit("produces", operationLevelProduces);
@@ -288,135 +165,44 @@ class OperationVisitor<T> {
             if (ObjectHelper.isNotEmpty(operation.getParameters())) {
                 operation.getParameters().forEach(this::emit);
             }
-            final OpenApiPathItem pathItem = (OpenApiPathItem) 
operation.parent();
             if (ObjectHelper.isNotEmpty(pathItem.getParameters())) {
                 pathItem.getParameters().forEach(this::emit);
             }
-            if (operation instanceof OpenApi30Operation) {
-                emitOas30Operation((OpenApi30Operation) operation);
-            } else if (operation instanceof OpenApi31Operation) {
-                emitOas31Operation((OpenApi31Operation) operation);
-            }
+            emitOperation(operation);
 
             emitter.emit("to", 
destinationGenerator.generateDestinationFor(operation));
         }
     }
 
-    private CodeEmitter<T> emitOas30Operation(final OpenApi30Operation 
operation) {
-        if (operation.getRequestBody() != null) {
-            String dto = null;
-            boolean foundForm = false;
-            final OpenApi30RequestBody requestBody = 
operation.getRequestBody();
-            for (final Entry<String, OpenApiMediaType> entry : 
requestBody.getContent().entrySet()) {
-                final String ct = entry.getKey();
-                OpenApi30MediaType mt = (OpenApi30MediaType) entry.getValue();
-                if (ct.contains("form") && mt.getSchema().getProperties() != 
null) {
-                    for (final Entry<String, Schema> entrySchema : 
mt.getSchema().getProperties().entrySet()) {
-                        OpenApi30Schema openApi30Schema = (OpenApi30Schema) 
entrySchema.getValue();
-                        foundForm = true;
-                        emitter.emit("param");
-                        emit("name", entrySchema.getKey());
-                        emit("type", RestParamType.formData);
-                        emit("dataType", openApi30Schema.getType());
-                        emit("required", requestBody.isRequired());
-                        emit("description", 
entrySchema.getValue().getDescription());
-                        emitter.emit("endParam");
-                    }
-                }
-                if (dto == null && mt.getSchema() instanceof Referenceable 
ref) {
-                    OpenApi30Schema schema = (OpenApi30Schema) mt.getSchema();
-                    boolean array = "array".equals(schema.getType());
-                    if (array) {
-                        ref = schema.getItems();
-                    }
-                    String r = ref.get$ref();
-                    if (r != null && r.startsWith("#/components/schemas/")) {
-                        dto = r.substring(21);
-                        if (array) {
-                            dto += "[]";
-                        }
-                    }
-                }
-            }
-            if (!foundForm) {
-                emitter.emit("param");
-                emit("name", "body");
-                emit("type", RestParamType.valueOf("body"));
-                emit("required", Boolean.TRUE);
-                emit("description", requestBody.getDescription());
-                emitter.emit("endParam");
-            }
-            if (dtoPackageName != null && dto != null) {
-                emit("type", dtoPackageName + "." + dto);
-            }
-        }
-
-        if (operation.getResponses() != null) {
-            String dto = null;
-            for (String key : operation.getResponses().getItemNames()) {
-                if ("200".equals(key)) {
-                    var response = operation.getResponses().getItem(key);
-                    if (response instanceof OpenApi30Response res30) {
-                        for (final Entry<String, OpenApi30MediaType> entry : 
res30.getContent().entrySet()) {
-                            final OpenApi30MediaType mediaType = 
entry.getValue();
-                            if (dto == null && mediaType.getSchema() 
instanceof Referenceable ref) {
-                                OpenApi30Schema schema = (OpenApi30Schema) 
mediaType.getSchema();
-                                boolean array = 
"array".equals(schema.getType());
-                                if (array) {
-                                    ref = schema.getItems();
-                                }
-                                String r = ref.get$ref();
-                                if (r != null && 
r.startsWith("#/components/schemas/")) {
-                                    dto = r.substring(21);
-                                    if (array) {
-                                        dto += "[]";
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-            if (dtoPackageName != null && dto != null) {
-                emit("outType", dtoPackageName + "." + dto);
-            }
-        }
-
-        return emitter;
-    }
-
-    private CodeEmitter<T> emitOas31Operation(final OpenApi31Operation 
operation) {
+    private CodeEmitter<T> emitOperation(final Operation operation) {
         if (operation.getRequestBody() != null) {
             String dto = null;
             boolean foundForm = false;
-            final OpenApi31RequestBody requestBody = 
operation.getRequestBody();
-            for (final Entry<String, OpenApiMediaType> entry : 
requestBody.getContent().entrySet()) {
+            final RequestBody requestBody = operation.getRequestBody();
+            for (final Entry<String, MediaType> entry : 
requestBody.getContent().entrySet()) {
                 final String ct = entry.getKey();
-                OpenApi31MediaType mt = (OpenApi31MediaType) entry.getValue();
+                MediaType mt = entry.getValue();
                 if (ct.contains("form") && mt.getSchema().getProperties() != 
null) {
-                    for (final Entry<String, Schema> entrySchema : 
mt.getSchema().getProperties().entrySet()) {
-                        OpenApi31Schema openApi31Schema = (OpenApi31Schema) 
entrySchema.getValue();
+                    final Set<Map.Entry<String, Schema>> entrySet = 
mt.getSchema().getProperties().entrySet();
+                    for (Map.Entry<String, Schema> entrySchema : entrySet) {
+                        Schema openApi31Schema = entrySchema.getValue();
                         foundForm = true;
                         emitter.emit("param");
                         emit("name", entrySchema.getKey());
                         emit("type", RestParamType.formData);
                         emit("dataType", openApi31Schema.getType());
-                        emit("required", requestBody.isRequired());
+                        emit("required", requestBody.getRequired());
                         emit("description", 
entrySchema.getValue().getDescription());
                         emitter.emit("endParam");
                     }
                 }
-                if (dto == null && mt.getSchema() instanceof Referenceable 
ref) {
-                    OpenApi31Schema schema = (OpenApi31Schema) mt.getSchema();
-                    boolean array = "array".equals(
-                            schema.getType() != null && 
schema.getType().isString() ? schema.getType().asString() : false);
-                    if (array) {
-                        ref = schema.getItems();
-                    }
-                    String r = ref.get$ref();
-                    if (r != null && r.startsWith("#/components/schemas/")) {
-                        dto = r.substring(21);
-                        if (array) {
+                if (dto == null) {
+                    Schema schema = mt.getSchema();
+                    boolean isArray = "array".equals(schema.getType());
+                    String ref = isArray ? schema.getItems().get$ref() : 
schema.get$ref();
+                    if (ref != null && 
ref.startsWith("#/components/schemas/")) {
+                        dto = ref.substring(21);
+                        if (isArray) {
                             dto += "[]";
                         }
                     }
@@ -437,26 +223,19 @@ class OperationVisitor<T> {
 
         if (operation.getResponses() != null) {
             String dto = null;
-            for (String key : operation.getResponses().getItemNames()) {
+            for (String key : operation.getResponses().keySet()) {
                 if ("200".equals(key)) {
-                    var response = operation.getResponses().getItem(key);
-                    if (response instanceof OpenApi31Response res31) {
-                        for (final Entry<String, OpenApi31MediaType> entry : 
res31.getContent().entrySet()) {
-                            final OpenApi31MediaType mediaType = 
entry.getValue();
-                            if (dto == null && mediaType.getSchema() 
instanceof Referenceable ref) {
-                                OpenApi31Schema schema = (OpenApi31Schema) 
mediaType.getSchema();
-                                boolean array
-                                        = "array".equals(schema.getType() != 
null && schema.getType().isString()
-                                                ? schema.getType().asString() 
: false);
-                                if (array) {
-                                    ref = schema.getItems();
-                                }
-                                String r = ref.get$ref();
-                                if (r != null && 
r.startsWith("#/components/schemas/")) {
-                                    dto = r.substring(21);
-                                    if (array) {
-                                        dto += "[]";
-                                    }
+                    ApiResponse response = operation.getResponses().get(key);
+                    for (final Entry<String, MediaType> entry : 
response.getContent().entrySet()) {
+                        final MediaType mediaType = entry.getValue();
+                        if (dto == null) {
+                            Schema schema = mediaType.getSchema();
+                            boolean isArray = "array".equals(schema.getType());
+                            String ref = isArray ? schema.getItems().get$ref() 
: schema.get$ref();
+                            if (ref != null && 
ref.startsWith("#/components/schemas/")) {
+                                dto = ref.substring(21);
+                                if (isArray) {
+                                    dto += "[]";
                                 }
                             }
                         }
diff --git 
a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/PathGenerator.java
 
b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/PathGenerator.java
index d9c21607563..610ec0c836d 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/PathGenerator.java
+++ 
b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/PathGenerator.java
@@ -20,11 +20,11 @@ import java.io.IOException;
 import java.nio.file.Path;
 
 import com.squareup.javapoet.JavaFile;
-import io.apicurio.datamodels.models.openapi.OpenApiDocument;
+import io.swagger.v3.oas.models.OpenAPI;
 
 final class PathGenerator extends RestDslSourceCodeGenerator<Path> {
 
-    PathGenerator(final OpenApiDocument document) {
+    PathGenerator(final OpenAPI document) {
         super(document);
     }
 
diff --git 
a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/PathVisitor.java
 
b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/PathVisitor.java
index de47790c72f..f999e78480c 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/PathVisitor.java
+++ 
b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/PathVisitor.java
@@ -16,11 +16,7 @@
  */
 package org.apache.camel.generator.openapi;
 
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-import io.apicurio.datamodels.models.openapi.OpenApiOperation;
-import io.apicurio.datamodels.models.openapi.OpenApiPathItem;
+import io.swagger.v3.oas.models.PathItem;
 import org.apache.camel.util.ObjectHelper;
 
 class PathVisitor<T> {
@@ -30,16 +26,6 @@ class PathVisitor<T> {
     private final OperationFilter filter;
     private final String dtoPackageName;
 
-    public enum HttpMethod {
-        DELETE,
-        GET,
-        HEAD,
-        OPTIONS,
-        PATCH,
-        POST,
-        PUT
-    }
-
     PathVisitor(final String basePath, final CodeEmitter<T> emitter, final 
OperationFilter filter,
                 final DestinationGenerator destinationGenerator, final String 
dtoPackageName) {
         this.emitter = emitter;
@@ -54,38 +40,10 @@ class PathVisitor<T> {
         }
     }
 
-    void visit(final String path, final OpenApiPathItem definition) {
+    void visit(final String path, final PathItem definition) {
         final OperationVisitor<T> restDslOperation
                 = new OperationVisitor<>(emitter, filter, path, 
destinationGenerator, dtoPackageName);
-        operationMapFrom(definition).forEach(restDslOperation::visit);
-    }
-
-    private static Map<HttpMethod, OpenApiOperation> operationMapFrom(final 
OpenApiPathItem path) {
-        final Map<HttpMethod, OpenApiOperation> result = new LinkedHashMap<>();
-
-        if (path.getGet() != null) {
-            result.put(HttpMethod.GET, path.getGet());
-        }
-        if (path.getPut() != null) {
-            result.put(HttpMethod.PUT, path.getPut());
-        }
-        if (path.getPost() != null) {
-            result.put(HttpMethod.POST, path.getPost());
-        }
-        if (path.getDelete() != null) {
-            result.put(HttpMethod.DELETE, path.getDelete());
-        }
-        if (path.getPatch() != null) {
-            result.put(HttpMethod.PATCH, path.getPatch());
-        }
-        if (path.getHead() != null) {
-            result.put(HttpMethod.HEAD, path.getHead());
-        }
-        if (path.getOptions() != null) {
-            result.put(HttpMethod.OPTIONS, path.getOptions());
-        }
-
-        return result;
+        definition.readOperationsMap().forEach((method, op) -> 
restDslOperation.visit(method, op, definition));
     }
 
 }
diff --git 
a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslDefinitionGenerator.java
 
b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslDefinitionGenerator.java
index 814fc1e9926..c41af5bba58 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslDefinitionGenerator.java
+++ 
b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslDefinitionGenerator.java
@@ -16,13 +16,13 @@
  */
 package org.apache.camel.generator.openapi;
 
-import io.apicurio.datamodels.models.openapi.OpenApiDocument;
-import io.apicurio.datamodels.models.openapi.OpenApiPathItem;
+import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.oas.models.PathItem;
 import org.apache.camel.model.rest.RestsDefinition;
 
 public final class RestDslDefinitionGenerator extends 
RestDslGenerator<RestDslDefinitionGenerator> {
 
-    RestDslDefinitionGenerator(final OpenApiDocument document) {
+    RestDslDefinitionGenerator(final OpenAPI document) {
         super(document);
     }
 
@@ -32,8 +32,8 @@ public final class RestDslDefinitionGenerator extends 
RestDslGenerator<RestDslDe
         final PathVisitor<RestsDefinition> restDslStatement
                 = new PathVisitor<>(basePath, emitter, filter, 
destinationGenerator(), dtoPackageName);
 
-        for (String name : document.getPaths().getItemNames()) {
-            OpenApiPathItem item = document.getPaths().getItem(name);
+        for (String name : document.getPaths().keySet()) {
+            PathItem item = document.getPaths().get(name);
             restDslStatement.visit(name, item);
         }
 
diff --git 
a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslGenerator.java
 
b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslGenerator.java
index 83e538398a0..f4e839c13b3 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslGenerator.java
+++ 
b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslGenerator.java
@@ -24,13 +24,9 @@ import java.util.Objects;
 
 import javax.annotation.processing.Filer;
 
-import io.apicurio.datamodels.models.ServerVariable;
-import io.apicurio.datamodels.models.openapi.OpenApiDocument;
-import io.apicurio.datamodels.models.openapi.v20.OpenApi20Document;
-import io.apicurio.datamodels.models.openapi.v30.OpenApi30Document;
-import io.apicurio.datamodels.models.openapi.v30.OpenApi30Server;
-import io.apicurio.datamodels.models.openapi.v31.OpenApi31Document;
-import io.apicurio.datamodels.models.openapi.v31.OpenApi31Server;
+import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.oas.models.servers.Server;
+import io.swagger.v3.oas.models.servers.ServerVariable;
 import org.apache.camel.model.rest.RestsDefinition;
 
 import static org.apache.camel.util.ObjectHelper.notNull;
@@ -44,7 +40,7 @@ public abstract class RestDslGenerator<G> {
     String apiContextPath;
     DestinationGenerator destinationGenerator;
     String destinationToSyntax;
-    final OpenApiDocument document;
+    OpenAPI document;
     OperationFilter filter = new OperationFilter();
     String restComponent;
     String restContextPath;
@@ -54,7 +50,7 @@ public abstract class RestDslGenerator<G> {
     String basePath;
     String dtoPackageName;
 
-    RestDslGenerator(final OpenApiDocument document) {
+    RestDslGenerator(final OpenAPI document) {
         this.document = notNull(document, "document");
     }
 
@@ -155,7 +151,7 @@ public abstract class RestDslGenerator<G> {
         return destinationGenerator;
     }
 
-    public static String determineBasePathFrom(final String parameter, final 
OpenApiDocument document) {
+    public static String determineBasePathFrom(final String parameter, final 
OpenAPI document) {
         return parameter != null
                 ? determineBasePathFrom(parameter) : 
determineBasePathFrom(document);
     }
@@ -165,36 +161,18 @@ public abstract class RestDslGenerator<G> {
         return prepareBasePath(parameter.trim());
     }
 
-    public static String determineBasePathFrom(final OpenApiDocument document) 
{
+    public static String determineBasePathFrom(final OpenAPI document) {
         Objects.requireNonNull(document, "document");
 
-        if (document instanceof OpenApi20Document) {
-            return ((OpenApi20Document) document).getBasePath();
-        } else if (document instanceof OpenApi30Document) {
-            final OpenApi30Document oas30Document = (OpenApi30Document) 
document;
-            final List<OpenApi30Server> servers = oas30Document.getServers();
+        final List<Server> servers = document.getServers();
 
-            if (servers == null || servers.get(0) == null) {
-                return "";
-            }
-
-            final OpenApi30Server firstServer = servers.get(0);
-            final URI serverUrl = 
URI.create(resolveVariablesIn(firstServer.getUrl(), firstServer));
-            return prepareBasePath(serverUrl.getPath());
-        } else if (document instanceof OpenApi31Document) {
-            final OpenApi31Document oas31Document = (OpenApi31Document) 
document;
-            final List<OpenApi31Server> servers = oas31Document.getServers();
-
-            if (servers == null || servers.get(0) == null) {
-                return "";
-            }
-
-            final OpenApi31Server firstServer = servers.get(0);
-            final URI serverUrl = 
URI.create(resolveVariablesIn(firstServer.getUrl(), firstServer));
-            return prepareBasePath(serverUrl.getPath());
+        if (servers == null || servers.isEmpty()) {
+            return "";
         }
 
-        throw new IllegalArgumentException("Unsupported document type: " + 
document.getClass().getName());
+        final Server firstServer = servers.get(0);
+        final URI serverUrl = 
URI.create(resolveVariablesIn(firstServer.getUrl(), firstServer));
+        return prepareBasePath(serverUrl.getPath());
     }
 
     private static String prepareBasePath(String basePath) {
@@ -216,37 +194,17 @@ public abstract class RestDslGenerator<G> {
         return basePath;
     }
 
-    public static String determineHostFrom(final OpenApiDocument document) {
-        if (document instanceof OpenApi20Document) {
-            return ((OpenApi20Document) document).getHost();
-        } else if (document instanceof OpenApi30Document) {
-            final OpenApi30Document oas30Document = (OpenApi30Document) 
document;
-            final List<OpenApi30Server> servers = oas30Document.getServers();
-
-            if (servers == null || servers.get(0) == null) {
-                return "";
-            }
-            final OpenApi30Server firstServer = servers.get(0);
-            final URI serverUrl = 
URI.create(resolveVariablesIn(firstServer.getUrl(), firstServer));
-            return serverUrl.getHost();
-        }
-
-        throw new IllegalArgumentException("Unsupported document type: " + 
document.getClass().getName());
-    }
-
-    public static String resolveVariablesIn(final String url, final 
OpenApi30Server server) {
-        final Map<String, ServerVariable> variables = 
Objects.requireNonNull(server, "server").getVariables();
-        String withoutPlaceholders = url;
-        if (variables != null) {
-            for (Map.Entry<String, ServerVariable> entry : 
variables.entrySet()) {
-                final String name = "{" + entry.getKey() + "}";
-                withoutPlaceholders = withoutPlaceholders.replace(name, 
entry.getValue().getDefault());
-            }
+    public static String determineHostFrom(final OpenAPI document) {
+        final List<Server> servers = document.getServers();
+        if (servers == null || servers.isEmpty()) {
+            return "";
         }
-        return withoutPlaceholders;
+        final Server firstServer = servers.get(0);
+        final URI serverUrl = 
URI.create(resolveVariablesIn(firstServer.getUrl(), firstServer));
+        return serverUrl.getHost();
     }
 
-    public static String resolveVariablesIn(final String url, final 
OpenApi31Server server) {
+    public static String resolveVariablesIn(final String url, final Server 
server) {
         final Map<String, ServerVariable> variables = 
Objects.requireNonNull(server, "server").getVariables();
         String withoutPlaceholders = url;
         if (variables != null) {
@@ -258,27 +216,27 @@ public abstract class RestDslGenerator<G> {
         return withoutPlaceholders;
     }
 
-    public static RestDslSourceCodeGenerator<Appendable> toAppendable(final 
OpenApiDocument document) {
+    public static RestDslSourceCodeGenerator<Appendable> toAppendable(final 
OpenAPI document) {
         return new AppendableGenerator(document);
     }
 
-    public static RestDslDefinitionGenerator toDefinition(final 
OpenApiDocument document) {
+    public static RestDslDefinitionGenerator toDefinition(final OpenAPI 
document) {
         return new RestDslDefinitionGenerator(document);
     }
 
-    public static RestDslSourceCodeGenerator<Filer> toFiler(final 
OpenApiDocument document) {
+    public static RestDslSourceCodeGenerator<Filer> toFiler(final OpenAPI 
document) {
         return new FilerGenerator(document);
     }
 
-    public static RestDslSourceCodeGenerator<Path> toPath(final 
OpenApiDocument document) {
+    public static RestDslSourceCodeGenerator<Path> toPath(final OpenAPI 
document) {
         return new PathGenerator(document);
     }
 
-    public static RestDslXmlGenerator toXml(final OpenApiDocument document) {
+    public static RestDslXmlGenerator toXml(final OpenAPI document) {
         return new RestDslXmlGenerator(document);
     }
 
-    public static RestDslYamlGenerator toYaml(final OpenApiDocument document) {
+    public static RestDslYamlGenerator toYaml(final OpenAPI document) {
         return new RestDslYamlGenerator(document);
     }
 }
diff --git 
a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslSourceCodeGenerator.java
 
b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslSourceCodeGenerator.java
index 52a2aeda281..954ae02173a 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslSourceCodeGenerator.java
+++ 
b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslSourceCodeGenerator.java
@@ -32,9 +32,9 @@ import com.squareup.javapoet.ClassName;
 import com.squareup.javapoet.JavaFile;
 import com.squareup.javapoet.MethodSpec;
 import com.squareup.javapoet.TypeSpec;
-import io.apicurio.datamodels.models.Info;
-import io.apicurio.datamodels.models.openapi.OpenApiDocument;
-import io.apicurio.datamodels.models.openapi.OpenApiPathItem;
+import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.oas.models.PathItem;
+import io.swagger.v3.oas.models.info.Info;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.util.ObjectHelper;
 
@@ -50,17 +50,17 @@ public abstract class RestDslSourceCodeGenerator<T> extends 
RestDslGenerator<Res
 
     private static final String DEFAULT_INDENT = "    ";
 
-    private Function<OpenApiDocument, String> classNameGenerator = 
RestDslSourceCodeGenerator::generateClassName;
+    private Function<OpenAPI, String> classNameGenerator = 
RestDslSourceCodeGenerator::generateClassName;
 
     private Instant generated = Instant.now();
 
     private String indent = DEFAULT_INDENT;
 
-    private Function<OpenApiDocument, String> packageNameGenerator = 
RestDslSourceCodeGenerator::generatePackageName;
+    private Function<OpenAPI, String> packageNameGenerator = 
RestDslSourceCodeGenerator::generatePackageName;
 
     private boolean sourceCodeTimestamps;
 
-    RestDslSourceCodeGenerator(final OpenApiDocument document) {
+    RestDslSourceCodeGenerator(final OpenAPI document) {
         super(document);
     }
 
@@ -98,7 +98,7 @@ public abstract class RestDslSourceCodeGenerator<T> extends 
RestDslGenerator<Res
         return this;
     }
 
-    MethodSpec generateConfigureMethod(final OpenApiDocument document) {
+    MethodSpec generateConfigureMethod(final OpenAPI document) {
         final MethodSpec.Builder configure = 
MethodSpec.methodBuilder("configure").addModifiers(Modifier.PUBLIC)
                 .returns(void.class).addJavadoc("Defines Apache Camel routes 
using REST DSL fluent API.\n");
 
@@ -125,8 +125,8 @@ public abstract class RestDslSourceCodeGenerator<T> extends 
RestDslGenerator<Res
 
         final String basePath = 
RestDslGenerator.determineBasePathFrom(this.basePath, document);
 
-        for (String name : document.getPaths().getItemNames()) {
-            OpenApiPathItem s = document.getPaths().getItem(name);
+        for (String name : document.getPaths().keySet()) {
+            PathItem s = document.getPaths().get(name);
             // there must be at least one verb
             if (s.getGet() != null || s.getDelete() != null || s.getHead() != 
null || s.getOptions() != null
                     || s.getPut() != null || s.getPatch() != null
@@ -184,7 +184,7 @@ public abstract class RestDslSourceCodeGenerator<T> extends 
RestDslGenerator<Res
         return this;
     }
 
-    static String generateClassName(final OpenApiDocument document) {
+    static String generateClassName(final OpenAPI document) {
         final Info info = document.getInfo();
         if (info == null) {
             return DEFAULT_CLASS_NAME;
@@ -206,7 +206,7 @@ public abstract class RestDslSourceCodeGenerator<T> extends 
RestDslGenerator<Res
         return className;
     }
 
-    static String generatePackageName(final OpenApiDocument document) {
+    static String generatePackageName(final OpenAPI document) {
         final String host = RestDslGenerator.determineHostFrom(document);
 
         if (ObjectHelper.isNotEmpty(host)) {
diff --git 
a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslXmlGenerator.java
 
b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslXmlGenerator.java
index a1ebe22e705..bc85c891e11 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslXmlGenerator.java
+++ 
b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslXmlGenerator.java
@@ -33,8 +33,8 @@ import org.w3c.dom.NodeList;
 
 import org.xml.sax.InputSource;
 
-import io.apicurio.datamodels.models.openapi.OpenApiDocument;
-import io.apicurio.datamodels.models.openapi.OpenApiPathItem;
+import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.oas.models.PathItem;
 import org.apache.camel.CamelContext;
 import org.apache.camel.model.rest.RestsDefinition;
 import org.apache.camel.support.PluginHelper;
@@ -44,7 +44,7 @@ public class RestDslXmlGenerator extends 
RestDslGenerator<RestDslXmlGenerator> {
 
     private boolean blueprint;
 
-    RestDslXmlGenerator(final OpenApiDocument document) {
+    RestDslXmlGenerator(final OpenAPI document) {
         super(document);
     }
 
@@ -56,8 +56,8 @@ public class RestDslXmlGenerator extends 
RestDslGenerator<RestDslXmlGenerator> {
                 destinationGenerator(),
                 dtoPackageName);
 
-        for (String name : document.getPaths().getItemNames()) {
-            OpenApiPathItem item = document.getPaths().getItem(name);
+        for (String name : document.getPaths().keySet()) {
+            PathItem item = document.getPaths().get(name);
             restDslStatement.visit(name, item);
         }
 
diff --git 
a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslYamlGenerator.java
 
b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslYamlGenerator.java
index c132e27b2c7..6882f482e90 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslYamlGenerator.java
+++ 
b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslYamlGenerator.java
@@ -48,8 +48,8 @@ import com.fasterxml.jackson.databind.node.TextNode;
 import com.fasterxml.jackson.dataformat.xml.XmlMapper;
 import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
 import com.fasterxml.jackson.dataformat.yaml.YAMLGenerator;
-import io.apicurio.datamodels.models.openapi.OpenApiDocument;
-import io.apicurio.datamodels.models.openapi.OpenApiPathItem;
+import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.oas.models.PathItem;
 import org.apache.camel.CamelContext;
 import org.apache.camel.model.rest.RestsDefinition;
 import org.apache.camel.support.PluginHelper;
@@ -61,7 +61,7 @@ public class RestDslYamlGenerator extends 
RestDslGenerator<RestDslYamlGenerator>
     private static final String[] FIELD_ORDER
             = new String[] { "id", "path", "description", "consumes", 
"produces", "type", "outType", "param" };
 
-    RestDslYamlGenerator(final OpenApiDocument document) {
+    RestDslYamlGenerator(final OpenAPI document) {
         super(document);
     }
 
@@ -78,8 +78,8 @@ public class RestDslYamlGenerator extends 
RestDslGenerator<RestDslYamlGenerator>
                 dtoPackageName);
 
         if (document.getPaths() != null) {
-            for (String name : document.getPaths().getItemNames()) {
-                OpenApiPathItem item = document.getPaths().getItem(name);
+            for (String name : document.getPaths().keySet()) {
+                PathItem item = document.getPaths().get(name);
                 restDslStatement.visit(name, item);
             }
         }
diff --git 
a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/OperationVisitorTest.java
 
b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/OperationVisitorTest.java
index 774a160659b..65d61fca9ac 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/OperationVisitorTest.java
+++ 
b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/OperationVisitorTest.java
@@ -16,17 +16,17 @@
  */
 package org.apache.camel.generator.openapi;
 
+import java.util.Arrays;
+
 import com.squareup.javapoet.MethodSpec;
 import com.squareup.javapoet.MethodSpec.Builder;
-import io.apicurio.datamodels.models.openapi.OpenApiOperation;
-import io.apicurio.datamodels.models.openapi.OpenApiParameter;
-import io.apicurio.datamodels.models.openapi.OpenApiPathItem;
-import io.apicurio.datamodels.models.openapi.OpenApiPaths;
-import io.apicurio.datamodels.models.openapi.v20.OpenApi20Document;
-import io.apicurio.datamodels.models.openapi.v20.OpenApi20DocumentImpl;
-import io.apicurio.datamodels.models.openapi.v20.OpenApi20Parameter;
-import io.apicurio.datamodels.models.openapi.v20.OpenApi20ParameterImpl;
-import org.apache.camel.generator.openapi.PathVisitor.HttpMethod;
+import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.oas.models.Operation;
+import io.swagger.v3.oas.models.PathItem;
+import io.swagger.v3.oas.models.Paths;
+import io.swagger.v3.oas.models.media.Schema;
+import io.swagger.v3.oas.models.parameters.Parameter;
+import io.swagger.v3.parser.OpenAPIV3Parser;
 import org.junit.jupiter.api.Test;
 
 import static org.assertj.core.api.Assertions.assertThat;
@@ -39,7 +39,7 @@ public class OperationVisitorTest {
         final MethodBodySourceCodeEmitter emitter = new 
MethodBodySourceCodeEmitter(method);
         final OperationVisitor<?> visitor = new OperationVisitor<>(emitter, 
null, null, null, null);
 
-        final OpenApi20Parameter parameter = new OpenApi20ParameterImpl();
+        final Parameter parameter = new Parameter();
         parameter.setName("param");
         parameter.setIn("query");
 
@@ -54,6 +54,59 @@ public class OperationVisitorTest {
                                                         + "    }\n");
     }
 
+    @Test
+    public void referenceApiParameter() {
+        final Builder method = MethodSpec.methodBuilder("configure");
+        final MethodBodySourceCodeEmitter emitter = new 
MethodBodySourceCodeEmitter(method);
+        final OperationVisitor<?> visitor = new OperationVisitor<>(emitter, 
null, null, null, null);
+        final OpenAPI document
+                = new 
OpenAPIV3Parser().read("src/test/resources/org/apache/camel/generator/openapi/openapi-v3-ref-param.yaml");
+        final PathItem pathItem = document.getPaths().get("/path");
+        pathItem.getGet().getParameters().forEach(visitor::emit);
+
+        assertThat(method.build().toString()).isEqualTo("void configure() {\n"
+                                                        + "      param()\n"
+                                                        + "        
.name(\"limit\")\n"
+                                                        + "        
.type(org.apache.camel.model.rest.RestParamType.query)\n"
+                                                        + "        
.dataType(\"integer\")\n"
+                                                        + "        
.collectionFormat(org.apache.camel.model.rest.CollectionFormat.multi)\n"
+                                                        + "        
.required(false)\n"
+                                                        + "        
.description(\"Limits the number of returned results\")\n"
+                                                        + "      .endParam()\n"
+                                                        + "    }\n");
+    }
+
+    @Test
+    public void shouldEmitReferenceType() {
+        final Builder method = MethodSpec.methodBuilder("configure");
+        final MethodBodySourceCodeEmitter emitter = new 
MethodBodySourceCodeEmitter(method);
+        final OperationVisitor<?> visitor = new OperationVisitor<>(
+                emitter, new OperationFilter(), "/path", new 
DefaultDestinationGenerator(), "camel.sample");
+
+        final OpenAPI document = new OpenAPIV3Parser().read(
+                
"src/test/resources/org/apache/camel/generator/openapi/openapi-v3-ref-schema.yaml",
 null, null);
+        final PathItem pathItem = document.getPaths().get("/pet");
+
+        visitor.visit(PathItem.HttpMethod.PUT, pathItem.getPut(), pathItem);
+
+        assertThat(method.build().toString()).isEqualTo("void configure() {\n"
+                                                        + "    
put(\"/path\")\n"
+                                                        + "      
.id(\"updatePet\")\n"
+                                                        + "      
.description(\"Update an existing pet by Id\")\n"
+                                                        + "      
.consumes(\"application/json\")\n"
+                                                        + "      
.produces(\"application/json\")\n"
+                                                        + "      .param()\n"
+                                                        + "        
.name(\"body\")\n"
+                                                        + "        
.type(org.apache.camel.model.rest.RestParamType.body)\n"
+                                                        + "        
.required(true)\n"
+                                                        + "        
.description(\"Update an existent pet in the store\")\n"
+                                                        + "      .endParam()\n"
+                                                        + "      
.type(\"camel.sample.Pet[]\")\n"
+                                                        + "      
.outType(\"camel.sample.Pet[]\")\n"
+                                                        + "      
.to(\"direct:updatePet\")\n"
+                                                        + "    }\n");
+    }
+
     @Test
     public void shouldEmitCodeForOas32ParameterInPath() {
         final Builder method = MethodSpec.methodBuilder("configure");
@@ -62,53 +115,56 @@ public class OperationVisitorTest {
                 = new OperationVisitor<>(
                         emitter, new OperationFilter(), "/path/{param}", new 
DefaultDestinationGenerator(), null);
 
-        final OpenApi20Document document = new OpenApi20DocumentImpl();
-        final OpenApiPaths paths = document.createPaths();
-        final OpenApiPathItem path = paths.createPathItem();
-        paths.addItem("/path/{param}", path);
-        final OpenApiOperation operation = path.createOperation();
-        path.setGet(operation);
-        final OpenApiParameter parameter = new OpenApi20ParameterImpl();
+        final OpenAPI document = new OpenAPI();
+        final Paths paths = new Paths();
+        final PathItem path = new PathItem();
+        paths.addPathItem("/path/{param}", path);
+        final Operation operation = new Operation();
+        final Parameter parameter = new Parameter();
         parameter.setName("param");
         parameter.setIn("path");
-        path.addParameter(parameter);
+        path.addParametersItem(parameter);
+        document.setPaths(paths);
 
-        visitor.visit(HttpMethod.GET, operation);
+        visitor.visit(PathItem.HttpMethod.GET, operation, path);
 
         assertThat(method.build().toString()).isEqualTo("void configure() {\n"
                                                         + "    
get(\"/path/{param}\")\n"
                                                         + "      .param()\n"
                                                         + "        
.name(\"param\")\n"
                                                         + "        
.type(org.apache.camel.model.rest.RestParamType.path)\n"
-                                                        + "        
.required(false)\n"
+                                                        + "        
.required(true)\n"
                                                         + "      .endParam()\n"
                                                         + "      
.to(\"direct:rest1\")\n"
                                                         + "    }\n");
     }
-    /*
+
     @Test
     public void shouldEmitCodeForOas3ParameterInPath() {
         final Builder method = MethodSpec.methodBuilder("configure");
         final MethodBodySourceCodeEmitter emitter = new 
MethodBodySourceCodeEmitter(method);
         final OperationVisitor<?> visitor
-                = new OperationVisitor<>(emitter, new OperationFilter(), 
"/path/{param}", new DefaultDestinationGenerator());
+                = new OperationVisitor<>(
+                        emitter, new OperationFilter(), "/path/{param}", new 
DefaultDestinationGenerator(), null);
 
-        final OpenApi30Document document = new OpenApi30DocumentImpl();
-        final OpenApiPaths paths = (OpenApi30Paths) document.createPaths();
-        final OasPathItem path = paths.addItem("", 
paths.createPathItem("/path/{param}"));
-        final OasOperation operation = path.createOperation("get");
-        final Oas30Parameter parameter = new Oas30Parameter("param");
-        parameter.in = "path";
-        path.addParameter(parameter);
+        final Paths paths = new Paths();
+        final PathItem path = new PathItem();
+        paths.addPathItem("/path/{param}", path);
 
-        visitor.visit(HttpMethod.GET, operation);
+        final Operation operation = new Operation();
+        final Parameter parameter = new Parameter();
+        parameter.setName("param");
+        parameter.setIn("path");
+        path.addParametersItem(parameter);
+
+        visitor.visit(PathItem.HttpMethod.GET, operation, path);
 
         assertThat(method.build().toString()).isEqualTo("void configure() {\n"
                                                         + "    
get(\"/path/{param}\")\n"
                                                         + "      .param()\n"
                                                         + "        
.name(\"param\")\n"
                                                         + "        
.type(org.apache.camel.model.rest.RestParamType.path)\n"
-                                                        + "        
.required(false)\n"
+                                                        + "        
.required(true)\n"
                                                         + "      .endParam()\n"
                                                         + "      
.to(\"direct:rest1\")\n"
                                                         + "    }\n");
@@ -118,12 +174,14 @@ public class OperationVisitorTest {
     public void shouldEmitCodeForOas3ParameterWithDefaultValue() {
         final Builder method = MethodSpec.methodBuilder("configure");
         final MethodBodySourceCodeEmitter emitter = new 
MethodBodySourceCodeEmitter(method);
-        final OperationVisitor<?> visitor = new OperationVisitor<>(emitter, 
null, null, null);
+        final OperationVisitor<?> visitor = new OperationVisitor<>(emitter, 
null, null, null, null);
 
-        final Oas30Parameter parameter = new Oas30Parameter("param");
-        parameter.in = "path";
-        parameter.schema = parameter.createSchema();
-        ((Oas30Schema) parameter.schema).default_ = "default";
+        final Parameter parameter = new Parameter();
+        parameter.setName("param");
+        parameter.setIn("path");
+        Schema schema = new Schema();
+        schema.setDefault("default");
+        parameter.setSchema(schema);
 
         visitor.emit(parameter);
 
@@ -132,7 +190,7 @@ public class OperationVisitorTest {
                                                         + "        
.name(\"param\")\n"
                                                         + "        
.type(org.apache.camel.model.rest.RestParamType.path)\n"
                                                         + "        
.defaultValue(\"default\")\n"
-                                                        + "        
.required(false)\n"
+                                                        + "        
.required(true)\n"
                                                         + "      .endParam()\n"
                                                         + "    }\n");
     }
@@ -141,12 +199,14 @@ public class OperationVisitorTest {
     public void shouldEmitCodeForOas3ParameterWithEnum() {
         final Builder method = MethodSpec.methodBuilder("configure");
         final MethodBodySourceCodeEmitter emitter = new 
MethodBodySourceCodeEmitter(method);
-        final OperationVisitor<?> visitor = new OperationVisitor<>(emitter, 
null, null, null);
+        final OperationVisitor<?> visitor = new OperationVisitor<>(emitter, 
null, null, null, null);
 
-        final Oas30Parameter parameter = new Oas30Parameter("param");
-        parameter.in = "query";
-        parameter.schema = parameter.createSchema();
-        ((Oas30Schema) parameter.schema).enum_ = Arrays.asList("one", "two", 
"three");
+        final Parameter parameter = new Parameter();
+        parameter.setName("param");
+        parameter.setIn("query");
+        Schema schema = new Schema();
+        schema.setEnum(Arrays.asList("one", "two", "three"));
+        parameter.setSchema(schema);
 
         visitor.emit(parameter);
 
@@ -164,12 +224,14 @@ public class OperationVisitorTest {
     public void shouldEmitCodeForOas3ParameterWithType() {
         final Builder method = MethodSpec.methodBuilder("configure");
         final MethodBodySourceCodeEmitter emitter = new 
MethodBodySourceCodeEmitter(method);
-        final OperationVisitor<?> visitor = new OperationVisitor<>(emitter, 
null, null, null);
+        final OperationVisitor<?> visitor = new OperationVisitor<>(emitter, 
null, null, null, null);
 
-        final Oas30Parameter parameter = new Oas30Parameter("param");
-        parameter.in = "query";
-        parameter.schema = parameter.createSchema();
-        ((Oas30Schema) parameter.schema).type = "integer";
+        final Parameter parameter = new Parameter();
+        parameter.setName("param");
+        parameter.setIn("query");
+        Schema schema = new Schema();
+        schema.setType("integer");
+        parameter.setSchema(schema);
 
         visitor.emit(parameter);
 
@@ -187,10 +249,11 @@ public class OperationVisitorTest {
     public void shouldEmitCodeForOas3PathParameter() {
         final Builder method = MethodSpec.methodBuilder("configure");
         final MethodBodySourceCodeEmitter emitter = new 
MethodBodySourceCodeEmitter(method);
-        final OperationVisitor<?> visitor = new OperationVisitor<>(emitter, 
null, null, null);
+        final OperationVisitor<?> visitor = new OperationVisitor<>(emitter, 
null, null, null, null);
 
-        final Oas30Parameter parameter = new Oas30Parameter("param");
-        parameter.in = "path";
+        final Parameter parameter = new Parameter();
+        parameter.setName("param");
+        parameter.setIn("path");
 
         visitor.emit(parameter);
 
@@ -198,7 +261,7 @@ public class OperationVisitorTest {
                                                         + "      param()\n"
                                                         + "        
.name(\"param\")\n"
                                                         + "        
.type(org.apache.camel.model.rest.RestParamType.path)\n"
-                                                        + "        
.required(false)\n"
+                                                        + "        
.required(true)\n"
                                                         + "      .endParam()\n"
                                                         + "    }\n");
     }
@@ -207,17 +270,16 @@ public class OperationVisitorTest {
     public void shouldEmitCodeForOas3RefParameters() {
         final Builder method = MethodSpec.methodBuilder("configure");
         final MethodBodySourceCodeEmitter emitter = new 
MethodBodySourceCodeEmitter(method);
-        final OperationVisitor<?> visitor = new OperationVisitor<>(emitter, 
null, null, null);
-
-        final Oas30Document document = new Oas30Document();
-        document.components = document.createComponents();
-        final Oas30ParameterDefinition parameterDefinition = new 
Oas30ParameterDefinition("param");
-        parameterDefinition.in = "query";
-        document.components.addParameterDefinition("param", 
parameterDefinition);
+        final OperationVisitor<?> visitor = new OperationVisitor<>(emitter, 
null, null, null, null);
 
-        final Oas30Parameter parameter = new Oas30Parameter();
-        parameter._ownerDocument = document;
-        parameter.$ref = "#/components/parameters/param";
+        final Paths paths = new Paths();
+        final PathItem path = new PathItem();
+        paths.addPathItem("/path/{param}", path);
+        final Parameter parameter = new Parameter();
+        parameter.setName("param");
+        parameter.setIn("query");
+        parameter.set$ref("#/components/parameters/param");
+        path.addParametersItem(parameter);
 
         visitor.emit(parameter);
 
@@ -237,18 +299,20 @@ public class OperationVisitorTest {
         final OperationVisitor<?> visitor
                 = new OperationVisitor<>(
                         emitter, new OperationFilter(), "/path/{param}",
-                        new 
DefaultDestinationGenerator("seda:${operationId}"));
+                        new 
DefaultDestinationGenerator("seda:${operationId}"), null);
 
-        final Oas30Document document = new Oas30Document();
-        final OasPaths paths = document.createPaths();
-        final OasPathItem path = paths.addPathItem("", 
paths.createPathItem("/path/{param}"));
-        final OasOperation operation = path.createOperation("get");
-        operation.operationId = "my-operation";
-        final Oas30Parameter parameter = new Oas30Parameter("param");
-        parameter.in = "path";
-        path.addParameter(parameter);
+        final Paths paths = new Paths();
+        final PathItem pathItem = new PathItem();
+        paths.addPathItem("/path/{param}", pathItem);
 
-        visitor.visit(HttpMethod.GET, operation);
+        final Operation operation = new Operation();
+        operation.setOperationId("my-operation");
+        final Parameter parameter = new Parameter();
+        parameter.setName("param");
+        parameter.setIn("path");
+        pathItem.addParametersItem(parameter);
+
+        visitor.visit(PathItem.HttpMethod.GET, operation, pathItem);
 
         assertThat(method.build().toString()).isEqualTo("void configure() {\n"
                                                         + "    
get(\"/path/{param}\")\n"
@@ -256,10 +320,9 @@ public class OperationVisitorTest {
                                                         + "      .param()\n"
                                                         + "        
.name(\"param\")\n"
                                                         + "        
.type(org.apache.camel.model.rest.RestParamType.path)\n"
-                                                        + "        
.required(false)\n"
+                                                        + "        
.required(true)\n"
                                                         + "      .endParam()\n"
                                                         + "      
.to(\"seda:my-operation\")\n"
                                                         + "    }\n");
     }
-    */
 }
diff --git 
a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslGeneratorV3Test.java
 
b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslGeneratorV3Test.java
index 08946dd472c..1a73f8fa9db 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslGeneratorV3Test.java
+++ 
b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslGeneratorV3Test.java
@@ -16,19 +16,17 @@
  */
 package org.apache.camel.generator.openapi;
 
-import java.io.InputStream;
 import java.net.URI;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.time.Instant;
 
-import io.apicurio.datamodels.Library;
-import io.apicurio.datamodels.models.openapi.v30.OpenApi30Document;
+import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.parser.OpenAPIV3Parser;
 import org.apache.camel.CamelContext;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.model.rest.RestsDefinition;
-import org.apache.camel.util.IOHelper;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 
@@ -36,7 +34,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 
 public class RestDslGeneratorV3Test {
 
-    static OpenApi30Document document;
+    static OpenAPI document;
 
     final Instant generated = Instant.parse("2017-10-17T00:00:00.000Z");
 
@@ -118,9 +116,6 @@ public class RestDslGeneratorV3Test {
 
     @BeforeAll
     public static void readOpenApiDoc() throws Exception {
-        try (InputStream is = 
RestDslXmlGeneratorV3Test.class.getResourceAsStream("openapi-spec.json")) {
-            String json = IOHelper.loadText(is);
-            document = (OpenApi30Document) 
Library.readDocumentFromJSONString(json);
-        }
+        document = new 
OpenAPIV3Parser().read("src/test/resources/org/apache/camel/generator/openapi/openapi-spec.json");
     }
 }
diff --git 
a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslSourceCodeGeneratorTest.java
 
b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslSourceCodeGeneratorTest.java
index ebf8b52e64f..51813809015 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslSourceCodeGeneratorTest.java
+++ 
b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslSourceCodeGeneratorTest.java
@@ -16,10 +16,9 @@
  */
 package org.apache.camel.generator.openapi;
 
-import io.apicurio.datamodels.models.openapi.v20.OpenApi20Document;
-import io.apicurio.datamodels.models.openapi.v20.OpenApi20DocumentImpl;
-import io.apicurio.datamodels.models.openapi.v20.OpenApi20Info;
-import io.apicurio.datamodels.models.openapi.v20.OpenApi20InfoImpl;
+import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.oas.models.info.Info;
+import io.swagger.v3.oas.models.servers.Server;
 import org.junit.jupiter.api.Test;
 
 import static org.assertj.core.api.Assertions.assertThat;
@@ -28,24 +27,28 @@ public class RestDslSourceCodeGeneratorTest {
 
     @Test
     public void shouldCreatePackageNamesFromHostnames() {
-        final OpenApi20Document openapi = new OpenApi20DocumentImpl();
-        openapi.setHost("api.example.org");
+        final OpenAPI openapi = new OpenAPI();
+        Server server = new Server();
+        server.url("http://api.example.org";);
+        openapi.addServersItem(server);
 
         
assertThat(RestDslSourceCodeGenerator.generatePackageName(openapi)).isEqualTo("org.example.api");
     }
 
     @Test
     public void shouldCreatePackageNamesFromHostnamesWithPorts() {
-        final OpenApi20Document openapi = new OpenApi20DocumentImpl();
-        openapi.setHost("api.example.org:8080");
+        final OpenAPI openapi = new OpenAPI();
+        Server server = new Server();
+        server.url("http://api.example.org:8080";);
+        openapi.addServersItem(server);
 
         
assertThat(RestDslSourceCodeGenerator.generatePackageName(openapi)).isEqualTo("org.example.api");
     }
 
     @Test
     public void shouldGenerateClassNameFromTitle() {
-        final OpenApi20Document openapi = new OpenApi20DocumentImpl();
-        final OpenApi20Info info = new OpenApi20InfoImpl();
+        final OpenAPI openapi = new OpenAPI();
+        final Info info = new Info();
         info.setTitle("Example API");
         openapi.setInfo(info);
         
assertThat(RestDslSourceCodeGenerator.generateClassName(openapi)).isEqualTo("ExampleAPI");
@@ -53,8 +56,8 @@ public class RestDslSourceCodeGeneratorTest {
 
     @Test
     public void shouldGenerateClassNameFromTitleWithNonValidJavaIdentifiers() {
-        final OpenApi20Document openapi = new OpenApi20DocumentImpl();
-        final OpenApi20Info info = new OpenApi20InfoImpl();
+        final OpenAPI openapi = new OpenAPI();
+        final Info info = new Info();
         info.setTitle("Example-API 2.0");
         openapi.setInfo(info);
         
assertThat(RestDslSourceCodeGenerator.generateClassName(openapi)).isEqualTo("ExampleAPI20");
@@ -62,20 +65,20 @@ public class RestDslSourceCodeGeneratorTest {
 
     @Test
     public void shouldUseDefaultClassNameIfInfoOrTitleIsNotPresent() {
-        final OpenApi20Document openapi = new OpenApi20DocumentImpl();
+        final OpenAPI openapi = new OpenAPI();
 
         assertThat(RestDslSourceCodeGenerator.generateClassName(openapi))
                 .isEqualTo(RestDslSourceCodeGenerator.DEFAULT_CLASS_NAME);
 
-        openapi.setInfo(new OpenApi20InfoImpl());
+        openapi.setInfo(new Info());
         assertThat(RestDslSourceCodeGenerator.generateClassName(openapi))
                 .isEqualTo(RestDslSourceCodeGenerator.DEFAULT_CLASS_NAME);
     }
 
     @Test
     public void 
shouldUseDefaultClassNameIfTitleContainsOnlyNonValidJavaIdentifiers() {
-        final OpenApi20Document openapi = new OpenApi20DocumentImpl();
-        final OpenApi20Info info = new OpenApi20InfoImpl();
+        final OpenAPI openapi = new OpenAPI();
+        final Info info = new Info();
         info.setTitle("\\%/4");
         openapi.setInfo(info);
 
@@ -85,8 +88,10 @@ public class RestDslSourceCodeGeneratorTest {
 
     @Test
     public void shouldUseDefaultPackageNameForLocalhost() {
-        final OpenApi20Document openapi = new OpenApi20DocumentImpl();
-        openapi.setHost("localhost");
+        final OpenAPI openapi = new OpenAPI();
+        Server server = new Server();
+        server.url("http://localhost";);
+        openapi.addServersItem(server);
 
         assertThat(RestDslSourceCodeGenerator.generatePackageName(openapi))
                 .isEqualTo(RestDslSourceCodeGenerator.DEFAULT_PACKAGE_NAME);
@@ -94,8 +99,10 @@ public class RestDslSourceCodeGeneratorTest {
 
     @Test
     public void shouldUseDefaultPackageNameForLocalhostWithPort() {
-        final OpenApi20Document openapi = new OpenApi20DocumentImpl();
-        openapi.setHost("localhost:8080");
+        final OpenAPI openapi = new OpenAPI();
+        Server server = new Server();
+        server.url("http://localhost:8080";);
+        openapi.addServersItem(server);
 
         assertThat(RestDslSourceCodeGenerator.generatePackageName(openapi))
                 .isEqualTo(RestDslSourceCodeGenerator.DEFAULT_PACKAGE_NAME);
@@ -103,7 +110,7 @@ public class RestDslSourceCodeGeneratorTest {
 
     @Test
     public void shouldUseDefaultPackageNameIfNoHostIsSpecified() {
-        final OpenApi20Document openapi = new OpenApi20DocumentImpl();
+        final OpenAPI openapi = new OpenAPI();
 
         assertThat(RestDslSourceCodeGenerator.generatePackageName(openapi))
                 .isEqualTo(RestDslSourceCodeGenerator.DEFAULT_PACKAGE_NAME);
diff --git 
a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslSourceCodeGeneratorV3Test.java
 
b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslSourceCodeGeneratorV3Test.java
index fb333708858..50495be435f 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslSourceCodeGeneratorV3Test.java
+++ 
b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslSourceCodeGeneratorV3Test.java
@@ -16,12 +16,9 @@
  */
 package org.apache.camel.generator.openapi;
 
-import io.apicurio.datamodels.models.openapi.v30.OpenApi30Document;
-import io.apicurio.datamodels.models.openapi.v30.OpenApi30DocumentImpl;
-import io.apicurio.datamodels.models.openapi.v30.OpenApi30Info;
-import io.apicurio.datamodels.models.openapi.v30.OpenApi30InfoImpl;
-import io.apicurio.datamodels.models.openapi.v30.OpenApi30Server;
-import io.apicurio.datamodels.models.openapi.v30.OpenApi30ServerImpl;
+import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.oas.models.info.Info;
+import io.swagger.v3.oas.models.servers.Server;
 import org.junit.jupiter.api.Test;
 
 import static org.assertj.core.api.Assertions.assertThat;
@@ -30,30 +27,30 @@ public class RestDslSourceCodeGeneratorV3Test {
 
     @Test
     public void shouldCreatePackageNamesFromHostnames() {
-        final OpenApi30Document openapi = new OpenApi30DocumentImpl();
-        OpenApi30Server server = new OpenApi30ServerImpl();
+        final OpenAPI openapi = new OpenAPI();
+        Server server = new Server();
         server.setUrl("http://api.example.org/";);
         server.setDescription("test server url");
-        openapi.addServer(server);
+        openapi.addServersItem(server);
 
         
assertThat(RestDslSourceCodeGenerator.generatePackageName(openapi)).isEqualTo("org.example.api");
     }
 
     @Test
     public void shouldCreatePackageNamesFromHostnamesWithPorts() {
-        final OpenApi30Document openapi = new OpenApi30DocumentImpl();
-        OpenApi30Server server = new OpenApi30ServerImpl();
+        final OpenAPI openapi = new OpenAPI();
+        Server server = new Server();
         server.setUrl("http://api.example.org:8080/";);
         server.setDescription("test server url");
-        openapi.addServer(server);
+        openapi.addServersItem(server);
 
         
assertThat(RestDslSourceCodeGenerator.generatePackageName(openapi)).isEqualTo("org.example.api");
     }
 
     @Test
     public void shouldGenerateClassNameFromTitle() {
-        final OpenApi30Document openapi = new OpenApi30DocumentImpl();
-        final OpenApi30Info info = new OpenApi30InfoImpl();
+        final OpenAPI openapi = new OpenAPI();
+        final Info info = new Info();
         info.setTitle("Example API");
         openapi.setInfo(info);
 
@@ -62,8 +59,8 @@ public class RestDslSourceCodeGeneratorV3Test {
 
     @Test
     public void shouldGenerateClassNameFromTitleWithNonValidJavaIdentifiers() {
-        final OpenApi30Document openapi = new OpenApi30DocumentImpl();
-        final OpenApi30Info info = new OpenApi30InfoImpl();
+        final OpenAPI openapi = new OpenAPI();
+        final Info info = new Info();
         info.setTitle("Example-API 2.0");
         openapi.setInfo(info);
 
@@ -72,20 +69,20 @@ public class RestDslSourceCodeGeneratorV3Test {
 
     @Test
     public void shouldUseDefaultClassNameIfInfoOrTitleIsNotPresent() {
-        final OpenApi30Document openapi = new OpenApi30DocumentImpl();
+        final OpenAPI openapi = new OpenAPI();
 
         assertThat(RestDslSourceCodeGenerator.generateClassName(openapi))
                 .isEqualTo(RestDslSourceCodeGenerator.DEFAULT_CLASS_NAME);
 
-        openapi.setInfo(new OpenApi30InfoImpl());
+        openapi.setInfo(new Info());
         assertThat(RestDslSourceCodeGenerator.generateClassName(openapi))
                 .isEqualTo(RestDslSourceCodeGenerator.DEFAULT_CLASS_NAME);
     }
 
     @Test
     public void 
shouldUseDefaultClassNameIfTitleContainsOnlyNonValidJavaIdentifiers() {
-        final OpenApi30Document openapi = new OpenApi30DocumentImpl();
-        final OpenApi30Info info = new OpenApi30InfoImpl();
+        final OpenAPI openapi = new OpenAPI();
+        final Info info = new Info();
         info.setTitle("\\%/4");
         openapi.setInfo(info);
 
@@ -95,11 +92,11 @@ public class RestDslSourceCodeGeneratorV3Test {
 
     @Test
     public void shouldUseDefaultPackageNameForLocalhost() {
-        final OpenApi30Document openapi = new OpenApi30DocumentImpl();
-        OpenApi30Server server = new OpenApi30ServerImpl();
+        final OpenAPI openapi = new OpenAPI();
+        Server server = new Server();
         server.setUrl("http://localhost";);
         server.setDescription("test server url");
-        openapi.addServer(server);
+        openapi.addServersItem(server);
 
         assertThat(RestDslSourceCodeGenerator.generatePackageName(openapi))
                 .isEqualTo(RestDslSourceCodeGenerator.DEFAULT_PACKAGE_NAME);
@@ -107,11 +104,11 @@ public class RestDslSourceCodeGeneratorV3Test {
 
     @Test
     public void shouldUseDefaultPackageNameForLocalhostWithPort() {
-        final OpenApi30Document openapi = new OpenApi30DocumentImpl();
-        OpenApi30Server server = new OpenApi30ServerImpl();
+        final OpenAPI openapi = new OpenAPI();
+        Server server = new Server();
         server.setUrl("http://localhost:8080";);
         server.setDescription("test server url");
-        openapi.addServer(server);
+        openapi.addServersItem(server);
 
         assertThat(RestDslSourceCodeGenerator.generatePackageName(openapi))
                 .isEqualTo(RestDslSourceCodeGenerator.DEFAULT_PACKAGE_NAME);
@@ -119,7 +116,7 @@ public class RestDslSourceCodeGeneratorV3Test {
 
     @Test
     public void shouldUseDefaultPackageNameIfNoHostIsSpecified() {
-        final OpenApi30Document openapi = new OpenApi30DocumentImpl();
+        final OpenAPI openapi = new OpenAPI();
 
         assertThat(RestDslSourceCodeGenerator.generatePackageName(openapi))
                 .isEqualTo(RestDslSourceCodeGenerator.DEFAULT_PACKAGE_NAME);
diff --git 
a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslXmlGeneratorV3SimpleTest.java
 
b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslXmlGeneratorV3SimpleTest.java
index 2e227c2ea45..7e412c5746e 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslXmlGeneratorV3SimpleTest.java
+++ 
b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslXmlGeneratorV3SimpleTest.java
@@ -16,18 +16,15 @@
  */
 package org.apache.camel.generator.openapi;
 
-import java.io.InputStream;
 import java.net.URI;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 
-import io.apicurio.datamodels.Library;
-import io.apicurio.datamodels.models.openapi.OpenApiDocument;
-import io.apicurio.datamodels.models.openapi.v30.OpenApi30Document;
+import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.parser.OpenAPIV3Parser;
 import org.apache.camel.CamelContext;
 import org.apache.camel.impl.DefaultCamelContext;
-import org.apache.camel.util.IOHelper;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 
@@ -35,14 +32,11 @@ import static org.assertj.core.api.Assertions.assertThat;
 
 public class RestDslXmlGeneratorV3SimpleTest {
 
-    static OpenApiDocument document;
+    static OpenAPI document;
 
     @BeforeAll
     public static void readOpenApiDoc() throws Exception {
-        try (InputStream is = 
RestDslXmlGeneratorV3SimpleTest.class.getResourceAsStream("openapi-spec-simple.json"))
 {
-            String json = IOHelper.loadText(is);
-            document = (OpenApi30Document) 
Library.readDocumentFromJSONString(json);
-        }
+        document = new 
OpenAPIV3Parser().read("src/test/resources/org/apache/camel/generator/openapi/openapi-spec-simple.json");
     }
 
     @Test
diff --git 
a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslXmlGeneratorV3Test.java
 
b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslXmlGeneratorV3Test.java
index 7fba47ada33..78573d04be6 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslXmlGeneratorV3Test.java
+++ 
b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslXmlGeneratorV3Test.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.generator.openapi;
 
-import java.io.InputStream;
 import java.io.StringReader;
 import java.net.URI;
 import java.nio.charset.StandardCharsets;
@@ -30,11 +29,10 @@ import org.w3c.dom.Document;
 
 import org.xml.sax.InputSource;
 
-import io.apicurio.datamodels.Library;
-import io.apicurio.datamodels.models.openapi.OpenApiDocument;
+import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.parser.OpenAPIV3Parser;
 import org.apache.camel.CamelContext;
 import org.apache.camel.impl.DefaultCamelContext;
-import org.apache.camel.util.IOHelper;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 
@@ -42,7 +40,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 
 public class RestDslXmlGeneratorV3Test {
 
-    static OpenApiDocument document;
+    static OpenAPI document;
 
     @Test
     public void shouldGenerateBlueprintXml() throws Exception {
@@ -104,10 +102,7 @@ public class RestDslXmlGeneratorV3Test {
 
     @BeforeAll
     public static void readOpenApiDoc() throws Exception {
-        try (InputStream is = 
RestDslXmlGeneratorV3Test.class.getResourceAsStream("openapi-spec.json")) {
-            String json = IOHelper.loadText(is);
-            document = (OpenApiDocument) 
Library.readDocumentFromJSONString(json);
-        }
+        document = new 
OpenAPIV3Parser().read("src/test/resources/org/apache/camel/generator/openapi/openapi-spec.json");
     }
 
 }
diff --git 
a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslYamlGeneratorV302Test.java
 
b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslYamlGeneratorV302Test.java
index 8171bfa21a2..485f4e0b980 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslYamlGeneratorV302Test.java
+++ 
b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslYamlGeneratorV302Test.java
@@ -16,17 +16,13 @@
  */
 package org.apache.camel.generator.openapi;
 
-import java.io.InputStream;
 import java.net.URI;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.fasterxml.jackson.dataformat.yaml.YAMLMapper;
-import io.apicurio.datamodels.Library;
-import io.apicurio.datamodels.models.openapi.OpenApiDocument;
+import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.parser.OpenAPIV3Parser;
 import org.apache.camel.CamelContext;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.junit.jupiter.api.BeforeAll;
@@ -36,7 +32,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 
 public class RestDslYamlGeneratorV302Test {
 
-    static OpenApiDocument document;
+    static OpenAPI document;
 
     @Test
     public void shouldGenerateYamlWithAllowedValues() throws Exception {
@@ -52,11 +48,7 @@ public class RestDslYamlGeneratorV302Test {
 
     @BeforeAll
     public static void readOpenApiDoc() throws Exception {
-        final ObjectMapper mapper = new YAMLMapper();
-        try (InputStream is = 
RestDslYamlGeneratorV302Test.class.getResourceAsStream("petstore-v3.yaml")) {
-            final ObjectNode node = (ObjectNode) mapper.readTree(is);
-            document = (OpenApiDocument) Library.readDocument(node);
-        }
+        document = new 
OpenAPIV3Parser().read("src/test/resources/org/apache/camel/generator/openapi/petstore-v3.yaml");
     }
 
 }
diff --git 
a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslYamlGeneratorV31Test.java
 
b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslYamlGeneratorV31Test.java
index cda595ed47f..2295c56b653 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslYamlGeneratorV31Test.java
+++ 
b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslYamlGeneratorV31Test.java
@@ -16,17 +16,15 @@
  */
 package org.apache.camel.generator.openapi;
 
-import java.io.InputStream;
 import java.net.URI;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 
-import io.apicurio.datamodels.Library;
-import io.apicurio.datamodels.models.openapi.OpenApiDocument;
+import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.parser.OpenAPIV3Parser;
 import org.apache.camel.CamelContext;
 import org.apache.camel.impl.DefaultCamelContext;
-import org.apache.camel.util.IOHelper;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 
@@ -34,7 +32,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 
 public class RestDslYamlGeneratorV31Test {
 
-    static OpenApiDocument document;
+    static OpenAPI document;
 
     @Test
     public void shouldGenerateYamlWithDefaults() throws Exception {
@@ -50,10 +48,7 @@ public class RestDslYamlGeneratorV31Test {
 
     @BeforeAll
     public static void readOpenApiDoc() throws Exception {
-        try (InputStream is = 
RestDslYamlGeneratorV31Test.class.getResourceAsStream("AccountService-v6.json"))
 {
-            String json = IOHelper.loadText(is);
-            document = (OpenApiDocument) 
Library.readDocumentFromJSONString(json);
-        }
+        document = new 
OpenAPIV3Parser().read("src/test/resources/org/apache/camel/generator/openapi/AccountService-v6.json");
     }
 
 }
diff --git 
a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslYamlGeneratorV3SimpleTest.java
 
b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslYamlGeneratorV3SimpleTest.java
index 199e63a2102..a5449b32fb8 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslYamlGeneratorV3SimpleTest.java
+++ 
b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslYamlGeneratorV3SimpleTest.java
@@ -16,17 +16,15 @@
  */
 package org.apache.camel.generator.openapi;
 
-import java.io.InputStream;
 import java.net.URI;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 
-import io.apicurio.datamodels.Library;
-import io.apicurio.datamodels.models.openapi.OpenApiDocument;
+import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.parser.OpenAPIV3Parser;
 import org.apache.camel.CamelContext;
 import org.apache.camel.impl.DefaultCamelContext;
-import org.apache.camel.util.IOHelper;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 
@@ -34,14 +32,11 @@ import static org.assertj.core.api.Assertions.assertThat;
 
 public class RestDslYamlGeneratorV3SimpleTest {
 
-    static OpenApiDocument document;
+    static OpenAPI document;
 
     @BeforeAll
     public static void readOpenApiDoc() throws Exception {
-        try (InputStream is = 
RestDslYamlGeneratorV3SimpleTest.class.getResourceAsStream("openapi-spec-simple.json"))
 {
-            String json = IOHelper.loadText(is);
-            document = (OpenApiDocument) 
Library.readDocumentFromJSONString(json);
-        }
+        document = new 
OpenAPIV3Parser().read("src/test/resources/org/apache/camel/generator/openapi/openapi-spec-simple.json");
     }
 
     @Test
diff --git 
a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslYamlGeneratorV3SimpleWithRoutesDescriptionTest.java
 
b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslYamlGeneratorV3SimpleWithRoutesDescriptionTest.java
index 698fcbebee2..d8d0dcdacfe 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslYamlGeneratorV3SimpleWithRoutesDescriptionTest.java
+++ 
b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslYamlGeneratorV3SimpleWithRoutesDescriptionTest.java
@@ -16,17 +16,15 @@
  */
 package org.apache.camel.generator.openapi;
 
-import java.io.InputStream;
 import java.net.URI;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 
-import io.apicurio.datamodels.Library;
-import io.apicurio.datamodels.models.openapi.OpenApiDocument;
+import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.parser.OpenAPIV3Parser;
 import org.apache.camel.CamelContext;
 import org.apache.camel.impl.DefaultCamelContext;
-import org.apache.camel.util.IOHelper;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 
@@ -34,16 +32,12 @@ import static org.assertj.core.api.Assertions.assertThat;
 
 public class RestDslYamlGeneratorV3SimpleWithRoutesDescriptionTest {
 
-    static OpenApiDocument document;
+    static OpenAPI document;
 
     @BeforeAll
     public static void readOpenApiDoc() throws Exception {
-        try (InputStream is
-                = RestDslYamlGeneratorV3SimpleWithRoutesDescriptionTest.class
-                        .getResourceAsStream("openapi-spec-description.json")) 
{
-            String json = IOHelper.loadText(is);
-            document = (OpenApiDocument) 
Library.readDocumentFromJSONString(json);
-        }
+        document = new OpenAPIV3Parser()
+                
.read("src/test/resources/org/apache/camel/generator/openapi/openapi-spec-description.json");
     }
 
     @Test
diff --git 
a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslYamlGeneratorV3SimpleWithRoutesTest.java
 
b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslYamlGeneratorV3SimpleWithRoutesTest.java
index 123d6cd24a0..8ba98f1449d 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslYamlGeneratorV3SimpleWithRoutesTest.java
+++ 
b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslYamlGeneratorV3SimpleWithRoutesTest.java
@@ -16,17 +16,15 @@
  */
 package org.apache.camel.generator.openapi;
 
-import java.io.InputStream;
 import java.net.URI;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 
-import io.apicurio.datamodels.Library;
-import io.apicurio.datamodels.models.openapi.OpenApiDocument;
+import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.parser.OpenAPIV3Parser;
 import org.apache.camel.CamelContext;
 import org.apache.camel.impl.DefaultCamelContext;
-import org.apache.camel.util.IOHelper;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 
@@ -34,15 +32,11 @@ import static org.assertj.core.api.Assertions.assertThat;
 
 public class RestDslYamlGeneratorV3SimpleWithRoutesTest {
 
-    static OpenApiDocument document;
+    static OpenAPI document;
 
     @BeforeAll
     public static void readOpenApiDoc() throws Exception {
-        try (InputStream is
-                = 
RestDslYamlGeneratorV3SimpleWithRoutesTest.class.getResourceAsStream("openapi-spec-simple.json"))
 {
-            String json = IOHelper.loadText(is);
-            document = (OpenApiDocument) 
Library.readDocumentFromJSONString(json);
-        }
+        document = new 
OpenAPIV3Parser().read("src/test/resources/org/apache/camel/generator/openapi/openapi-spec-simple.json");
     }
 
     @Test
diff --git 
a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslYamlGeneratorV3Test.java
 
b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslYamlGeneratorV3Test.java
index 97d5beb24d5..059fdfd1a45 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslYamlGeneratorV3Test.java
+++ 
b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslYamlGeneratorV3Test.java
@@ -16,17 +16,15 @@
  */
 package org.apache.camel.generator.openapi;
 
-import java.io.InputStream;
 import java.net.URI;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 
-import io.apicurio.datamodels.Library;
-import io.apicurio.datamodels.models.openapi.OpenApiDocument;
+import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.parser.OpenAPIV3Parser;
 import org.apache.camel.CamelContext;
 import org.apache.camel.impl.DefaultCamelContext;
-import org.apache.camel.util.IOHelper;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 
@@ -34,7 +32,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 
 public class RestDslYamlGeneratorV3Test {
 
-    static OpenApiDocument document;
+    static OpenAPI document;
 
     @Test
     public void shouldGenerateYamlWithDefaults() throws Exception {
@@ -78,10 +76,7 @@ public class RestDslYamlGeneratorV3Test {
 
     @BeforeAll
     public static void readOpenApiDoc() throws Exception {
-        try (InputStream is = 
RestDslYamlGeneratorV3Test.class.getResourceAsStream("openapi-spec.json")) {
-            String json = IOHelper.loadText(is);
-            document = (OpenApiDocument) 
Library.readDocumentFromJSONString(json);
-        }
+        document = new 
OpenAPIV3Parser().read("src/test/resources/org/apache/camel/generator/openapi/openapi-spec.json");
     }
 
 }
diff --git 
a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslYamlGreetingsTest.java
 
b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslYamlGreetingsTest.java
index 7bfb867eb57..f5090e8ed83 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslYamlGreetingsTest.java
+++ 
b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslYamlGreetingsTest.java
@@ -16,17 +16,15 @@
  */
 package org.apache.camel.generator.openapi;
 
-import java.io.InputStream;
 import java.net.URI;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 
-import io.apicurio.datamodels.Library;
-import io.apicurio.datamodels.models.openapi.OpenApiDocument;
+import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.parser.OpenAPIV3Parser;
 import org.apache.camel.CamelContext;
 import org.apache.camel.impl.DefaultCamelContext;
-import org.apache.camel.util.IOHelper;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 
@@ -34,14 +32,11 @@ import static org.assertj.core.api.Assertions.assertThat;
 
 public class RestDslYamlGreetingsTest {
 
-    static OpenApiDocument document;
+    static OpenAPI document;
 
     @BeforeAll
     public static void readOpenApiDoc() throws Exception {
-        try (InputStream is = 
RestDslYamlGreetingsTest.class.getResourceAsStream("greetings-spec.json")) {
-            String json = IOHelper.loadText(is);
-            document = (OpenApiDocument) 
Library.readDocumentFromJSONString(json);
-        }
+        document = new 
OpenAPIV3Parser().read("src/test/resources/org/apache/camel/generator/openapi/greetings-spec.yaml");
     }
 
     @Test
diff --git 
a/tooling/openapi-rest-dsl-generator/src/test/resources/GreetingsYaml.txt 
b/tooling/openapi-rest-dsl-generator/src/test/resources/GreetingsYaml.txt
index 05fde69f8a5..39c112de70f 100644
--- a/tooling/openapi-rest-dsl-generator/src/test/resources/GreetingsYaml.txt
+++ b/tooling/openapi-rest-dsl-generator/src/test/resources/GreetingsYaml.txt
@@ -3,6 +3,7 @@
     get:
     - id: "greeting-api"
       path: "/greetings/{name}"
+      produces: "*/*"
       param:
       - dataType: "string"
         name: "name"
@@ -12,6 +13,7 @@
     post:
     - id: "post-greeting-api"
       path: "/greetings/{name}"
+      produces: "*/*"
       param:
       - dataType: "string"
         name: "name"
@@ -20,6 +22,7 @@
       to: "direct:post-greeting-api"
     - id: "bye-api"
       path: "/bye/{name}"
+      produces: "*/*"
       param:
       - dataType: "string"
         name: "name"
diff --git 
a/tooling/openapi-rest-dsl-generator/src/test/resources/MyRestRouteV3.txt 
b/tooling/openapi-rest-dsl-generator/src/test/resources/MyRestRouteV3.txt
index e51ebbdd43f..5fcde7dd719 100644
--- a/tooling/openapi-rest-dsl-generator/src/test/resources/MyRestRouteV3.txt
+++ b/tooling/openapi-rest-dsl-generator/src/test/resources/MyRestRouteV3.txt
@@ -36,6 +36,7 @@ public final class MyRestRoute extends RouteBuilder {
                                        .name("verbose")
                                        .type(RestParamType.query)
                                        .dataType("boolean")
+                                       
.collectionFormat(CollectionFormat.multi)
                                        .defaultValue("false")
                                        .required(false)
                                        .description("Verbose data")
@@ -253,6 +254,7 @@ public final class MyRestRoute extends RouteBuilder {
                                        .name("username")
                                        .type(RestParamType.query)
                                        .dataType("string")
+                                       
.collectionFormat(CollectionFormat.multi)
                                        .required(true)
                                        .description("The user name for login")
                                .endParam()
@@ -260,6 +262,7 @@ public final class MyRestRoute extends RouteBuilder {
                                        .name("password")
                                        .type(RestParamType.query)
                                        .dataType("string")
+                                       
.collectionFormat(CollectionFormat.multi)
                                        .required(true)
                                        .description("The password for login in 
clear text")
                                .endParam()
diff --git 
a/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiV302PetstoreYaml.txt
 
b/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiV302PetstoreYaml.txt
index cf64df35254..7a44e63e206 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiV302PetstoreYaml.txt
+++ 
b/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiV302PetstoreYaml.txt
@@ -47,12 +47,14 @@
         name: "petId"
         required: true
         type: "path"
-      - dataType: "string"
+      - collectionFormat: "multi"
+        dataType: "string"
         description: "Name of pet that needs to be updated"
         name: "name"
         required: false
         type: "query"
-      - dataType: "string"
+      - collectionFormat: "multi"
+        dataType: "string"
         description: "Status of pet that needs to be updated"
         name: "status"
         required: false
@@ -68,7 +70,8 @@
         name: "petId"
         required: true
         type: "path"
-      - dataType: "string"
+      - collectionFormat: "multi"
+        dataType: "string"
         description: "Additional Metadata"
         name: "additionalMetadata"
         required: false
@@ -114,7 +117,8 @@
       description: "Multiple status values can be provided with comma 
separated strings"
       produces: "application/xml,application/json"
       param:
-      - dataType: "string"
+      - collectionFormat: "multi"
+        dataType: "string"
         defaultValue: "available"
         description: "Status values that need to be considered for filter"
         name: "status"
@@ -132,6 +136,7 @@
       produces: "application/xml,application/json"
       param:
       - arrayType: "string"
+        collectionFormat: "multi"
         dataType: "array"
         description: "Tags to filter by"
         name: "tags"
@@ -170,12 +175,14 @@
       path: "/user/login"
       produces: "application/xml,application/json"
       param:
-      - dataType: "string"
+      - collectionFormat: "multi"
+        dataType: "string"
         description: "The user name for login"
         name: "username"
         required: false
         type: "query"
-      - dataType: "string"
+      - collectionFormat: "multi"
+        dataType: "string"
         description: "The password for login in clear text"
         name: "password"
         required: false
diff --git 
a/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiV3Petstore.txt 
b/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiV3Petstore.txt
index 6b9f3976bd2..fec7299c5f6 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiV3Petstore.txt
+++ 
b/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiV3Petstore.txt
@@ -33,6 +33,7 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .name("verbose")
                     .type(RestParamType.query)
                     .dataType("boolean")
+                    .collectionFormat(CollectionFormat.multi)
                     .defaultValue("false")
                     .required(false)
                     .description("Verbose data")
@@ -250,6 +251,7 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .name("username")
                     .type(RestParamType.query)
                     .dataType("string")
+                    .collectionFormat(CollectionFormat.multi)
                     .required(true)
                     .description("The user name for login")
                 .endParam()
@@ -257,6 +259,7 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .name("password")
                     .type(RestParamType.query)
                     .dataType("string")
+                    .collectionFormat(CollectionFormat.multi)
                     .required(true)
                     .description("The password for login in clear text")
                 .endParam()
diff --git 
a/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiV3PetstoreWithModelYaml.txt
 
b/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiV3PetstoreWithModelYaml.txt
index 8c3052f2cf1..11cd406ea43 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiV3PetstoreWithModelYaml.txt
+++ 
b/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiV3PetstoreWithModelYaml.txt
@@ -33,7 +33,8 @@
       consumes: "application/json,application/xml"
       type: "model.Pet"
       param:
-      - dataType: "boolean"
+      - collectionFormat: "multi"
+        dataType: "boolean"
         defaultValue: "false"
         description: "Verbose data"
         name: "verbose"
@@ -193,12 +194,14 @@
       path: "/user/login"
       produces: "application/xml,application/json"
       param:
-      - dataType: "string"
+      - collectionFormat: "multi"
+        dataType: "string"
         description: "The user name for login"
         name: "username"
         required: true
         type: "query"
-      - dataType: "string"
+      - collectionFormat: "multi"
+        dataType: "string"
         description: "The password for login in clear text"
         name: "password"
         required: true
diff --git 
a/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiV3PetstoreWithRestComponent.txt
 
b/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiV3PetstoreWithRestComponent.txt
index 2b2faf44b2a..21626a4669d 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiV3PetstoreWithRestComponent.txt
+++ 
b/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiV3PetstoreWithRestComponent.txt
@@ -35,6 +35,7 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .name("verbose")
                     .type(RestParamType.query)
                     .dataType("boolean")
+                    .collectionFormat(CollectionFormat.multi)
                     .defaultValue("false")
                     .required(false)
                     .description("Verbose data")
@@ -252,6 +253,7 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .name("username")
                     .type(RestParamType.query)
                     .dataType("string")
+                    .collectionFormat(CollectionFormat.multi)
                     .required(true)
                     .description("The user name for login")
                 .endParam()
@@ -259,6 +261,7 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .name("password")
                     .type(RestParamType.query)
                     .dataType("string")
+                    .collectionFormat(CollectionFormat.multi)
                     .required(true)
                     .description("The password for login in clear text")
                 .endParam()
diff --git 
a/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiV3PetstoreWithRestComponentXml.txt
 
b/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiV3PetstoreWithRestComponentXml.txt
index 457df54e7e1..06a0f0225bb 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiV3PetstoreWithRestComponentXml.txt
+++ 
b/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiV3PetstoreWithRestComponentXml.txt
@@ -5,7 +5,7 @@
             <to uri="direct:updatePet"/>
         </put>
         <post consumes="application/json,application/xml" id="addPet" 
path="/pet">
-            <param dataType="boolean" defaultValue="false" 
description="Verbose data" name="verbose" required="false" type="query"/>
+            <param collectionFormat="multi" dataType="boolean" 
defaultValue="false" description="Verbose data" name="verbose" required="false" 
type="query"/>
             <param description="Pet object that needs to be added to the 
store" name="body" required="true" type="body"/>
             <to uri="direct:addPet"/>
         </post>
@@ -66,8 +66,8 @@
             <to uri="direct:createUsersWithListInput"/>
         </post>
         <get id="loginUser" produces="application/xml,application/json" 
path="/user/login">
-            <param dataType="string" description="The user name for login" 
name="username" required="true" type="query"/>
-            <param dataType="string" description="The password for login in 
clear text" name="password" required="true" type="query"/>
+            <param collectionFormat="multi" dataType="string" description="The 
user name for login" name="username" required="true" type="query"/>
+            <param collectionFormat="multi" dataType="string" description="The 
password for login in clear text" name="password" required="true" type="query"/>
             <to uri="direct:loginUser"/>
         </get>
         <get id="logoutUser" path="/user/logout">
diff --git 
a/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiV3PetstoreWithRestComponentYaml.txt
 
b/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiV3PetstoreWithRestComponentYaml.txt
index 30667bbb76d..a947da1521b 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiV3PetstoreWithRestComponentYaml.txt
+++ 
b/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiV3PetstoreWithRestComponentYaml.txt
@@ -33,7 +33,8 @@
       path: "/pet"
       consumes: "application/json,application/xml"
       param:
-      - dataType: "boolean"
+      - collectionFormat: "multi"
+        dataType: "boolean"
         defaultValue: "false"
         description: "Verbose data"
         name: "verbose"
@@ -183,12 +184,14 @@
       path: "/user/login"
       produces: "application/xml,application/json"
       param:
-      - dataType: "string"
+      - collectionFormat: "multi"
+        dataType: "string"
         description: "The user name for login"
         name: "username"
         required: true
         type: "query"
-      - dataType: "string"
+      - collectionFormat: "multi"
+        dataType: "string"
         description: "The password for login in clear text"
         name: "password"
         required: true
diff --git 
a/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiV3PetstoreXml.txt
 
b/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiV3PetstoreXml.txt
index acf189cf08b..f4016f3d427 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiV3PetstoreXml.txt
+++ 
b/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiV3PetstoreXml.txt
@@ -5,7 +5,7 @@
             <to uri="direct:updatePet"/>
         </put>
         <post consumes="application/json,application/xml" id="addPet" 
path="/pet">
-            <param dataType="boolean" defaultValue="false" 
description="Verbose data" name="verbose" required="false" type="query"/>
+            <param collectionFormat="multi" dataType="boolean" 
defaultValue="false" description="Verbose data" name="verbose" required="false" 
type="query"/>
             <param description="Pet object that needs to be added to the 
store" name="body" required="true" type="body"/>
             <to uri="direct:addPet"/>
         </post>
@@ -66,8 +66,8 @@
             <to uri="direct:createUsersWithListInput"/>
         </post>
         <get id="loginUser" produces="application/xml,application/json" 
path="/user/login">
-            <param dataType="string" description="The user name for login" 
name="username" required="true" type="query"/>
-            <param dataType="string" description="The password for login in 
clear text" name="password" required="true" type="query"/>
+            <param collectionFormat="multi" dataType="string" description="The 
user name for login" name="username" required="true" type="query"/>
+            <param collectionFormat="multi" dataType="string" description="The 
password for login in clear text" name="password" required="true" type="query"/>
             <to uri="direct:loginUser"/>
         </get>
         <get id="logoutUser" path="/user/logout">
diff --git 
a/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiV3PetstoreYaml.txt
 
b/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiV3PetstoreYaml.txt
index c85aa775334..4063d84205e 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiV3PetstoreYaml.txt
+++ 
b/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiV3PetstoreYaml.txt
@@ -30,7 +30,8 @@
       path: "/pet"
       consumes: "application/json,application/xml"
       param:
-      - dataType: "boolean"
+      - collectionFormat: "multi"
+        dataType: "boolean"
         defaultValue: "false"
         description: "Verbose data"
         name: "verbose"
@@ -180,12 +181,14 @@
       path: "/user/login"
       produces: "application/xml,application/json"
       param:
-      - dataType: "string"
+      - collectionFormat: "multi"
+        dataType: "string"
         description: "The user name for login"
         name: "username"
         required: true
         type: "query"
-      - dataType: "string"
+      - collectionFormat: "multi"
+        dataType: "string"
         description: "The password for login in clear text"
         name: "password"
         required: true
diff --git 
a/tooling/openapi-rest-dsl-generator/src/test/resources/org/apache/camel/generator/openapi/greetings-spec.json
 
b/tooling/openapi-rest-dsl-generator/src/test/resources/org/apache/camel/generator/openapi/greetings-spec.json
deleted file mode 100644
index 393ec32e4a5..00000000000
--- 
a/tooling/openapi-rest-dsl-generator/src/test/resources/org/apache/camel/generator/openapi/greetings-spec.json
+++ /dev/null
@@ -1,84 +0,0 @@
-{
-  "swagger" : "2.0",
-  "info" : {
-    "version" : "1.0",
-    "title" : "Greeting REST API"
-  },
-  "host" : "",
-  "basePath" : "/camel/",
-  "tags" : [ {
-    "name" : "greetings",
-    "description" : "Greeting to {name}"
-  } ],
-  "schemes" : [ "http" ],
-  "paths" : {
-    "/greetings/{name}" : {
-      "get" : {
-        "tags" : [ "greetings" ],
-        "operationId" : "greeting-api",
-        "parameters" : [ {
-          "name" : "name",
-          "in" : "path",
-          "required" : true,
-          "type" : "string"
-        } ],
-        "responses" : {
-          "200" : {
-            "description" : "Output type",
-            "schema" : {
-              "$ref" : "#/definitions/Greetings"
-            }
-          }
-        }
-      },
-      "post" : {
-        "tags" : [ "greetings" ],
-        "operationId" : "post-greeting-api",
-        "parameters" : [ {
-          "name" : "name",
-          "in" : "path",
-          "required" : true,
-          "type" : "string"
-        } ],
-        "responses" : {
-          "200" : {
-            "description" : "Output type",
-            "schema" : {
-              "$ref" : "#/definitions/Greetings"
-            }
-          }
-        }
-      }
-    },
-    "/bye/{name}" : {
-      "post" : {
-        "tags" : [ "greetings" ],
-        "operationId" : "bye-api",
-        "parameters" : [ {
-          "name" : "name",
-          "in" : "path",
-          "required" : true,
-          "type" : "string"
-        } ],
-        "responses" : {
-          "200" : {
-            "description" : "Output type",
-            "schema" : {
-              "$ref" : "#/definitions/Greetings"
-            }
-          }
-        }
-      }
-    }
-  },
-  "definitions" : {
-    "Greetings" : {
-      "type" : "object",
-      "properties" : {
-        "greetings" : {
-          "type" : "string"
-        }
-      }
-    }
-  }
-}
\ No newline at end of file
diff --git 
a/tooling/openapi-rest-dsl-generator/src/test/resources/org/apache/camel/generator/openapi/greetings-spec.yaml
 
b/tooling/openapi-rest-dsl-generator/src/test/resources/org/apache/camel/generator/openapi/greetings-spec.yaml
new file mode 100644
index 00000000000..54f15cda2c3
--- /dev/null
+++ 
b/tooling/openapi-rest-dsl-generator/src/test/resources/org/apache/camel/generator/openapi/greetings-spec.yaml
@@ -0,0 +1,87 @@
+#
+# 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.
+#
+
+openapi: 3.0.1
+info:
+  title: Greeting REST API
+  version: "1.0"
+servers:
+- url: http://host/camel/
+tags:
+- name: greetings
+  description: "Greeting to {name}"
+paths:
+  /greetings/{name}:
+    get:
+      tags:
+      - greetings
+      operationId: greeting-api
+      parameters:
+      - name: name
+        in: path
+        required: true
+        schema:
+          type: string
+      responses:
+        "200":
+          description: Output type
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Greetings'
+    post:
+      tags:
+      - greetings
+      operationId: post-greeting-api
+      parameters:
+      - name: name
+        in: path
+        required: true
+        schema:
+          type: string
+      responses:
+        "200":
+          description: Output type
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Greetings'
+  /bye/{name}:
+    post:
+      tags:
+      - greetings
+      operationId: bye-api
+      parameters:
+      - name: name
+        in: path
+        required: true
+        schema:
+          type: string
+      responses:
+        "200":
+          description: Output type
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Greetings'
+components:
+  schemas:
+    Greetings:
+      type: object
+      properties:
+        greetings:
+          type: string
diff --git 
a/tooling/openapi-rest-dsl-generator/src/test/resources/org/apache/camel/generator/openapi/openapi-v3-ref-param.yaml
 
b/tooling/openapi-rest-dsl-generator/src/test/resources/org/apache/camel/generator/openapi/openapi-v3-ref-param.yaml
new file mode 100644
index 00000000000..026d39e421b
--- /dev/null
+++ 
b/tooling/openapi-rest-dsl-generator/src/test/resources/org/apache/camel/generator/openapi/openapi-v3-ref-param.yaml
@@ -0,0 +1,48 @@
+#
+# 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.
+#
+
+openapi: "3.0.1"
+info:
+  title: Test API
+  description: Move forward with limits
+  version: 1.0.0
+servers:
+  - url: /v1
+    description: local server
+
+paths:
+  /path:
+    get:
+      parameters:
+        - $ref: "#/components/parameters/limitParam"
+      responses:
+        "200":
+          description: successful operation
+          content: {}
+        "400":
+          description: Bad request
+          content: {}
+
+components:
+  parameters:
+    limitParam:
+      name: limit
+      in: query
+      description: Limits the number of returned results
+      required: false
+      schema:
+        type: integer
\ No newline at end of file
diff --git 
a/tooling/openapi-rest-dsl-generator/src/test/resources/org/apache/camel/generator/openapi/openapi-v3-ref-schema.yaml
 
b/tooling/openapi-rest-dsl-generator/src/test/resources/org/apache/camel/generator/openapi/openapi-v3-ref-schema.yaml
new file mode 100644
index 00000000000..ead8fb398f0
--- /dev/null
+++ 
b/tooling/openapi-rest-dsl-generator/src/test/resources/org/apache/camel/generator/openapi/openapi-v3-ref-schema.yaml
@@ -0,0 +1,63 @@
+#
+# 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.
+#
+
+openapi: "3.0.1"
+info:
+  version: 1.0.0
+  title: Swagger sample
+paths:
+  /pet:
+    put:
+      tags:
+        - pet
+      summary: Update an existing pet
+      description: Update an existing pet by Id
+      operationId: updatePet
+      requestBody:
+        description: Update an existent pet in the store
+        content:
+          application/json:
+            schema:
+              type: array
+              items:
+                $ref: "#/components/schemas/Pet"
+
+        required: true
+      responses:
+        "200":
+          description: Successful operation
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  $ref: "#/components/schemas/Pet"
+components:
+  schemas:
+    Pet:
+      required:
+        - id
+        - name
+      properties:
+        id:
+          type: integer
+          format: int64
+        name:
+          type: string
+        tag:
+          type: string
+

Reply via email to