You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by "davsclaus (via GitHub)" <gi...@apache.org> on 2026/09/20 17:16:18 UTC
[PR] CAMEL-24851: when a YAML route file does not load, camel run logs the schema validator's report before the loader's error [camel]
davsclaus opened a new pull request, #26636:
URL: https://github.com/apache/camel/pull/26636
## Description
When a YAML route file fails to load, `camel run` printed the loader's message, "Error constructing YAML node id: pollEnrich: unsupported field: uri", which knows the field is wrong but not what to write. The schema validator (camel-yaml-dsl-validator, already a dependency of camel-jbang-core) has the message that says what to write, with its hints, but `camel run` never called it. In the round-2 benchmark 54 of 67 startup failures had such a message that was never shown, because the file was run without validating first; people prototyping with the CLI do the same.
Now, before the loader's error:
```
ERROR ... YamlLoadFailureReport : The route file did not load. camel validate yaml says what to write:
orders.camel.yaml:
pollEnrich: property 'uri' is not defined in the schema and the schema does not allow additional properties
(camel validate yaml <file> for the full report; the loader's error follows)
ERROR ... MainSupport : Error starting Camel: Error constructing YAML node id: pollEnrich: unsupported field: uri
```
(with #26633 in, the first line becomes `write pollEnrich: {expression: {constant: ...}}`.) The same report on a failed reload in `--dev` mode, next to the file watcher's warning.
- `YamlLoadFailureReport` (camel-jbang-core): recognises a YAML load failure in the cause chain (`YamlDeserializationException`, "Error pre-parsing resource"), runs `SourceValidator` on the run's local YAML files and logs the lines. Logged, not printed, so they are in the console and in the run's log file alike, which is what the camel-jbang-mcp `camel_get_log` tool reads after `camel_run`.
- `KameletMain.setStartFailureListener(Consumer<Exception>)`: called in `doFail` before the error is logged, so the report comes first. `Run` sets it with the run's files.
- `FileWatcherResourceReloadStrategy` (camel-support): a failed reload emits the `CamelContextReloadFailure` event, the event a failed context reload already emitted, with the file name as the action. `Run` registers an event notifier that logs the report for that file. The API is unchanged.
- The runtime and the loader's messages stay as they are; Spring Boot and Quarkus users keep them.
Upgrade guide note added.
## Tests
- `YamlLoadFailureReportTest`: the failure detection, the report for a bad file, no report for a file the validator accepts, the run files filtered to local YAML, and the reload notifier on the real event class.
- Live: `camel run` of a route with `pollEnrich: {uri: ...}` prints the report before "Error starting Camel"; `camel run --dev` of a good route, edited into the bad one, prints it next to the reload warning.
- camel-core reload tests (16) and the camel-jbang-core ai package plus `RunTest` (239) green.
π€ Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01Bp3538HRBPMQkb5ta9xRaj
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@camel.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] CAMEL-24851: when a YAML route file does not load, camel run logs the schema validator's report before the loader's error [camel]
Posted by "davsclaus (via GitHub)" <gi...@apache.org>.
davsclaus merged PR #26636:
URL: https://github.com/apache/camel/pull/26636
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@camel.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] CAMEL-24851: when a YAML route file does not load, camel run logs the schema validator's report before the loader's error [camel]
Posted by "gnodet-bot (via GitHub)" <gi...@apache.org>.
gnodet-bot commented on code in PR #26636:
URL: https://github.com/apache/camel/pull/26636#discussion_r4057796586
##########
dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ai/YamlLoadFailureReport.java:
##########
@@ -0,0 +1,198 @@
+/*
+ * 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.
+ */
+package org.apache.camel.dsl.jbang.core.commands.ai;
+
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.Consumer;
+
+import org.apache.camel.catalog.CamelCatalog;
+import org.apache.camel.catalog.DefaultCamelCatalog;
+import org.apache.camel.dsl.yaml.common.exception.YamlDeserializationException;
+import org.apache.camel.impl.event.CamelContextReloadFailureEvent;
+import org.apache.camel.spi.CamelEvent;
+import org.apache.camel.support.ResourceHelper;
+import org.apache.camel.support.SimpleEventNotifierSupport;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * When a YAML route file fails to load, the loader's message says which node is wrong but not what to write; the schema
+ * validator has the message that does, with its hints. This runs the validator on the route files of a failed start (or
+ * of a failed reload in dev mode) and prints its report, so the hints reach everyone who runs, whether they validated
+ * first or not (CAMEL-24851).
+ */
+public final class YamlLoadFailureReport {
+
+ private static final Logger LOG = LoggerFactory.getLogger(YamlLoadFailureReport.class);
+
+ private static volatile CamelCatalog catalog;
+
+ private YamlLoadFailureReport() {
+ }
+
+ /** Whether the failure comes from loading a YAML route file: a deserialization error or a pre-parse error. */
+ public static boolean isYamlLoadFailure(Throwable failure) {
+ for (Throwable t = failure; t != null; t = t.getCause() == t ? null : t.getCause()) {
+ if (t instanceof YamlDeserializationException) {
+ return true;
+ }
+ String msg = t.getMessage();
+ if (msg != null && (msg.startsWith("Error pre-parsing resource") || msg.contains("Error constructing YAML node")
+ || msg.contains("Error parsing YAML"))) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Logs the validator's report for the YAML files of a run whose start failed on loading one of them; nothing for
+ * any other failure. Logged (not printed) so that it is in the console and in the run's log file alike, where the
+ * camel-jbang-mcp tools read it, and before the loader's own error.
+ */
+ public static void logIfYamlLoadFailure(Throwable failure, List<String> files) {
+ if (!isYamlLoadFailure(failure)) {
+ return;
+ }
+ List<String> lines = report(yamlFiles(files));
+ if (!lines.isEmpty()) {
+ LOG.error(String.join(System.lineSeparator(), lines));
+ }
+ }
+
+ /**
+ * The validator's report for the YAML files, as lines to print: a header, then per file with problems its name and
+ * the messages, then a footer; empty when the validator finds nothing (then the loader's message is all there is).
+ */
+ public static List<String> report(List<Path> yamlFiles) {
+ List<String> lines = new ArrayList<>();
+ for (Path file : yamlFiles) {
+ if (!Files.isRegularFile(file)) {
+ continue;
+ }
+ List<String> errors;
+ try {
+ String content = Files.readString(file);
+ Path dir = file.toAbsolutePath().getParent();
+ errors = SourceValidator.validate(file.getFileName().toString(), content, catalog(), null, dir);
+ } catch (Exception e) {
+ // the validator must never hide the loader's error
+ LOG.debug("Cannot validate {}", file, e);
+ continue;
+ }
+ if (!errors.isEmpty()) {
+ if (lines.isEmpty()) {
+ lines.add("The route file did not load. camel validate yaml says what to write:");
+ }
+ lines.add(" " + file.getFileName() + ":");
+ for (String error : errors) {
+ lines.add(" " + error);
+ }
+ }
+ }
+ if (!lines.isEmpty()) {
+ lines.add(" (camel validate yaml <file> for the full report; the loader's error follows)");
+ }
+ return lines;
+ }
+
+ /** The YAML route files among the files of a run: local files ending in .yaml or .yml. */
+ public static List<Path> yamlFiles(List<String> files) {
+ List<Path> answer = new ArrayList<>();
+ if (files == null) {
+ return answer;
+ }
+ for (String f : files) {
+ if (f == null) {
+ continue;
+ }
+ if (f.startsWith("file:")) {
+ f = f.substring(5);
+ }
+ if (ResourceHelper.hasScheme(f) || f.startsWith("github:")) {
+ continue; // github:, https:, classpath: (the check Run makes; a Windows drive letter is not a scheme)
+ }
+ String lower = f.toLowerCase();
+ Path path = Path.of(f);
+ if ((lower.endsWith(".yaml") || lower.endsWith(".yml")) && Files.isRegularFile(path) && !answer.contains(path)) {
+ answer.add(path);
+ }
+ }
+ return answer;
+ }
+
+ private static CamelCatalog catalog() {
+ CamelCatalog answer = catalog;
+ if (answer == null) {
+ synchronized (YamlLoadFailureReport.class) {
+ if (catalog == null) {
+ catalog = new DefaultCamelCatalog();
+ }
+ answer = catalog;
+ }
+ }
+ return answer;
+ }
+
+ /**
+ * Prints the report for a route file whose reload failed in dev mode: the file watcher emits the reload failure
+ * event with the file name as the action.
+ */
+ public static final class ReloadFailureNotifier extends SimpleEventNotifierSupport {
+
+ private final Consumer<String> printer;
+
+ /** Logs the report, as {@link #logIfYamlLoadFailure(Throwable, List)} does. */
+ public ReloadFailureNotifier() {
+ this(null);
+ }
+
+ public ReloadFailureNotifier(Consumer<String> printer) {
+ this.printer = printer;
+ setIgnoreCamelContextEvents(false);
+ setIgnoreExchangeEvents(true);
+ // the reload events are dispatched under the route events flag: it must stay off
+ setIgnoreRouteEvents(false);
+ setIgnoreServiceEvents(true);
Review Comment:
β οΈ **Nit β redundant no-op setters:** `setIgnoreCamelContextEvents(false)` and `setIgnoreRouteEvents(false)` are both no-ops: `SimpleEventNotifierSupport` initialises those fields to `false` by default (they are not set in the superclass constructor). The calls don't override anything and may mislead a future reader into thinking the defaults are `true`.
The intent β that `ignoreRouteEvents` must remain `false` so `EventHelper.notifyContextReloadFailure` dispatches the event to this notifier β is valid and worth documenting, but a comment is clearer than no-op setters:
```suggestion
setIgnoreExchangeEvents(true);
setIgnoreServiceEvents(true);
// EventHelper.notifyContextReloadFailure skips notifiers where isIgnoreRouteEvents() is true;
// leave ignoreRouteEvents at its default (false) so CamelContextReloadFailureEvent reaches us.
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@camel.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] CAMEL-24851: when a YAML route file does not load, camel run logs the schema validator's report before the loader's error [camel]
Posted by "davsclaus (via GitHub)" <gi...@apache.org>.
davsclaus commented on code in PR #26636:
URL: https://github.com/apache/camel/pull/26636#discussion_r4057776734
##########
docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_23.adoc:
##########
@@ -782,6 +782,12 @@ cost of a slower startup. If you passed `--runtime=main` explicitly and want the
run, use `--runtime=jbang` (or leave the option out). The options `--background`, `--code`, `--open-api`,
`--empty` and `--mcp-stdio` are not supported with `--runtime=main`.
+When a YAML route file does not load, `camel run` now prints the report of `camel validate yaml` for the route
Review Comment:
This paragraph lands between the `--runtime=main` paragraph and its continuation ("Running an existing Maven project (`camel run pom.xml`) is unchangedβ¦"), so the `--runtime` explanation is now split in two. Suggest moving it after that continuation paragraph, or to the end of the `=== camel-jbang` section.
Also, CLAUDE.md keeps the upgrade guide migration-only. The part that matters for upgraders is the last sentence: the file watcher (camel-support) now emits `CamelContextReloadFailure` per failed file reload, so an existing listener will fire for a single-file failure that is not a full context reload. The description of the `camel run` report is a feature and could be trimmed to a short mention.
##########
dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ai/YamlLoadFailureReportTest.java:
##########
@@ -0,0 +1,108 @@
+/*
+ * 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.
+ */
+package org.apache.camel.dsl.jbang.core.commands.ai;
+
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.dsl.yaml.common.exception.YamlDeserializationException;
+import org.apache.camel.impl.engine.SimpleCamelContext;
+import org.apache.camel.impl.event.CamelContextReloadFailureEvent;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.io.TempDir;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/** CAMEL-24851: a YAML file that did not load gets the validator's report, which says what to write. */
+class YamlLoadFailureReportTest {
+
+ @TempDir
+ Path dir;
+
+ private static final String BAD_ROUTE = """
+ - route:
+ from:
+ uri: timer:tick
+ steps:
+ - pollEnrich:
+ uri: file:./order.json
+ - to:
+ uri: log:done
+ """;
+
+ @Test
+ void aDeserializationErrorIsAYamlLoadFailure() {
+ Exception loader
+ = new YamlDeserializationException("Error constructing YAML node id: pollEnrich: unsupported field: uri");
+ assertThat(YamlLoadFailureReport.isYamlLoadFailure(new RuntimeCamelException("Error starting Camel", loader))).isTrue();
+ assertThat(
+ YamlLoadFailureReport.isYamlLoadFailure(new RuntimeCamelException("Error pre-parsing resource: file:x.yaml")))
+ .isTrue();
+ assertThat(YamlLoadFailureReport.isYamlLoadFailure(new IllegalArgumentException("Invalid directory: archived/${x}")))
+ .isFalse();
+ }
+
+ @Test
+ void theReportSaysWhatToWrite() throws Exception {
+ Path route = dir.resolve("orders.camel.yaml");
+ Files.writeString(route, BAD_ROUTE);
+ List<String> lines = YamlLoadFailureReport.report(List.of(route));
+ assertThat(lines).hasSize(4);
+ assertThat(lines.get(0)).isEqualTo("The route file did not load. camel validate yaml says what to write:");
+ assertThat(lines.get(1)).isEqualTo(" orders.camel.yaml:");
+ // the schema message (with the CAMEL-24850 hint once it is in: "write pollEnrich: {expression: ...}")
+ assertThat(lines.get(2)).startsWith(" ").contains("pollEnrich").contains("'uri'");
+ assertThat(lines.get(3)).startsWith(" (camel validate yaml <file> for the full report");
+ }
+
+ @Test
+ void aFileTheValidatorAcceptsGivesNoReport() throws Exception {
+ Path route = dir.resolve("ok.camel.yaml");
+ Files.writeString(route, BAD_ROUTE.replace("uri: file:./order.json",
+ "expression:\n constant:\n expression: \"file:./order.json\""));
+ assertThat(YamlLoadFailureReport.report(List.of(route))).isEmpty();
+ }
+
+ @Test
+ void theRunFilesAreFilteredToLocalYaml() throws Exception {
+ Path route = dir.resolve("a.yaml");
+ Files.writeString(route, BAD_ROUTE);
+ List<Path> files
+ = YamlLoadFailureReport.yamlFiles(List.of("file:" + route, route.toString(), dir.resolve("Foo.java").toString(),
+ "github:apache:camel:x.yaml", dir.resolve("missing.yaml").toString()));
+ assertThat(files).containsExactly(route, route);
Review Comment:
This asserts that the same file listed twice (`file:` form and plain) is returned twice, which would print the report block twice. `Run` de-duplicates `files` (line 842) so it does not happen in practice, but a `distinct()` in `yamlFiles` would make the helper self-contained and let this assert `containsExactly(route)`, which reads as the intent.
##########
dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ai/YamlLoadFailureReport.java:
##########
@@ -0,0 +1,194 @@
+/*
+ * 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.
+ */
+package org.apache.camel.dsl.jbang.core.commands.ai;
+
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.Consumer;
+
+import org.apache.camel.catalog.CamelCatalog;
+import org.apache.camel.catalog.DefaultCamelCatalog;
+import org.apache.camel.dsl.yaml.common.exception.YamlDeserializationException;
+import org.apache.camel.impl.event.CamelContextReloadFailureEvent;
+import org.apache.camel.spi.CamelEvent;
+import org.apache.camel.support.SimpleEventNotifierSupport;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * When a YAML route file fails to load, the loader's message says which node is wrong but not what to write; the schema
+ * validator has the message that does, with its hints. This runs the validator on the route files of a failed start (or
+ * of a failed reload in dev mode) and prints its report, so the hints reach everyone who runs, whether they validated
+ * first or not (CAMEL-24851).
+ */
+public final class YamlLoadFailureReport {
+
+ private static final Logger LOG = LoggerFactory.getLogger(YamlLoadFailureReport.class);
+
+ private static volatile CamelCatalog catalog;
+
+ private YamlLoadFailureReport() {
+ }
+
+ /** Whether the failure comes from loading a YAML route file: a deserialization error or a pre-parse error. */
+ public static boolean isYamlLoadFailure(Throwable failure) {
+ for (Throwable t = failure; t != null; t = t.getCause() == t ? null : t.getCause()) {
+ if (t instanceof YamlDeserializationException) {
+ return true;
+ }
+ String msg = t.getMessage();
+ if (msg != null && (msg.startsWith("Error pre-parsing resource") || msg.contains("Error constructing YAML node")
+ || msg.contains("Error parsing YAML"))) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Logs the validator's report for the YAML files of a run whose start failed on loading one of them; nothing for
+ * any other failure. Logged (not printed) so that it is in the console and in the run's log file alike, where the
+ * camel-jbang-mcp tools read it, and before the loader's own error.
+ */
+ public static void logIfYamlLoadFailure(Throwable failure, List<String> files) {
+ if (!isYamlLoadFailure(failure)) {
+ return;
+ }
+ List<String> lines = report(yamlFiles(files));
+ if (!lines.isEmpty()) {
+ LOG.error(String.join(System.lineSeparator(), lines));
+ }
+ }
+
+ /**
+ * The validator's report for the YAML files, as lines to print: a header, then per file with problems its name and
+ * the messages, then a footer; empty when the validator finds nothing (then the loader's message is all there is).
+ */
+ public static List<String> report(List<Path> yamlFiles) {
+ List<String> lines = new ArrayList<>();
+ for (Path file : yamlFiles) {
+ if (!Files.isRegularFile(file)) {
+ continue;
+ }
+ List<String> errors;
+ try {
+ String content = Files.readString(file);
+ Path dir = file.toAbsolutePath().getParent();
+ errors = SourceValidator.validate(file.getFileName().toString(), content, catalog(), null, dir);
+ } catch (Exception e) {
Review Comment:
Correct that a validator problem must never hide the loader's error, but a `LOG.debug("Cannot validate {}", file, e)` here would make a broken validator diagnosable (same for the `catch (Exception ignore)` in `KameletMain.doFail`).
##########
dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ai/YamlLoadFailureReport.java:
##########
@@ -0,0 +1,194 @@
+/*
+ * 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.
+ */
+package org.apache.camel.dsl.jbang.core.commands.ai;
+
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.Consumer;
+
+import org.apache.camel.catalog.CamelCatalog;
+import org.apache.camel.catalog.DefaultCamelCatalog;
+import org.apache.camel.dsl.yaml.common.exception.YamlDeserializationException;
+import org.apache.camel.impl.event.CamelContextReloadFailureEvent;
+import org.apache.camel.spi.CamelEvent;
+import org.apache.camel.support.SimpleEventNotifierSupport;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * When a YAML route file fails to load, the loader's message says which node is wrong but not what to write; the schema
+ * validator has the message that does, with its hints. This runs the validator on the route files of a failed start (or
+ * of a failed reload in dev mode) and prints its report, so the hints reach everyone who runs, whether they validated
+ * first or not (CAMEL-24851).
+ */
+public final class YamlLoadFailureReport {
+
+ private static final Logger LOG = LoggerFactory.getLogger(YamlLoadFailureReport.class);
+
+ private static volatile CamelCatalog catalog;
+
+ private YamlLoadFailureReport() {
+ }
+
+ /** Whether the failure comes from loading a YAML route file: a deserialization error or a pre-parse error. */
+ public static boolean isYamlLoadFailure(Throwable failure) {
+ for (Throwable t = failure; t != null; t = t.getCause() == t ? null : t.getCause()) {
+ if (t instanceof YamlDeserializationException) {
+ return true;
+ }
+ String msg = t.getMessage();
+ if (msg != null && (msg.startsWith("Error pre-parsing resource") || msg.contains("Error constructing YAML node")
+ || msg.contains("Error parsing YAML"))) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Logs the validator's report for the YAML files of a run whose start failed on loading one of them; nothing for
+ * any other failure. Logged (not printed) so that it is in the console and in the run's log file alike, where the
+ * camel-jbang-mcp tools read it, and before the loader's own error.
+ */
+ public static void logIfYamlLoadFailure(Throwable failure, List<String> files) {
+ if (!isYamlLoadFailure(failure)) {
+ return;
+ }
+ List<String> lines = report(yamlFiles(files));
+ if (!lines.isEmpty()) {
+ LOG.error(String.join(System.lineSeparator(), lines));
+ }
+ }
+
+ /**
+ * The validator's report for the YAML files, as lines to print: a header, then per file with problems its name and
+ * the messages, then a footer; empty when the validator finds nothing (then the loader's message is all there is).
+ */
+ public static List<String> report(List<Path> yamlFiles) {
+ List<String> lines = new ArrayList<>();
+ for (Path file : yamlFiles) {
+ if (!Files.isRegularFile(file)) {
+ continue;
+ }
+ List<String> errors;
+ try {
+ String content = Files.readString(file);
+ Path dir = file.toAbsolutePath().getParent();
+ errors = SourceValidator.validate(file.getFileName().toString(), content, catalog(), null, dir);
+ } catch (Exception e) {
+ continue;
+ }
+ if (!errors.isEmpty()) {
+ if (lines.isEmpty()) {
+ lines.add("The route file did not load. camel validate yaml says what to write:");
+ }
+ lines.add(" " + file.getFileName() + ":");
+ for (String error : errors) {
+ lines.add(" " + error);
+ }
+ }
+ }
+ if (!lines.isEmpty()) {
+ lines.add(" (camel validate yaml <file> for the full report; the loader's error follows)");
+ }
+ return lines;
+ }
+
+ /** The YAML route files among the files of a run: local files ending in .yaml or .yml. */
+ public static List<Path> yamlFiles(List<String> files) {
+ List<Path> answer = new ArrayList<>();
+ if (files == null) {
+ return answer;
+ }
+ for (String f : files) {
+ if (f == null) {
+ continue;
+ }
+ if (f.startsWith("file:")) {
+ f = f.substring(5);
+ }
+ if (f.contains(":")) {
Review Comment:
`f.contains(":")` also skips Windows absolute paths (`C:\routes\a.yaml`), so those users silently get no report. `Run.java` (around line 1136) makes the same decision with `ResourceHelper.hasScheme(file) || file.startsWith("github:")`, which is drive-letter safe; reusing it keeps the two in sync (needs the `org.apache.camel.support.ResourceHelper` import).
```suggestion
if (ResourceHelper.hasScheme(f) || f.startsWith("github:")) {
```
##########
dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java:
##########
@@ -173,8 +176,23 @@ public static void main(String... args) throws Exception {
System.exit(code);
}
+ /**
+ * Called with the exception when Camel fails to start, before the error is logged: the CLI uses it to report what
+ * the schema validator says about a YAML route file that did not load (CAMEL-24851).
+ */
+ public void setStartFailureListener(Consumer<Exception> startFailureListener) {
+ this.startFailureListener = startFailureListener;
+ }
+
@Override
protected void doFail(Exception e) {
+ if (startFailureListener != null) {
+ try {
+ startFailureListener.accept(e);
+ } catch (Exception ignore) {
Review Comment:
Same as in `YamlLoadFailureReport.report`: swallowing is right, but a `LOG.debug` with the exception would help when the listener itself misbehaves.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@camel.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] CAMEL-24851: when a YAML route file does not load, camel run logs the schema validator's report before the loader's error [camel]
Posted by "github-actions[bot] (via GitHub)" <gi...@apache.org>.
github-actions[bot] commented on PR #26636:
URL: https://github.com/apache/camel/pull/26636#issuecomment-5751358816
:star2: Thank you for your contribution to the Apache Camel project! :star2:
:robot: CI automation will test this PR automatically.
:camel: Apache Camel Committers, please review the following items:
* First-time contributors **require MANUAL approval** for the GitHub Actions to run
* You can use the command `/component-test (camel-)component-name1 (camel-)component-name2..` to request a test from the test bot although they are normally detected and executed by CI.
* You can label PRs using `skip-tests` and `test-dependents` to fine-tune the checks executed by this PR.
* Build and test logs are available in the summary page. **Only** [Apache Camel committers](https://camel.apache.org/community/team/#committers) have access to the summary.
:warning: Be careful when sharing logs. Review their contents before sharing them publicly.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@camel.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] CAMEL-24851: when a YAML route file does not load, camel run logs the schema validator's report before the loader's error [camel]
Posted by "github-actions[bot] (via GitHub)" <gi...@apache.org>.
github-actions[bot] commented on PR #26636:
URL: https://github.com/apache/camel/pull/26636#issuecomment-5751487019
<!-- ci-tested-modules -->
:test_tube: **CI tested the following changed modules:**
- `core/camel-support`
- `docs`
- `dsl/camel-jbang/camel-jbang-core`
- `dsl/camel-kamelet-main`
> :information_source: Dependent modules were not tested because the total number of affected modules exceeded the threshold (50). Use the `test-dependents` label to force testing all dependents.
---
<details><summary>:microscope: Scalpel shadow comparison β Scalpel: 563 of 692 tested, 25 compile-only β current: 563 all tested</summary>
[Maveniverse Scalpel](https://github.com/maveniverse/scalpel) detected **591 affected modules** (current approach: 563).
**Skip-tests mode would test 563 modules** (4 direct + 562 downstream), **skip tests for 25** (generated code, meta-modules)
<details><summary>:warning: Modules only in Scalpel (28)</summary>
- `apache-camel`
- `camel-allcomponents`
- `camel-catalog`
- `camel-catalog-console`
- `camel-catalog-maven`
- `camel-catalog-suggest`
- `camel-componentdsl`
- `camel-endpointdsl`
- `camel-endpointdsl-support`
- `camel-itest`
- `camel-jbang-core`
- `camel-jbang-it`
- `camel-jbang-main`
- `camel-jbang-plugin-edit`
- `camel-jbang-plugin-generate`
- `camel-jbang-plugin-kubernetes`
- `camel-jbang-plugin-test`
- `camel-kamelet-main`
- `camel-launcher`
- `camel-report-maven-plugin`
- `camel-route-parser`
- `camel-salesforce-maven-plugin`
- `camel-yaml-dsl`
- `camel-yaml-dsl-deserializers`
- `camel-yaml-dsl-maven-plugin`
- `coverage`
- `docs`
- `dummy-component`
</details>
<details><summary>Modules Scalpel would test (563)</summary>
- `archetypes` β downstream of org.apache.camel:camel-support
- `camel-a2a` β downstream of org.apache.camel:camel-support
- `camel-activemq` β downstream of org.apache.camel:camel-core-model
- `camel-activemq6` β downstream of org.apache.camel:camel-core-model
- `camel-ai-observability` β downstream of org.apache.camel:camel-support
- `camel-ai-observability-api` β downstream of org.apache.camel:camel-support
- `camel-ai-parent` β downstream of org.apache.camel:camel-core-model
- `camel-ai-resource` β downstream of org.apache.camel:camel-support
- `camel-ai-tool` β downstream of org.apache.camel:camel-support
- `camel-alibaba-common` β downstream of org.apache.camel:camel-support
- `camel-alibaba-eventbridge` β downstream of org.apache.camel:camel-support
- `camel-alibaba-fc` β downstream of org.apache.camel:camel-support
- `camel-alibaba-kms` β downstream of org.apache.camel:camel-support
- `camel-alibaba-mns` β downstream of org.apache.camel:camel-support
- `camel-alibaba-oss` β downstream of org.apache.camel:camel-support
- `camel-alibaba-ots` β downstream of org.apache.camel:camel-support
- `camel-alibaba-parent` β downstream of org.apache.camel:camel-core-model
- `camel-alibaba-sls` β downstream of org.apache.camel:camel-support
- `camel-alibaba-sms` β downstream of org.apache.camel:camel-support
- `camel-amqp` β downstream of org.apache.camel:camel-core-model
- `camel-api-component-maven-plugin` β downstream of org.apache.camel:camel-test-junit6
- `camel-arangodb` β downstream of org.apache.camel:camel-support
- `camel-archetype-api-component` β downstream of org.apache.camel:camel-support
- `camel-archetype-component` β downstream of org.apache.camel:camel-support
- `camel-archetype-dataformat` β downstream of org.apache.camel:camel-support
- `camel-archetype-java` β downstream of org.apache.camel:camel-support
- `camel-archetype-main` β downstream of org.apache.camel:camel-support
- `camel-as2` β downstream of org.apache.camel:camel-support
- `camel-as2-api` β downstream of org.apache.camel:camel-core-model
- `camel-as2-parent` β downstream of org.apache.camel:camel-core-model
- `camel-asn1` β downstream of org.apache.camel:camel-support
- `camel-asterisk` β downstream of org.apache.camel:camel-support
- `camel-atmosphere-websocket` β downstream of org.apache.camel:camel-support
- `camel-atom` β downstream of org.apache.camel:camel-support
- `camel-attachments` β downstream of org.apache.camel:camel-support
- `camel-avro` β downstream of org.apache.camel:camel-support
- `camel-avro-rpc` β downstream of org.apache.camel:camel-support
- `camel-avro-rpc-jetty` β downstream of org.apache.camel:camel-core-model
- `camel-avro-rpc-parent` β downstream of org.apache.camel:camel-core-model
- `camel-avro-rpc-spi` β downstream of org.apache.camel:camel-core-model
- `camel-aws-bedrock` β downstream of org.apache.camel:camel-support
- `camel-aws-cloudtrail` β downstream of org.apache.camel:camel-support
- `camel-aws-common` β downstream of org.apache.camel:camel-support
- `camel-aws-config` β downstream of org.apache.camel:camel-support
- `camel-aws-parameter-store` β downstream of org.apache.camel:camel-support
- `camel-aws-parent` β downstream of org.apache.camel:camel-core-model
- `camel-aws-secrets-manager` β downstream of org.apache.camel:camel-support
- `camel-aws-security-hub` β downstream of org.apache.camel:camel-support
- `camel-aws2-athena` β downstream of org.apache.camel:camel-support
- `camel-aws2-comprehend` β downstream of org.apache.camel:camel-support
- `camel-aws2-cw` β downstream of org.apache.camel:camel-support
- `camel-aws2-ddb` β downstream of org.apache.camel:camel-support
- `camel-aws2-ec2` β downstream of org.apache.camel:camel-support
- `camel-aws2-ecs` β downstream of org.apache.camel:camel-support
- `camel-aws2-eks` β downstream of org.apache.camel:camel-support
- `camel-aws2-eventbridge` β downstream of org.apache.camel:camel-support
- `camel-aws2-iam` β downstream of org.apache.camel:camel-support
- `camel-aws2-kinesis` β downstream of org.apache.camel:camel-support
- `camel-aws2-kms` β downstream of org.apache.camel:camel-support
- `camel-aws2-lambda` β downstream of org.apache.camel:camel-support
- `camel-aws2-mq` β downstream of org.apache.camel:camel-support
- `camel-aws2-msk` β downstream of org.apache.camel:camel-support
- `camel-aws2-polly` β downstream of org.apache.camel:camel-support
- `camel-aws2-redshift` β downstream of org.apache.camel:camel-support
- `camel-aws2-rekognition` β downstream of org.apache.camel:camel-support
- `camel-aws2-s3` β downstream of org.apache.camel:camel-support
- `camel-aws2-s3-vectors` β downstream of org.apache.camel:camel-support
- `camel-aws2-ses` β downstream of org.apache.camel:camel-support
- `camel-aws2-sns` β downstream of org.apache.camel:camel-support
- `camel-aws2-sqs` β downstream of org.apache.camel:camel-support
- `camel-aws2-step-functions` β downstream of org.apache.camel:camel-support
- `camel-aws2-sts` β downstream of org.apache.camel:camel-support
- `camel-aws2-textract` β downstream of org.apache.camel:camel-support
- `camel-aws2-timestream` β downstream of org.apache.camel:camel-support
- `camel-aws2-transcribe` β downstream of org.apache.camel:camel-support
- `camel-aws2-translate` β downstream of org.apache.camel:camel-support
- `camel-azure-common` β downstream of org.apache.camel:camel-core-model
- `camel-azure-cosmosdb` β downstream of org.apache.camel:camel-support
- `camel-azure-eventgrid` β downstream of org.apache.camel:camel-support
- `camel-azure-eventhubs` β downstream of org.apache.camel:camel-support
- `camel-azure-files` β downstream of org.apache.camel:camel-core-model
- `camel-azure-functions` β downstream of org.apache.camel:camel-support
- `camel-azure-key-vault` β downstream of org.apache.camel:camel-support
- `camel-azure-parent` β downstream of org.apache.camel:camel-core-model
- `camel-azure-schema-registry` β downstream of org.apache.camel:camel-support
- `camel-azure-servicebus` β downstream of org.apache.camel:camel-support
- `camel-azure-storage-blob` β downstream of org.apache.camel:camel-support
- `camel-azure-storage-datalake` β downstream of org.apache.camel:camel-support
- `camel-azure-storage-queue` β downstream of org.apache.camel:camel-support
- `camel-barcode` β downstream of org.apache.camel:camel-support
- `camel-base` β downstream of org.apache.camel:camel-support
- `camel-base-engine` β downstream of org.apache.camel:camel-base
- `camel-base64` β downstream of org.apache.camel:camel-support
- `camel-bean` β downstream of org.apache.camel:camel-support
- `camel-bean-validator` β downstream of org.apache.camel:camel-support
- `camel-beanio` β downstream of org.apache.camel:camel-support
- `camel-bindy` β downstream of org.apache.camel:camel-support
- `camel-bonita` β downstream of org.apache.camel:camel-support
- `camel-box` β downstream of org.apache.camel:camel-support
- `camel-box-api` β downstream of org.apache.camel:camel-core-model
- `camel-box-parent` β downstream of org.apache.camel:camel-core-model
- `camel-braintree` β downstream of org.apache.camel:camel-support
- `camel-browse` β downstream of org.apache.camel:camel-support
- `camel-caffeine` β downstream of org.apache.camel:camel-support
- `camel-camunda` β downstream of org.apache.camel:camel-support
- `camel-cassandraql` β downstream of org.apache.camel:camel-support
- `camel-catalog-common` β downstream of org.apache.camel:camel-support
- `camel-cbor` β downstream of org.apache.camel:camel-support
- `camel-chatscript` β downstream of org.apache.camel:camel-support
- `camel-chunk` β downstream of org.apache.camel:camel-support
- `camel-cli-connector` β downstream of org.apache.camel:camel-support
- `camel-cli-debug` β downstream of org.apache.camel:camel-cli-connector
- `camel-clickhouse` β downstream of org.apache.camel:camel-support
- `camel-clickup` β downstream of org.apache.camel:camel-support
- `camel-cloudevents` β downstream of org.apache.camel:camel-support
- `camel-cluster` β downstream of org.apache.camel:camel-core-model
- `camel-cm-sms` β downstream of org.apache.camel:camel-support
- `camel-coap` β downstream of org.apache.camel:camel-support
- `camel-cometd` β downstream of org.apache.camel:camel-support
- `camel-console` β downstream of org.apache.camel:camel-support
- `camel-consul` β downstream of org.apache.camel:camel-support
- `camel-controlbus` β downstream of org.apache.camel:camel-support
- `camel-core` β downstream of org.apache.camel:camel-core-engine
- `camel-core-all` β downstream of org.apache.camel:camel-support
- `camel-core-engine` β downstream of org.apache.camel:camel-support
- `camel-core-languages` β downstream of org.apache.camel:camel-support
- `camel-core-model` β downstream of org.apache.camel:camel-support
- `camel-core-processor` β downstream of org.apache.camel:camel-support
- `camel-core-reifier` β downstream of org.apache.camel:camel-support
- `camel-core-xml` β downstream of org.apache.camel:camel-core-engine
- `camel-couchbase` β downstream of org.apache.camel:camel-support
- `camel-couchdb` β downstream of org.apache.camel:camel-support
- `camel-cron` β downstream of org.apache.camel:camel-support
- `camel-crypto` β downstream of org.apache.camel:camel-support
- `camel-crypto-pgp` β downstream of org.apache.camel:camel-support
- `camel-csv` β downstream of org.apache.camel:camel-support
- `camel-cxf-common` β downstream of org.apache.camel:camel-support
- `camel-cxf-parent` β downstream of org.apache.camel:camel-core-model
- `camel-cxf-rest` β downstream of org.apache.camel:camel-support
- `camel-cxf-soap` β downstream of org.apache.camel:camel-support
- `camel-cxf-spring-common` β downstream of org.apache.camel:camel-support
- `camel-cxf-spring-rest` β downstream of org.apache.camel:camel-core-model
- `camel-cxf-spring-soap` β downstream of org.apache.camel:camel-core-model
- `camel-cxf-spring-transport` β downstream of org.apache.camel:camel-core-model
- `camel-cxf-transport` β downstream of org.apache.camel:camel-support
- `camel-cyberark-vault` β downstream of org.apache.camel:camel-support
- `camel-dapr` β downstream of org.apache.camel:camel-support
- `camel-dataformat` β downstream of org.apache.camel:camel-support
- `camel-dataset` β downstream of org.apache.camel:camel-core-model
- `camel-datasonnet` β downstream of org.apache.camel:camel-support
- `camel-dataweave` β downstream of org.apache.camel:camel-core-model
- `camel-debezium-common` β downstream of org.apache.camel:camel-support
- `camel-debezium-common-parent` β downstream of org.apache.camel:camel-support
- `camel-debezium-db2` β downstream of org.apache.camel:camel-core-model
- `camel-debezium-maven-plugin` β downstream of org.apache.camel:camel-support
- `camel-debezium-mongodb` β downstream of org.apache.camel:camel-core-model
- `camel-debezium-mysql` β downstream of org.apache.camel:camel-core-model
- `camel-debezium-oracle` β downstream of org.apache.camel:camel-core-model
- `camel-debezium-parent` β downstream of org.apache.camel:camel-core-model
- `camel-debezium-postgres` β downstream of org.apache.camel:camel-core-model
- `camel-debezium-sqlserver` β downstream of org.apache.camel:camel-core-model
- `camel-debug` β downstream of org.apache.camel:camel-support
- `camel-dfdl` β downstream of org.apache.camel:camel-support
- `camel-dhis2` β downstream of org.apache.camel:camel-support
- `camel-dhis2-api` β downstream of org.apache.camel:camel-support
- `camel-dhis2-parent` β downstream of org.apache.camel:camel-core-model
- `camel-diagram` β downstream of org.apache.camel:camel-core-model
- `camel-direct` β downstream of org.apache.camel:camel-support
- `camel-disruptor` β downstream of org.apache.camel:camel-support
- `camel-djl` β downstream of org.apache.camel:camel-support
- `camel-dns` β downstream of org.apache.camel:camel-support
- `camel-docker` β downstream of org.apache.camel:camel-support
- `camel-docling` β downstream of org.apache.camel:camel-support
- `camel-drill` β downstream of org.apache.camel:camel-support
- `camel-dropbox` β downstream of org.apache.camel:camel-support
- `camel-dsl-modeline` β downstream of org.apache.camel:camel-support
- `camel-dsl-support` β downstream of org.apache.camel:camel-support
- `camel-duckdb` β downstream of org.apache.camel:camel-support
- `camel-dynamic-router` β downstream of org.apache.camel:camel-support
- `camel-ehcache` β downstream of org.apache.camel:camel-support
- `camel-elasticsearch` β downstream of org.apache.camel:camel-support
- `camel-elasticsearch-rest-client` β downstream of org.apache.camel:camel-support
- `camel-event` β downstream of org.apache.camel:camel-support
- `camel-exec` β downstream of org.apache.camel:camel-support
- `camel-fastjson` β downstream of org.apache.camel:camel-support
- `camel-fhir` β downstream of org.apache.camel:camel-support
- `camel-fhir-api` β downstream of org.apache.camel:camel-support
- `camel-fhir-parent` β downstream of org.apache.camel:camel-core-model
- `camel-file` β downstream of org.apache.camel:camel-support
- `camel-file-watch` β downstream of org.apache.camel:camel-support
- `camel-flatpack` β downstream of org.apache.camel:camel-core-model
- `camel-flink` β downstream of org.apache.camel:camel-support
- `camel-flowable` β downstream of org.apache.camel:camel-support
- `camel-fop` β downstream of org.apache.camel:camel-support
- `camel-fory` β downstream of org.apache.camel:camel-support
- `camel-freemarker` β downstream of org.apache.camel:camel-support
- `camel-ftp` β downstream of org.apache.camel:camel-core-model
- `camel-ftp-common` β downstream of org.apache.camel:camel-core-model
- `camel-geocoder` β downstream of org.apache.camel:camel-support
- `camel-git` β downstream of org.apache.camel:camel-support
- `camel-github2` β downstream of org.apache.camel:camel-support
- `camel-google-bigquery` β downstream of org.apache.camel:camel-support
- `camel-google-calendar` β downstream of org.apache.camel:camel-support
- `camel-google-common` β downstream of org.apache.camel:camel-support
- `camel-google-drive` β downstream of org.apache.camel:camel-support
- `camel-google-firestore` β downstream of org.apache.camel:camel-support
- `camel-google-functions` β downstream of org.apache.camel:camel-support
- `camel-google-mail` β downstream of org.apache.camel:camel-support
- `camel-google-parent` β downstream of org.apache.camel:camel-core-model
- `camel-google-pubsub` β downstream of org.apache.camel:camel-support
- `camel-google-secret-manager` β downstream of org.apache.camel:camel-support
- `camel-google-sheets` β downstream of org.apache.camel:camel-support
- `camel-google-speech-to-text` β downstream of org.apache.camel:camel-support
- `camel-google-storage` β downstream of org.apache.camel:camel-support
- `camel-google-text-to-speech` β downstream of org.apache.camel:camel-support
- `camel-google-vertexai` β downstream of org.apache.camel:camel-support
- `camel-google-vision` β downstream of org.apache.camel:camel-support
- `camel-graphql` β downstream of org.apache.camel:camel-support
- `camel-grok` β downstream of org.apache.camel:camel-support
- `camel-groovy` β downstream of org.apache.camel:camel-support
- `camel-grpc` β downstream of org.apache.camel:camel-support
- `camel-gson` β downstream of org.apache.camel:camel-support
- `camel-hashicorp-vault` β downstream of org.apache.camel:camel-support
- `camel-hazelcast` β downstream of org.apache.camel:camel-support
- `camel-health` β downstream of org.apache.camel:camel-core-engine
- `camel-hivemq` β downstream of org.apache.camel:camel-support
- `camel-hl7` β downstream of org.apache.camel:camel-core-model
- `camel-http` β downstream of org.apache.camel:camel-core-model
- `camel-http-base` β downstream of org.apache.camel:camel-support
- `camel-http-common` β downstream of org.apache.camel:camel-support
- `camel-huawei-parent` β downstream of org.apache.camel:camel-core-model
- `camel-huaweicloud-common` β downstream of org.apache.camel:camel-support
- `camel-huaweicloud-dms` β downstream of org.apache.camel:camel-support
- `camel-huaweicloud-frs` β downstream of org.apache.camel:camel-support
- `camel-huaweicloud-functiongraph` β downstream of org.apache.camel:camel-support
- `camel-huaweicloud-iam` β downstream of org.apache.camel:camel-support
- `camel-huaweicloud-imagerecognition` β downstream of org.apache.camel:camel-support
- `camel-huaweicloud-obs` β downstream of org.apache.camel:camel-support
- `camel-huaweicloud-smn` β downstream of org.apache.camel:camel-support
- `camel-huggingface` β downstream of org.apache.camel:camel-support
- `camel-ibm-cos` β downstream of org.apache.camel:camel-support
- `camel-ibm-parent` β downstream of org.apache.camel:camel-core-model
- `camel-ibm-secrets-manager` β downstream of org.apache.camel:camel-support
- `camel-ibm-watson-discovery` β downstream of org.apache.camel:camel-support
- `camel-ibm-watson-language` β downstream of org.apache.camel:camel-support
- `camel-ibm-watson-speech-to-text` β downstream of org.apache.camel:camel-support
- `camel-ibm-watson-text-to-speech` β downstream of org.apache.camel:camel-support
- `camel-ibm-watsonx-ai` β downstream of org.apache.camel:camel-support
- `camel-ibm-watsonx-data` β downstream of org.apache.camel:camel-support
- `camel-ical` β downstream of org.apache.camel:camel-support
- `camel-iggy` β downstream of org.apache.camel:camel-support
- `camel-ignite` β downstream of org.apache.camel:camel-support
- `camel-infinispan` β downstream of org.apache.camel:camel-core-model
- `camel-infinispan-common` β downstream of org.apache.camel:camel-support
- `camel-infinispan-embedded` β downstream of org.apache.camel:camel-core-model
- `camel-infinispan-parent` β downstream of org.apache.camel:camel-core-model
- `camel-influxdb` β downstream of org.apache.camel:camel-support
- `camel-influxdb2` β downstream of org.apache.camel:camel-support
- `camel-iso8583` β downstream of org.apache.camel:camel-support
- `camel-jackson` β downstream of org.apache.camel:camel-core-model
- `camel-jackson-avro` β downstream of org.apache.camel:camel-support
- `camel-jackson-protobuf` β downstream of org.apache.camel:camel-support
- `camel-jackson3` β downstream of org.apache.camel:camel-core-model
- `camel-jackson3-avro` β downstream of org.apache.camel:camel-support
- `camel-jackson3-protobuf` β downstream of org.apache.camel:camel-support
- `camel-jackson3xml` β downstream of org.apache.camel:camel-support
- `camel-jacksonxml` β downstream of org.apache.camel:camel-support
- `camel-jactl` β downstream of org.apache.camel:camel-support
- `camel-jandex` β downstream of org.apache.camel:camel-support
- `camel-jasypt` β downstream of org.apache.camel:camel-base
- `camel-java-io` β downstream of org.apache.camel:camel-core-engine
- `camel-java-joor-dsl` β downstream of org.apache.camel:camel-core-languages
- `camel-javascript` β downstream of org.apache.camel:camel-support
- `camel-jaxb` β downstream of org.apache.camel:camel-core-model
- `camel-jbang-console` β downstream of org.apache.camel:camel-support
- `camel-jbang-core` β dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java, dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ai/YamlLoadFailureReport.java, dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ai/YamlLoadFailureReportTest.java
- `camel-jbang-mcp` β downstream of org.apache.camel:camel-jbang-core
- `camel-jbang-plugin-mcp` β downstream of org.apache.camel:camel-jbang-core
- `camel-jbang-plugin-route-parser` β downstream of org.apache.camel:camel-jbang-core
- `camel-jbang-plugin-tui` β downstream of org.apache.camel:camel-jbang-core
- `camel-jbang-plugin-validate` β downstream of org.apache.camel:camel-jbang-core
- `camel-jcache` β downstream of org.apache.camel:camel-support
- `camel-jcr` β downstream of org.apache.camel:camel-support
- `camel-jdbc` β downstream of org.apache.camel:camel-support
- `camel-jetty` β downstream of org.apache.camel:camel-support
- `camel-jetty-common` β downstream of org.apache.camel:camel-core-model
- `camel-jfr` β downstream of org.apache.camel:camel-support
- `camel-jgroups` β downstream of org.apache.camel:camel-support
- `camel-jgroups-raft` β downstream of org.apache.camel:camel-support
- `camel-jira` β downstream of org.apache.camel:camel-support
- `camel-jms` β downstream of org.apache.camel:camel-support
- `camel-jmx` β downstream of org.apache.camel:camel-support
- `camel-jolt` β downstream of org.apache.camel:camel-support
- `camel-jooq` β downstream of org.apache.camel:camel-support
- `camel-joor` β downstream of org.apache.camel:camel-support
- `camel-jpa` β downstream of org.apache.camel:camel-support
- `camel-jq` β downstream of org.apache.camel:camel-support
- `camel-jsch` β downstream of org.apache.camel:camel-core-model
- `camel-jslt` β downstream of org.apache.camel:camel-support
- `camel-json-validator` β downstream of org.apache.camel:camel-support
- `camel-jsonapi` β downstream of org.apache.camel:camel-support
- `camel-jsonata` β downstream of org.apache.camel:camel-support
- `camel-jsonb` β downstream of org.apache.camel:camel-support
- `camel-jsonpath` β downstream of org.apache.camel:camel-support
- `camel-jsoup` β downstream of org.apache.camel:camel-support
- `camel-jt400` β downstream of org.apache.camel:camel-support
- `camel-jta` β downstream of org.apache.camel:camel-support
- `camel-jte` β downstream of org.apache.camel:camel-support
- `camel-kafka` β downstream of org.apache.camel:camel-support
- `camel-kamelet` β downstream of org.apache.camel:camel-core-model
- `camel-kamelet-main` β dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
- `camel-kamelet-main-support` β downstream of org.apache.camel:camel-main
- `camel-keycloak` β downstream of org.apache.camel:camel-support
- `camel-knative` β downstream of org.apache.camel:camel-support
- `camel-knative-api` β downstream of org.apache.camel:camel-support
- `camel-knative-http` β downstream of org.apache.camel:camel-core-model
- `camel-knative-parent` β downstream of org.apache.camel:camel-core-model
- `camel-kserve` β downstream of org.apache.camel:camel-support
- `camel-kubernetes` β downstream of org.apache.camel:camel-support
- `camel-kudu` β downstream of org.apache.camel:camel-support
- `camel-langchain4j-agent` β downstream of org.apache.camel:camel-support
- `camel-langchain4j-agent-api` β downstream of org.apache.camel:camel-core-model
- `camel-langchain4j-chat` β downstream of org.apache.camel:camel-support
- `camel-langchain4j-core` β downstream of org.apache.camel:camel-support
- `camel-langchain4j-embeddings` β downstream of org.apache.camel:camel-support
- `camel-langchain4j-embeddingstore` β downstream of org.apache.camel:camel-support
- `camel-langchain4j-embeddingstore-api` β downstream of org.apache.camel:camel-core-model
- `camel-langchain4j-ingest` β downstream of org.apache.camel:camel-support
- `camel-langchain4j-tokenizer` β downstream of org.apache.camel:camel-support
- `camel-langchain4j-web-search` β downstream of org.apache.camel:camel-support
- `camel-language` β downstream of org.apache.camel:camel-support
- `camel-launcher-container` β downstream of org.apache.camel:camel-launcher
- `camel-ldap` β downstream of org.apache.camel:camel-support
- `camel-ldif` β downstream of org.apache.camel:camel-support
- `camel-log` β downstream of org.apache.camel:camel-support
- `camel-lra` β downstream of org.apache.camel:camel-core-model
- `camel-lucene` β downstream of org.apache.camel:camel-support
- `camel-lumberjack` β downstream of org.apache.camel:camel-support
- `camel-lzf` β downstream of org.apache.camel:camel-support
- `camel-mail` β downstream of org.apache.camel:camel-support
- `camel-mail-microsoft-oauth` β downstream of org.apache.camel:camel-core-model
- `camel-main` β downstream of org.apache.camel:camel-support
- `camel-management` β downstream of org.apache.camel:camel-core-engine
- `camel-mapstruct` β downstream of org.apache.camel:camel-support
- `camel-master` β downstream of org.apache.camel:camel-support
- `camel-maven-plugin` β downstream of org.apache.camel:camel-spring-main
- `camel-mcp-server` β downstream of org.apache.camel:camel-core-model
- `camel-mcp-server-api` β downstream of org.apache.camel:camel-support
- `camel-mdc` β downstream of org.apache.camel:camel-support
- `camel-metrics` β downstream of org.apache.camel:camel-support
- `camel-micrometer` β downstream of org.apache.camel:camel-support
- `camel-micrometer-observability` β downstream of org.apache.camel:camel-core-model
- `camel-micrometer-prometheus` β downstream of org.apache.camel:camel-core-model
- `camel-microprofile-config` β downstream of org.apache.camel:camel-support
- `camel-microprofile-fault-tolerance` β downstream of org.apache.camel:camel-support
- `camel-microprofile-health` β downstream of org.apache.camel:camel-core-model
- `camel-microprofile-parent` β downstream of org.apache.camel:camel-core-model
- `camel-milo` β downstream of org.apache.camel:camel-support
- `camel-milvus` β downstream of org.apache.camel:camel-support
- `camel-mina` β downstream of org.apache.camel:camel-support
- `camel-mina-sftp` β downstream of org.apache.camel:camel-core-model
- `camel-minio` β downstream of org.apache.camel:camel-support
- `camel-mllp` β downstream of org.apache.camel:camel-support
- `camel-mock` β downstream of org.apache.camel:camel-support
- `camel-mongodb` β downstream of org.apache.camel:camel-support
- `camel-mongodb-gridfs` β downstream of org.apache.camel:camel-support
- `camel-mustache` β downstream of org.apache.camel:camel-support
- `camel-mvel` β downstream of org.apache.camel:camel-support
- `camel-mybatis` β downstream of org.apache.camel:camel-core-model
- `camel-nats` β downstream of org.apache.camel:camel-support
- `camel-neo4j` β downstream of org.apache.camel:camel-support
- `camel-netty` β downstream of org.apache.camel:camel-support
- `camel-netty-http` β downstream of org.apache.camel:camel-core-model
- `camel-oaipmh` β downstream of org.apache.camel:camel-support
- `camel-oauth` β downstream of org.apache.camel:camel-support
- `camel-observability-services` β downstream of org.apache.camel:camel-core-model
- `camel-observation` β downstream of org.apache.camel:camel-support
- `camel-ocsf` β downstream of org.apache.camel:camel-support
- `camel-ognl` β downstream of org.apache.camel:camel-support
- `camel-olingo2` β downstream of org.apache.camel:camel-support
- `camel-olingo2-api` β downstream of org.apache.camel:camel-core-model
- `camel-olingo2-parent` β downstream of org.apache.camel:camel-core-model
- `camel-olingo4` β downstream of org.apache.camel:camel-support
- `camel-olingo4-api` β downstream of org.apache.camel:camel-support
- `camel-olingo4-parent` β downstream of org.apache.camel:camel-core-model
- `camel-once` β downstream of org.apache.camel:camel-support
- `camel-opa` β downstream of org.apache.camel:camel-support
- `camel-openai` β downstream of org.apache.camel:camel-support
- `camel-openapi-java` β downstream of org.apache.camel:camel-core-model
- `camel-openapi-rest-dsl-generator` β downstream of org.apache.camel:camel-core-engine
- `camel-openapi-validator` β downstream of org.apache.camel:camel-core-model
- `camel-opensearch` β downstream of org.apache.camel:camel-support
- `camel-openstack` β downstream of org.apache.camel:camel-support
- `camel-opentelemetry` β downstream of org.apache.camel:camel-support
- `camel-opentelemetry-metrics` β downstream of org.apache.camel:camel-support
- `camel-opentelemetry2` β downstream of org.apache.camel:camel-core-model
- `camel-optaplanner` β downstream of org.apache.camel:camel-support
- `camel-paho` β downstream of org.apache.camel:camel-support
- `camel-paho-mqtt5` β downstream of org.apache.camel:camel-support
- `camel-parquet-avro` β downstream of org.apache.camel:camel-support
- `camel-pdf` β downstream of org.apache.camel:camel-support
- `camel-pg-replication-slot` β downstream of org.apache.camel:camel-support
- `camel-pgevent` β downstream of org.apache.camel:camel-support
- `camel-pgvector` β downstream of org.apache.camel:camel-support
- `camel-pinecone` β downstream of org.apache.camel:camel-support
- `camel-platform-http` β downstream of org.apache.camel:camel-core-model
- `camel-platform-http-jolokia` β downstream of org.apache.camel:camel-support
- `camel-platform-http-main` β downstream of org.apache.camel:camel-core-model
- `camel-platform-http-vertx` β downstream of org.apache.camel:camel-core-model
- `camel-plc4x` β downstream of org.apache.camel:camel-support
- `camel-pqc` β downstream of org.apache.camel:camel-support
- `camel-printer` β downstream of org.apache.camel:camel-support
- `camel-protobuf` β downstream of org.apache.camel:camel-support
- `camel-pubnub` β downstream of org.apache.camel:camel-support
- `camel-pulsar` β downstream of org.apache.camel:camel-support
- `camel-python` β downstream of org.apache.camel:camel-support
- `camel-python3` β downstream of org.apache.camel:camel-support
- `camel-qdrant` β downstream of org.apache.camel:camel-support
- `camel-quartz` β downstream of org.apache.camel:camel-support
- `camel-quickfix` β downstream of org.apache.camel:camel-support
- `camel-quickjs` β downstream of org.apache.camel:camel-support
- `camel-reactive-streams` β downstream of org.apache.camel:camel-core-model
- `camel-reactor` β downstream of org.apache.camel:camel-support
- `camel-redis` β downstream of org.apache.camel:camel-support
- `camel-ref` β downstream of org.apache.camel:camel-support
- `camel-resilience4j` β downstream of org.apache.camel:camel-support
- `camel-resilience4j-micrometer` β downstream of org.apache.camel:camel-core-model
- `camel-resourceresolver-github` β downstream of org.apache.camel:camel-support
- `camel-rest` β downstream of org.apache.camel:camel-support
- `camel-rest-openapi` β downstream of org.apache.camel:camel-support
- `camel-rest-postman` β downstream of org.apache.camel:camel-support
- `camel-restdsl-openapi-plugin` β downstream of org.apache.camel:camel-servlet
- `camel-robotframework` β downstream of org.apache.camel:camel-support
- `camel-rocketmq` β downstream of org.apache.camel:camel-support
- `camel-rss` β downstream of org.apache.camel:camel-support
- `camel-rxjava` β downstream of org.apache.camel:camel-support
- `camel-saga` β downstream of org.apache.camel:camel-support
- `camel-salesforce` β downstream of org.apache.camel:camel-core-model
- `camel-salesforce-codegen` β downstream of org.apache.camel:camel-core-model
- `camel-salesforce-parent` β downstream of org.apache.camel:camel-core-model
- `camel-sap-netweaver` β downstream of org.apache.camel:camel-support
- `camel-saxon` β downstream of org.apache.camel:camel-core-model
- `camel-scheduler` β downstream of org.apache.camel:camel-support
- `camel-schematron` β downstream of org.apache.camel:camel-support
- `camel-seda` β downstream of org.apache.camel:camel-support
- `camel-servicenow` β downstream of org.apache.camel:camel-support
- `camel-servicenow-maven-plugin` β downstream of org.apache.camel:camel-core-model
- `camel-servicenow-parent` β downstream of org.apache.camel:camel-core-model
- `camel-servlet` β downstream of org.apache.camel:camel-support
- `camel-shell` β downstream of org.apache.camel:camel-support
- `camel-shiro` β downstream of org.apache.camel:camel-support
- `camel-sjms` β downstream of org.apache.camel:camel-support
- `camel-sjms2` β downstream of org.apache.camel:camel-support
- `camel-slack` β downstream of org.apache.camel:camel-support
- `camel-smb` β downstream of org.apache.camel:camel-support
- `camel-smooks` β downstream of org.apache.camel:camel-support
- `camel-smpp` β downstream of org.apache.camel:camel-support
- `camel-snakeyaml` β downstream of org.apache.camel:camel-support
- `camel-snmp` β downstream of org.apache.camel:camel-support
- `camel-soap` β downstream of org.apache.camel:camel-support
- `camel-solr` β downstream of org.apache.camel:camel-support
- `camel-spiffe` β downstream of org.apache.camel:camel-support
- `camel-splunk-hec` β downstream of org.apache.camel:camel-support
- `camel-spring` β downstream of org.apache.camel:camel-core-model
- `camel-spring-ai-chat` β downstream of org.apache.camel:camel-support
- `camel-spring-ai-embeddings` β downstream of org.apache.camel:camel-support
- `camel-spring-ai-image` β downstream of org.apache.camel:camel-support
- `camel-spring-ai-parent` β downstream of org.apache.camel:camel-core-model
- `camel-spring-ai-vector-store` β downstream of org.apache.camel:camel-support
- `camel-spring-batch` β downstream of org.apache.camel:camel-support
- `camel-spring-cloud-config` β downstream of org.apache.camel:camel-support
- `camel-spring-jdbc` β downstream of org.apache.camel:camel-core-model
- `camel-spring-ldap` β downstream of org.apache.camel:camel-support
- `camel-spring-main` β downstream of org.apache.camel:camel-core-model
- `camel-spring-parent` β downstream of org.apache.camel:camel-core-model
- `camel-spring-rabbitmq` β downstream of org.apache.camel:camel-support
- `camel-spring-redis` β downstream of org.apache.camel:camel-support
- `camel-spring-security` β downstream of org.apache.camel:camel-core-model
- `camel-spring-ws` β downstream of org.apache.camel:camel-support
- `camel-spring-xml` β downstream of org.apache.camel:camel-core-model
- `camel-sql` β downstream of org.apache.camel:camel-support
- `camel-ssh` β downstream of org.apache.camel:camel-support
- `camel-state-store` β downstream of org.apache.camel:camel-support
- `camel-state-store-parent` β downstream of org.apache.camel:camel-core-model
- `camel-stax` β downstream of org.apache.camel:camel-support
- `camel-stitch` β downstream of org.apache.camel:camel-support
- `camel-stream` β downstream of org.apache.camel:camel-support
- `camel-streamcaching-test` β downstream of org.apache.camel:camel-test-junit6
- `camel-stringtemplate` β downstream of org.apache.camel:camel-support
- `camel-stripe` β downstream of org.apache.camel:camel-support
- `camel-stub` β downstream of org.apache.camel:camel-core-model
- `camel-support` β core/camel-support/src/main/java/org/apache/camel/support/FileWatcherResourceReloadStrategy.java
- `camel-swift` β downstream of org.apache.camel:camel-support
- `camel-syslog` β downstream of org.apache.camel:camel-support
- `camel-tahu` β downstream of org.apache.camel:camel-support
- `camel-tarfile` β downstream of org.apache.camel:camel-core-model
- `camel-telegram` β downstream of org.apache.camel:camel-support
- `camel-telemetry` β downstream of org.apache.camel:camel-support
- `camel-telemetry-dev` β downstream of org.apache.camel:camel-core-model
- `camel-tensorflow-serving` β downstream of org.apache.camel:camel-support
- `camel-test-infra-all` β downstream of org.apache.camel:camel-test-infra-artemis
- `camel-test-infra-artemis` β downstream of org.apache.camel:camel-test-junit6
- `camel-test-infra-cli` β downstream of org.apache.camel:camel-support
- `camel-test-infra-core` β downstream of org.apache.camel:camel-core
- `camel-test-infra-smb` β downstream of org.apache.camel:camel-test-junit6
- `camel-test-junit5` β downstream of org.apache.camel:camel-support
- `camel-test-junit6` β downstream of org.apache.camel:camel-support
- `camel-test-main-junit5` β downstream of org.apache.camel:camel-core-model
- `camel-test-main-junit6` β downstream of org.apache.camel:camel-core-model
- `camel-test-parent` β downstream of org.apache.camel:camel-core-model
- `camel-test-spring-junit5` β downstream of org.apache.camel:camel-core-model
- `camel-test-spring-junit6` β downstream of org.apache.camel:camel-core-model
- `camel-thrift` β downstream of org.apache.camel:camel-support
- `camel-thymeleaf` β downstream of org.apache.camel:camel-support
- `camel-tika` β downstream of org.apache.camel:camel-support
- `camel-timer` β downstream of org.apache.camel:camel-support
- `camel-tooling-maven` β downstream of org.apache.camel:camel-support
- `camel-toon` β downstream of org.apache.camel:camel-support
- `camel-tracing` β downstream of org.apache.camel:camel-support
- `camel-twilio` β downstream of org.apache.camel:camel-support
- `camel-twitter` β downstream of org.apache.camel:camel-support
- `camel-ubl` β downstream of org.apache.camel:camel-support
- `camel-undertow` β downstream of org.apache.camel:camel-support
- `camel-undertow-spring-security` β downstream of org.apache.camel:camel-core-model
- `camel-univocity-parsers` β downstream of org.apache.camel:camel-support
- `camel-validator` β downstream of org.apache.camel:camel-support
- `camel-velocity` β downstream of org.apache.camel:camel-support
- `camel-vertx` β downstream of org.apache.camel:camel-support
- `camel-vertx-common` β downstream of org.apache.camel:camel-support
- `camel-vertx-http` β downstream of org.apache.camel:camel-core-model
- `camel-vertx-parent` β downstream of org.apache.camel:camel-core-model
- `camel-vertx-websocket` β downstream of org.apache.camel:camel-support
- `camel-wal` β downstream of org.apache.camel:camel-support
- `camel-wasm` β downstream of org.apache.camel:camel-support
- `camel-weather` β downstream of org.apache.camel:camel-support
- `camel-weaviate` β downstream of org.apache.camel:camel-support
- `camel-web3j` β downstream of org.apache.camel:camel-support
- `camel-webhook` β downstream of org.apache.camel:camel-support
- `camel-whatsapp` β downstream of org.apache.camel:camel-support
- `camel-wordpress` β downstream of org.apache.camel:camel-support
- `camel-workday` β downstream of org.apache.camel:camel-support
- `camel-xchange` β downstream of org.apache.camel:camel-support
- `camel-xj` β downstream of org.apache.camel:camel-core-model
- `camel-xml-io` β downstream of org.apache.camel:camel-core-engine
- `camel-xml-io-dsl` β downstream of org.apache.camel:camel-core-engine
- `camel-xml-jaxb` β downstream of org.apache.camel:camel-core-engine
- `camel-xml-jaxb-dsl` β downstream of org.apache.camel:camel-core-languages
- `camel-xml-jaxb-dsl-test-definition` β downstream of org.apache.camel:camel-support
- `camel-xml-jaxb-dsl-test-spring` β downstream of org.apache.camel:camel-support
- `camel-xml-jaxp` β downstream of org.apache.camel:camel-support
- `camel-xmlsecurity` β downstream of org.apache.camel:camel-support
- `camel-xmpp` β downstream of org.apache.camel:camel-support
- `camel-xpath` β downstream of org.apache.camel:camel-support
- `camel-xslt` β downstream of org.apache.camel:camel-support
- `camel-xslt-saxon` β downstream of org.apache.camel:camel-core-model
- `camel-yaml-dsl-common` β downstream of org.apache.camel:camel-core-engine
- `camel-yaml-dsl-validator` β downstream of org.apache.camel:camel-core-languages
- `camel-yaml-dsl-validator-maven-plugin` β downstream of org.apache.camel:camel-yaml-dsl-validator
- `camel-yaml-io` β downstream of org.apache.camel:camel-core-engine
- `camel-zendesk` β downstream of org.apache.camel:camel-support
- `camel-zip-deflater` β downstream of org.apache.camel:camel-support
- `camel-zipfile` β downstream of org.apache.camel:camel-support
- `camel-zookeeper` β downstream of org.apache.camel:camel-support
- `camel-zookeeper-master` β downstream of org.apache.camel:camel-support
- `components` β downstream of org.apache.camel:camel-core-model
- `docs` β docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_23.adoc
</details>
<details><summary>Modules with tests skipped (25)</summary>
- `apache-camel`
- `camel-allcomponents`
- `camel-catalog`
- `camel-catalog-console`
- `camel-catalog-maven`
- `camel-catalog-suggest`
- `camel-componentdsl`
- `camel-endpointdsl`
- `camel-endpointdsl-support`
- `camel-itest`
- `camel-jbang-it`
- `camel-jbang-main`
- `camel-jbang-plugin-edit`
- `camel-jbang-plugin-generate`
- `camel-jbang-plugin-kubernetes`
- `camel-jbang-plugin-test`
- `camel-launcher`
- `camel-report-maven-plugin`
- `camel-route-parser`
- `camel-salesforce-maven-plugin`
- `camel-yaml-dsl`
- `camel-yaml-dsl-deserializers`
- `camel-yaml-dsl-maven-plugin`
- `coverage`
- `dummy-component`
</details>
> :information_source: Shadow mode β Scalpel observes but does not affect test execution. [Learn more](https://github.com/maveniverse/scalpel)
</details>
:warning: **Some tests are disabled on GitHub Actions** (`@DisabledIfSystemProperty(named = "ci.env.name")`) and require manual verification:
- `dsl/camel-jbang/camel-jbang-core`: 2 test(s) disabled on GitHub Actions
:bulb: **Manual integration tests recommended:**
> You modified `dsl/camel-jbang/camel-jbang-core`. The related integration tests in `dsl/camel-jbang/camel-jbang-it` are excluded from CI. Consider running them manually:
> ```
> mvn verify -f dsl/camel-jbang/camel-jbang-it -Djbang-it-test
> ```
<details><summary>Build reactor β dependencies compiled but only changed modules were tested (4 modules, 30.3s total)</summary>
**Total reactor time:** 30.3s
| Module | Duration | Status |
| --- | --- | --- |
| Camel :: Docs | 11.3s | SUCCESS |
| Camel :: Support | 10.9s | SUCCESS |
| Camel :: Kamelet Main | 8.1s | SUCCESS |
| Camel :: JBang :: Core | n/a | |
**Top 20 slowest modules:**
- `Camel :: Docs` (11.3s)
- `Camel :: Support` (10.9s)
- `Camel :: Kamelet Main` (8.1s)
</details>
---
:gear: [View full build and test results](https://github.com/apache/camel/actions/runs/35525331517)
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@camel.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] CAMEL-24851: when a YAML route file does not load, camel run logs the schema validator's report before the loader's error [camel]
Posted by "davsclaus (via GitHub)" <gi...@apache.org>.
davsclaus commented on PR #26636:
URL: https://github.com/apache/camel/pull/26636#issuecomment-5751942932
All five, in the commit before the merge from main: the upgrade note is trimmed to what changes for upgraders (the file watcher emitting `CamelContextReloadFailure` per failed file, with a one-line mention of the report) and placed after the runtime paragraphs; `yamlFiles` uses `ResourceHelper.hasScheme` like `Run` and returns each file once (the test asserts `containsExactly(route)`); the two swallowed exceptions are logged at debug; and camel-jbang-running.adoc shows the report under dev mode.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@camel.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org