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
commit 3af7b261cac519a2c9f7aadf1d3ec6bbb48235c5 Author: Claus Ibsen <[email protected]> AuthorDate: Fri Jul 10 20:16:38 2026 +0200 chore: fix various bugs in CLI core commands, config, and infra - Run: pass kameletsVersion instead of camelVersion for kamelets <= 4.16 (task 1) - Debug: fix mvnw lookup from filesystem root to project-relative path (task 3) - Debug: drain Maven output via inheritIO and raise timeout to 120s (task 2) - TransformDataWeave: null-check getParent() for bare output filename (task 4) - SBOMGenerator: split Windows mvn tokens, guard exitValue on timeout, drain output (task 5) - Init: use toAbsolutePath().normalize() instead of toRealPath() for dirs not yet created (task 6) - ExportBaseCommand: use split("=", 2) for property parsing to support = in values (task 7) - CommandLineHelper: return after IOException fallback to prevent overwriting (task 8) - Export: use Instant.now() for proper UTC timestamp in reproducible builds (task 10) - Doctor: fix disk space unit threshold mismatch between value and label (task 11) - ExportBaseCommand: restrict file:->classpath: rewrite to values starting with file: (task 12) - Run, ExampleHelper, Explain, Harden: use Locale.ROOT for toUpperCase() (task 13) - InfraLog: reuse serviceNameFromPidFile for hyphenated service names (task 41) - ConfigGet: return exit code 1 for missing key (task 43) - VersionList: return null instead of throwing UncheckedIOException when website unreachable (task 44) Co-Authored-By: Claude Opus 4.6 <[email protected]> Signed-off-by: Claus Ibsen <[email protected]> --- .../camel/dsl/jbang/core/commands/Debug.java | 14 ++++--- .../camel/dsl/jbang/core/commands/Doctor.java | 2 +- .../camel/dsl/jbang/core/commands/Explain.java | 3 +- .../camel/dsl/jbang/core/commands/Export.java | 8 ++-- .../dsl/jbang/core/commands/ExportBaseCommand.java | 14 ++++--- .../camel/dsl/jbang/core/commands/Harden.java | 3 +- .../apache/camel/dsl/jbang/core/commands/Init.java | 2 +- .../apache/camel/dsl/jbang/core/commands/Run.java | 4 +- .../dsl/jbang/core/commands/SBOMGenerator.java | 43 ++++++++++++---------- .../jbang/core/commands/TransformDataWeave.java | 5 ++- .../dsl/jbang/core/commands/config/ConfigGet.java | 4 +- .../dsl/jbang/core/commands/infra/InfraLog.java | 2 +- .../jbang/core/commands/version/VersionList.java | 3 +- .../dsl/jbang/core/common/CommandLineHelper.java | 1 + .../camel/dsl/jbang/core/common/ExampleHelper.java | 3 +- 15 files changed, 62 insertions(+), 49 deletions(-) diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Debug.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Debug.java index 30245fd6cafe..e78ff44d89ce 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Debug.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Debug.java @@ -379,9 +379,9 @@ public class Debug extends Run { printer().println("Preparing Camel Spring Boot for debugging ..."); // use maven wrapper if present - String mvnw = "/mvnw"; + String mvnw = "mvnw"; if (FileUtil.isWindows()) { - mvnw = "/mvnw.cmd"; + mvnw = "mvnw.cmd"; } if (!new File(mvnw).exists()) { mvnw = "mvn"; @@ -389,9 +389,10 @@ public class Debug extends Run { // use maven to build the JAR and then run the JAR after-wards ProcessBuilder pb = new ProcessBuilder(); pb.command(mvnw, "-Dmaven.test.skip", "--file", "camel-jbang-debug-pom.xml", "package", "spring-boot:repackage"); + pb.inheritIO(); Process p = pb.start(); - if (p.waitFor(30, TimeUnit.SECONDS)) { + if (p.waitFor(120, TimeUnit.SECONDS)) { AtomicReference<Process> processRef = new AtomicReference<>(); Runtime.getRuntime().addShutdownHook(new Thread(() -> { try { @@ -503,9 +504,9 @@ public class Debug extends Run { printer().println("Preparing Camel Quarkus for debugging ..."); // use maven wrapper if present - String mvnw = "/mvnw"; + String mvnw = "mvnw"; if (FileUtil.isWindows()) { - mvnw = "/mvnw.cmd"; + mvnw = "mvnw.cmd"; } if (!new File(mvnw).exists()) { mvnw = "mvn"; @@ -513,9 +514,10 @@ public class Debug extends Run { // use maven to build the JAR and then run the JAR after-wards ProcessBuilder pb = new ProcessBuilder(); pb.command(mvnw, "-Dmaven.test.skip", "--file", "camel-jbang-debug-pom.xml", "package", "quarkus:build"); + pb.inheritIO(); Process p = pb.start(); - if (p.waitFor(30, TimeUnit.SECONDS)) { + if (p.waitFor(120, TimeUnit.SECONDS)) { AtomicReference<Process> processRef = new AtomicReference<>(); Runtime.getRuntime().addShutdownHook(new Thread(() -> { try { diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Doctor.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Doctor.java index 42ced6711412..a4f7622ea5ef 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Doctor.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Doctor.java @@ -157,7 +157,7 @@ public class Doctor extends CamelCommand { long mb = free / (1024 * 1024); long gb = mb / (1024); String status = mb > 500 ? "OK" : "LOW"; - String unit = gb > 10 ? "GB" : "MB"; + String unit = gb > 0 ? "GB" : "MB"; printer().printf(" Disk Space: %d %s free in temp dir (%s)%n", gb > 0 ? gb : mb, unit, status); } } diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Explain.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Explain.java index f55d479dd842..836afd62f164 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Explain.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Explain.java @@ -21,6 +21,7 @@ import java.nio.file.Path; import java.util.Arrays; import java.util.Iterator; import java.util.List; +import java.util.Locale; import java.util.Optional; import org.apache.camel.catalog.CamelCatalog; @@ -288,7 +289,7 @@ public class Explain extends CamelCommand { } prompt.append("File: ").append(fileName).append("\n"); - prompt.append("Format: ").append(fileExtension.toUpperCase()).append("\n\n"); + prompt.append("Format: ").append(fileExtension.toUpperCase(Locale.ROOT)).append("\n\n"); prompt.append("Route definition:\n```").append(fileExtension).append("\n"); prompt.append(routeContent).append("\n```\n\n"); prompt.append("Please explain this Camel route:"); diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Export.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Export.java index 25532983bbb1..09912a00615e 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Export.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Export.java @@ -21,8 +21,8 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import java.text.SimpleDateFormat; -import java.util.Date; +import java.time.Instant; +import java.time.temporal.ChronoUnit; import java.util.HashMap; import java.util.Map; import java.util.Properties; @@ -306,9 +306,7 @@ public class Export extends ExportBaseCommand { // Maven reproducible builds: https://maven.apache.org/guides/mini/guide-reproducible-builds.html protected String getBuildMavenProjectDate() { - // 2024-09-23T10:00:00Z - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); - return sdf.format(new Date()); + return Instant.now().truncatedTo(ChronoUnit.SECONDS).toString(); } // Copy the dockerfile into the same Maven project root directory. diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java index ecec1bdadf2a..66393190a527 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java @@ -1031,7 +1031,9 @@ public abstract class ExportBaseCommand extends CamelCommand { } // files are now loaded in classpath - v = v.replaceAll("file:", "classpath:"); + if (v.startsWith("file:")) { + v = "classpath:" + v.substring(5); + } if ("camel.main.routesIncludePattern".equals(k)) { // camel.main.routesIncludePattern should remove all .java as we use move them to regular src/main/java // camel.main.routesIncludePattern should remove all file: classpath: as we copy @@ -1076,10 +1078,9 @@ public abstract class ExportBaseCommand extends CamelCommand { if (propertySources != null) { for (String[] props : Arrays.stream(propertySources).filter(Objects::nonNull).toList()) { for (String s : props) { - String[] kv = s.split("="); - if (kv.length != 2) { - // likely a user mistake, we warn the user - printer().println("WARN: property '" + s + "'' has a bad format (should be 'key=value'), skipping."); + String[] kv = s.split("=", 2); + if (kv.length < 2) { + printer().println("WARN: property '" + s + "' has a bad format (should be 'key=value'), skipping."); } else { result.put(kv[0], kv[1]); } @@ -1098,7 +1099,8 @@ public abstract class ExportBaseCommand extends CamelCommand { var answer = new Properties(); buildProperties.stream() .filter(item -> !item.isEmpty()) - .map(item -> item.split("=")) + .map(item -> item.split("=", 2)) + .filter(toks -> toks.length == 2) .forEach(toks -> answer.setProperty(toks[0], toks[1])); return answer; } diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Harden.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Harden.java index e7f5a2fca0e6..0b130ad11e17 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Harden.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Harden.java @@ -28,6 +28,7 @@ import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Optional; import java.util.function.BiFunction; @@ -475,7 +476,7 @@ public class Harden extends CamelCommand { } prompt.append("File: ").append(fileName).append("\n"); - prompt.append("Format: ").append(fileExtension.toUpperCase()).append("\n\n"); + prompt.append("Format: ").append(fileExtension.toUpperCase(Locale.ROOT)).append("\n\n"); prompt.append("Route definition:\n```").append(fileExtension).append("\n"); prompt.append(routeContent).append("\n```\n\n"); prompt.append("Please perform a security analysis of this Camel route and provide hardening recommendations:"); diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Init.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Init.java index 276926f26c15..65a5e5457b20 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Init.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Init.java @@ -240,7 +240,7 @@ public class Init extends CamelCommand { */ private String computeJavaPackageDeclaration(Path targetPath) throws IOException { String packageDeclaration = ""; - String canonicalPath = targetPath.getParent().toRealPath().toString(); + String canonicalPath = targetPath.getParent().toAbsolutePath().normalize().toString(); String srcMainJavaPath = Paths.get("src", "main", "java").toString(); int index = canonicalPath.indexOf(srcMainJavaPath); if (index != -1) { 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 d8ecbe8a8243..a28cb1515706 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 @@ -417,7 +417,7 @@ public class Run extends CamelCommand { return cat.equals(levelName) ? "" : cat; }).thenComparing(e -> e.getString("name"))); printer().println(); - String levelLabel = levelName.substring(0, 1).toUpperCase() + levelName.substring(1) + ":"; + String levelLabel = levelName.substring(0, 1).toUpperCase(Locale.ROOT) + levelName.substring(1) + ":"; printer().println(levelLabel); printer().println("=".repeat(levelLabel.length())); String currentCategory = null; @@ -2051,7 +2051,7 @@ public class Run extends CamelCommand { } if (kameletsVersion != null) { if (camelVersion != null && VersionHelper.isLE(camelVersion, "4.16.0")) { - jbangArgs.add("-Dcamel-kamelets.version=" + camelVersion); + jbangArgs.add("-Dcamel-kamelets.version=" + kameletsVersion); } else { cmds.add("--kamelets-version=" + kameletsVersion); } diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/SBOMGenerator.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/SBOMGenerator.java index cde55103ae68..7db300a29f0b 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/SBOMGenerator.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/SBOMGenerator.java @@ -19,6 +19,8 @@ package org.apache.camel.dsl.jbang.core.commands; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.List; import java.util.Properties; import java.util.concurrent.TimeUnit; @@ -98,11 +100,11 @@ public class SBOMGenerator extends Export { Integer answer = doExport(); if (answer == 0) { Path buildDir = Paths.get(EXPORT_DIR); - String mvnProgramCall; + List<String> mvnProgramCall; if (FileUtil.isWindows()) { - mvnProgramCall = "cmd /c mvn"; + mvnProgramCall = List.of("cmd", "/c", "mvn"); } else { - mvnProgramCall = "mvn"; + mvnProgramCall = List.of("mvn"); } boolean done; if (sbomFormat.equalsIgnoreCase(CYCLONEDX_FORMAT)) { @@ -112,25 +114,25 @@ public class SBOMGenerator extends Export { } else { outputDirectoryParameter += "../../" + outputDirectory; } - ProcessBuilder pb = new ProcessBuilder( - mvnProgramCall, - "org.cyclonedx:cyclonedx-maven-plugin:" + cyclonedxPluginVersion + ":makeAggregateBom", - outputDirectoryParameter, - "-DoutputName=" + outputName, - "-DoutputFormat=" + sbomOutputFormat); - + List<String> cmd = new ArrayList<>(mvnProgramCall); + cmd.add("org.cyclonedx:cyclonedx-maven-plugin:" + cyclonedxPluginVersion + ":makeAggregateBom"); + cmd.add(outputDirectoryParameter); + cmd.add("-DoutputName=" + outputName); + cmd.add("-DoutputFormat=" + sbomOutputFormat); + ProcessBuilder pb = new ProcessBuilder(cmd); pb.directory(buildDir.toFile()); + pb.inheritIO(); Process p = pb.start(); done = p.waitFor(60, TimeUnit.SECONDS); if (!done) { + p.destroyForcibly(); answer = 1; - } - if (p.exitValue() != 0) { + } else if (p.exitValue() != 0) { answer = p.exitValue(); } } else if (sbomFormat.equalsIgnoreCase(SPDX_FORMAT)) { - String outputDirectoryParameter = null; + String outputDirectoryParameter; String outputFormat = null; if (Paths.get(outputDirectory).isAbsolute()) { outputDirectoryParameter = outputDirectory; @@ -142,19 +144,20 @@ public class SBOMGenerator extends Export { } else if (sbomOutputFormat.equalsIgnoreCase(SBOM_XML_FORMAT)) { outputFormat = "RDF/XML"; } - ProcessBuilder pb = new ProcessBuilder( - mvnProgramCall, - "org.spdx:spdx-maven-plugin:" + spdxPluginVersion + ":createSPDX", - "-DspdxFileName=" + Paths.get(outputDirectoryParameter, outputName + "." + sbomOutputFormat), - "-DoutputFormat=" + outputFormat); + List<String> cmd = new ArrayList<>(mvnProgramCall); + cmd.add("org.spdx:spdx-maven-plugin:" + spdxPluginVersion + ":createSPDX"); + cmd.add("-DspdxFileName=" + Paths.get(outputDirectoryParameter, outputName + "." + sbomOutputFormat)); + cmd.add("-DoutputFormat=" + outputFormat); + ProcessBuilder pb = new ProcessBuilder(cmd); pb.directory(buildDir.toFile()); + pb.inheritIO(); Process p = pb.start(); done = p.waitFor(60, TimeUnit.SECONDS); if (!done) { + p.destroyForcibly(); answer = 1; - } - if (p.exitValue() != 0) { + } else if (p.exitValue() != 0) { answer = p.exitValue(); } } diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/TransformDataWeave.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/TransformDataWeave.java index 69dc286c0c88..bc3ff95df84d 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/TransformDataWeave.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/TransformDataWeave.java @@ -121,7 +121,10 @@ public class TransformDataWeave extends CamelCommand { if (output != null) { Path outputPath = resolveOutputPath(dwlFile, Path.of(output)); - Files.createDirectories(outputPath.getParent()); + Path parentDir = outputPath.getParent(); + if (parentDir != null) { + Files.createDirectories(parentDir); + } Files.writeString(outputPath, dsContent); printer().println("Converted: " + dwlFile + " -> " + outputPath); } else { diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/config/ConfigGet.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/config/ConfigGet.java index 69fd0c074bbe..3b3e95bf04d1 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/config/ConfigGet.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/config/ConfigGet.java @@ -43,15 +43,17 @@ public class ConfigGet extends CamelCommand { @Override public Integer doCall() throws Exception { + int[] exitCode = { 0 }; CommandLineHelper.loadProperties(properties -> { Optional<Object> maybeProperty = Optional.ofNullable(properties.get(key)); if (maybeProperty.isPresent()) { printer().println(String.valueOf(maybeProperty.get())); } else { printer().printErr(key + " key not found"); + exitCode[0] = 1; } }, !global); - return 0; + return exitCode[0]; } } diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraLog.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraLog.java index 12025f67f09e..97a78992d32f 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraLog.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraLog.java @@ -69,7 +69,7 @@ public class InfraLog extends InfraBaseCommand { .toList(); for (Path logFile : logFiles) { - String alias = logFile.getFileName().toString().split("-")[1]; + String alias = serviceNameFromPidFile(logFile.getFileName().toString()); createTailer(logFile.toFile(), alias, futures); } } catch (IOException e) { diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/version/VersionList.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/version/VersionList.java index b879aec3bf4b..63b5137c219a 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/version/VersionList.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/version/VersionList.java @@ -19,7 +19,6 @@ package org.apache.camel.dsl.jbang.core.commands.version; import java.io.IOException; import java.io.LineNumberReader; import java.io.StringReader; -import java.io.UncheckedIOException; import java.net.ProxySelector; import java.net.URI; import java.net.URISyntaxException; @@ -599,7 +598,7 @@ public class VersionList extends CamelCommand { } } } catch (IOException e) { - throw new UncheckedIOException("Could not get " + gitUrl, e); + return null; } catch (InterruptedException e) { Thread.currentThread().interrupt(); throw new RuntimeException("Interrupted", e); diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/CommandLineHelper.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/CommandLineHelper.java index 44440aba6077..5b2cb90dd9ba 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/CommandLineHelper.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/CommandLineHelper.java @@ -129,6 +129,7 @@ public final class CommandLineHelper { properties.load(reader); } catch (IOException e) { commandLine.setDefaultValueProvider(new CamelUserConfigDefaultValueProvider(file)); + return; } commandLine.setDefaultValueProvider(new CamelUserConfigDefaultValueProvider(properties)); diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/ExampleHelper.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/ExampleHelper.java index d1821c946c2f..e1ba0ed1d2f8 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/ExampleHelper.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/ExampleHelper.java @@ -28,6 +28,7 @@ import java.time.Duration; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.Locale; import org.apache.camel.util.IOHelper; import org.apache.camel.util.json.JsonArray; @@ -133,7 +134,7 @@ public final class ExampleHelper { case "ai" -> "AI"; case "eip" -> "EIP"; case "rest" -> "REST"; - default -> category.substring(0, 1).toUpperCase() + category.substring(1); + default -> category.substring(0, 1).toUpperCase(Locale.ROOT) + category.substring(1); }; }
