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 e8ea0225e57 CAMEL-20825: camel-rest - Contract first for api-doc 
should include the spec
e8ea0225e57 is described below

commit e8ea0225e5791606ae7ad2c1a3a2efb50226253b
Author: Claus Ibsen <[email protected]>
AuthorDate: Sat Jun 1 15:19:39 2024 +0200

    CAMEL-20825: camel-rest - Contract first for api-doc should include the spec
---
 .../apache/camel/openapi/RestOpenApiReader.java    | 25 +++++++++++++++++++++-
 1 file changed, 24 insertions(+), 1 deletion(-)

diff --git 
a/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/RestOpenApiReader.java
 
b/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/RestOpenApiReader.java
index 496988508e3..7140fcf4cb5 100644
--- 
a/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/RestOpenApiReader.java
+++ 
b/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/RestOpenApiReader.java
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.openapi;
 
+import java.io.IOException;
+import java.io.InputStream;
 import java.lang.invoke.MethodHandle;
 import java.lang.invoke.MethodType;
 import java.lang.reflect.Method;
@@ -60,6 +62,8 @@ import io.swagger.v3.oas.models.security.Scopes;
 import io.swagger.v3.oas.models.security.SecurityRequirement;
 import io.swagger.v3.oas.models.security.SecurityScheme;
 import io.swagger.v3.oas.models.tags.Tag;
+import io.swagger.v3.parser.OpenAPIV3Parser;
+import io.swagger.v3.parser.core.models.SwaggerParseResult;
 import org.apache.camel.CamelContext;
 import org.apache.camel.model.rest.ApiKeyDefinition;
 import org.apache.camel.model.rest.BasicAuthDefinition;
@@ -79,9 +83,12 @@ import org.apache.camel.model.rest.SecurityDefinition;
 import org.apache.camel.model.rest.VerbDefinition;
 import org.apache.camel.spi.ClassResolver;
 import org.apache.camel.spi.NodeIdFactory;
+import org.apache.camel.spi.Resource;
 import org.apache.camel.support.CamelContextHelper;
 import org.apache.camel.support.ObjectHelper;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.util.FileUtil;
+import org.apache.camel.util.IOHelper;
 import org.apache.commons.lang3.ClassUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -127,11 +134,27 @@ public class RestOpenApiReader {
      * @param  config                 the openApi configuration
      * @param  classResolver          class resolver to use @return the 
openApi model
      * @throws ClassNotFoundException is thrown if error loading class
+     * @throws IOException            is thrown if error loading openapi 
specification
      */
     public OpenAPI read(
             CamelContext camelContext, List<RestDefinition> rests, BeanConfig 
config,
             String camelContextId, ClassResolver classResolver)
-            throws ClassNotFoundException {
+            throws ClassNotFoundException, IOException {
+
+        // contract first, then load the specification as-is and use as 
response
+        for (RestDefinition rest : rests) {
+            if (rest.getOpenApi() != null) {
+                Resource res = 
PluginHelper.getResourceLoader(camelContext).resolveResource(rest.getOpenApi().getSpecification());
+                if (res != null && res.exists()) {
+                    InputStream is = res.getInputStream();
+                    String data = IOHelper.loadText(is);
+                    IOHelper.close(is);
+                    OpenAPIV3Parser parser = new OpenAPIV3Parser();
+                    SwaggerParseResult out = parser.readContents(data);
+                    return out.getOpenAPI();
+                }
+            }
+        }
 
         OpenAPI openApi = config.isOpenApi31() ? new OpenAPI(SpecVersion.V31) 
: new OpenAPI();
         if (config.getVersion() != null) {

Reply via email to