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 96327654e0b CAMEL-20651: camel-jbang - The open-api should use the new 
contract-first openapi
96327654e0b is described below

commit 96327654e0baca6d4c1ca12753faf986cfcb5388
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Mon Apr 29 09:32:25 2024 +0200

    CAMEL-20651: camel-jbang - The open-api should use the new contract-first 
openapi
---
 .../component/rest/openapi/RestOpenApiHelper.java  |  4 ++
 .../dsl/jbang/core/commands/ExportCamelMain.java   | 15 ++++++++
 .../dsl/jbang/core/commands/ExportSpringBoot.java  |  5 +++
 .../apache/camel/dsl/jbang/core/commands/Run.java  | 43 +++++++---------------
 .../main/resources/templates/rest-dsl.yaml.tmpl    |  5 +++
 5 files changed, 43 insertions(+), 29 deletions(-)

diff --git 
a/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenApiHelper.java
 
b/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenApiHelper.java
index fc8e460c551..088db205b6e 100644
--- 
a/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenApiHelper.java
+++ 
b/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenApiHelper.java
@@ -107,6 +107,10 @@ final class RestOpenApiHelper {
                             // strip off the first "/" if double "/" exists
                             basePath = basePath.substring(1);
                         }
+                        // strip ending slash
+                        if (basePath.endsWith("/")) {
+                            basePath = basePath.substring(0, basePath.length() 
- 1);
+                        }
                         if ("/".equals(basePath)) {
                             basePath = "";
                         }
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportCamelMain.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportCamelMain.java
index c45e3e7a653..782589666ea 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportCamelMain.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportCamelMain.java
@@ -316,6 +316,11 @@ class ExportCamelMain extends Export {
         answer.removeIf(s -> s.contains("camel-main"));
         answer.removeIf(s -> s.contains("camel-health"));
 
+        if (openapi != null) {
+            // include http server if using openapi
+            answer.add("mvn:org.apache.camel:camel-platform-http-main");
+        }
+
         // if platform-http is included then we need to switch to use 
camel-platform-http-main as implementation
         if (answer.stream().anyMatch(s -> s.contains("camel-platform-http") && 
!s.contains("camel-platform-http-main"))) {
             answer.removeIf(s -> 
s.contains("org.apache.camel:camel-platform-http:"));
@@ -327,6 +332,16 @@ class ExportCamelMain extends Export {
         return answer;
     }
 
+    @Override
+    protected void prepareApplicationProperties(Properties properties) {
+        if (openapi != null) {
+            // enable http server if not explicit configured
+            if (properties.getProperty("camel.server.enabled") == null) {
+                properties.setProperty("camel.server.enabled", "true");
+            }
+        }
+    }
+
     private void createMainClassSource(File srcJavaDir, String packageName, 
String mainClassname) throws Exception {
         InputStream is = 
ExportCamelMain.class.getClassLoader().getResourceAsStream("templates/main.tmpl");
         String context = IOHelper.loadText(is);
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportSpringBoot.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportSpringBoot.java
index ce80383e76c..d5070320abf 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportSpringBoot.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportSpringBoot.java
@@ -361,6 +361,11 @@ class ExportSpringBoot extends Export {
         // remove out of the box dependencies
         answer.removeIf(s -> s.contains("camel-core"));
 
+        if (openapi != null) {
+            // include http server if using openapi
+            answer.add("mvn:org.apache.camel:camel-platform-http");
+        }
+
         return answer;
     }
 
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
index e713975b98d..795b6ae8f5a 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
@@ -46,12 +46,6 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
-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 org.apache.camel.CamelContext;
 import org.apache.camel.catalog.CamelCatalog;
 import org.apache.camel.catalog.DefaultCamelCatalog;
 import org.apache.camel.dsl.jbang.core.common.CommandLineHelper;
@@ -59,8 +53,6 @@ import 
org.apache.camel.dsl.jbang.core.common.LoggingLevelCompletionCandidates;
 import org.apache.camel.dsl.jbang.core.common.RuntimeCompletionCandidates;
 import org.apache.camel.dsl.jbang.core.common.RuntimeUtil;
 import org.apache.camel.dsl.jbang.core.common.VersionHelper;
-import org.apache.camel.generator.openapi.RestDslGenerator;
-import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.main.KameletMain;
 import org.apache.camel.main.download.DownloadListener;
 import org.apache.camel.spi.BacklogDebugger;
@@ -1254,7 +1246,7 @@ public class Run extends CamelCommand {
         content = content.replaceFirst("\\{\\{ \\.CamelKameletsDependencies 
}}", sb.toString());
 
         String fn = CommandLineHelper.CAMEL_JBANG_WORK_DIR + 
"/CustomCamelJBang.java";
-        Files.write(Paths.get(fn), content.getBytes(StandardCharsets.UTF_8));
+        Files.writeString(Paths.get(fn), content);
 
         List<String> cmds = new 
ArrayList<>(spec.commandLine().getParseResult().originalArgs());
 
@@ -1321,7 +1313,7 @@ public class Run extends CamelCommand {
         }
         content = content.replaceFirst("\\{\\{ \\.Name }}", "CodeRoute");
         content = content.replaceFirst("\\{\\{ \\.Code }}", code);
-        Files.write(Paths.get(fn), content.getBytes(StandardCharsets.UTF_8));
+        Files.writeString(Paths.get(fn), content);
         return "file:" + fn;
     }
 
@@ -1406,7 +1398,7 @@ public class Run extends CamelCommand {
                 }
                 fn = cn + ".java";
             }
-            Files.write(Paths.get(fn), 
t.toString().getBytes(StandardCharsets.UTF_8));
+            Files.writeString(Paths.get(fn), t.toString());
             file = "file:" + fn;
         }
         return file;
@@ -1464,24 +1456,17 @@ public class Run extends CamelCommand {
             throw new FileNotFoundException("Cannot find file: " + file);
         }
 
-        ObjectMapper mapper;
-        boolean yaml = file.getName().endsWith(".yaml") || 
file.getName().endsWith(".yml");
-        if (yaml) {
-            mapper = new YAMLMapper();
-        } else {
-            mapper = new ObjectMapper();
-        }
-        ObjectNode node = (ObjectNode) mapper.readTree(file);
-        OpenApiDocument document = (OpenApiDocument) 
Library.readDocument(node);
-        RuntimeUtil.setRootLoggingLevel("off");
-        try {
-            try (CamelContext context = new DefaultCamelContext()) {
-                String out = 
RestDslGenerator.toYaml(document).generate(context, false);
-                Files.write(Paths.get(OPENAPI_GENERATED_FILE), out.getBytes());
-            }
-        } finally {
-            RuntimeUtil.setRootLoggingLevel(loggingLevel);
-        }
+        InputStream is = 
Run.class.getClassLoader().getResourceAsStream("templates/rest-dsl.yaml.tmpl");
+        String content = IOHelper.loadText(is);
+        IOHelper.close(is);
+
+        String onlyName = FileUtil.stripPath(file.getName());
+        content = content.replaceFirst("\\{\\{ \\.Spec }}", onlyName);
+
+        Files.writeString(Paths.get(OPENAPI_GENERATED_FILE), content);
+
+        // we need to include the spec on the classpath
+        files.add(openapi);
     }
 
     private boolean knownFile(String file) throws Exception {
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/rest-dsl.yaml.tmpl
 
b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/rest-dsl.yaml.tmpl
new file mode 100644
index 00000000000..69f7526db7e
--- /dev/null
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/rest-dsl.yaml.tmpl
@@ -0,0 +1,5 @@
+- restConfiguration:
+    clientRequestValidation: true
+- rest:
+    openApi:
+      specification: {{ .Spec }}
\ No newline at end of file

Reply via email to