This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch fix/CAMEL-25380 in repository https://gitbox.apache.org/repos/asf/camel.git
commit 71de42e3ad04f9694ae09be007b89548208e0a76 Author: Claus Ibsen <[email protected]> AuthorDate: Tue Oct 6 17:13:36 2026 +0200 CAMEL-25380: camel-yaml-dsl - Do not log the compact notation warning for YAML inside a jar The Kamelets of the Kamelet catalog are compact, and every user of timer-source was told to normalize a file inside a jar they cannot change. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_01STT6whBgK1AqsSsUKrnE8m --- .../dsl/yaml/YamlRoutesBuilderLoaderSupport.java | 23 ++++++++++++++ .../camel/dsl/yaml/CompactNotationWarnTest.java | 37 ++++++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoaderSupport.java b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoaderSupport.java index 1b0ea4f5fd46..fc3e74aee4f9 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoaderSupport.java +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoaderSupport.java @@ -18,6 +18,7 @@ package org.apache.camel.dsl.yaml; import java.io.FileNotFoundException; import java.io.InputStream; +import java.net.URL; import java.util.List; import java.util.Objects; import java.util.function.Predicate; @@ -68,9 +69,31 @@ public abstract class YamlRoutesBuilderLoaderSupport extends RouteBuilderLoaderS } catch (Exception e) { // ignore } + if (ctx.isCompactNotationWarn() && isInsideJar(resource)) { + // a file inside a jar, such as a Kamelet of the Kamelet catalog, is not the user's to normalize: the + // warning told every user of timer-source to fix a file they cannot change + ctx.setCompactNotationWarn(false); + } return ctx; } + private boolean isInsideJar(Resource resource) { + String loc = resource != null ? resource.getLocation() : null; + if (loc == null || !loc.startsWith("classpath:")) { + return false; + } + try { + String path = loc.substring("classpath:".length()); + if (path.startsWith("/")) { + path = path.substring(1); + } + URL url = getCamelContext().getClassResolver().loadResourceAsURL(path); + return url != null && "jar".equals(url.getProtocol()); + } catch (Exception e) { + return false; + } + } + @Override public RouteBuilder doLoadRouteBuilder(Resource resource) throws Exception { if (!resource.exists()) { diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/java/org/apache/camel/dsl/yaml/CompactNotationWarnTest.java b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/java/org/apache/camel/dsl/yaml/CompactNotationWarnTest.java index 4f547c2efe1f..be72917480e7 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/java/org/apache/camel/dsl/yaml/CompactNotationWarnTest.java +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/java/org/apache/camel/dsl/yaml/CompactNotationWarnTest.java @@ -16,11 +16,20 @@ */ package org.apache.camel.dsl.yaml; +import java.net.URL; +import java.net.URLClassLoader; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.ArrayList; import java.util.List; +import java.util.jar.JarEntry; +import java.util.jar.JarOutputStream; import org.apache.camel.dsl.yaml.common.YamlDeserializerBase; import org.apache.camel.dsl.yaml.support.YamlTestSupport; +import org.apache.camel.spi.Resource; +import org.apache.camel.support.PluginHelper; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.core.LogEvent; @@ -30,6 +39,7 @@ import org.apache.logging.log4j.core.config.Property; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; import org.junit.jupiter.api.parallel.Isolated; import static org.assertj.core.api.Assertions.assertThat; @@ -82,6 +92,33 @@ class CompactNotationWarnTest extends YamlTestSupport { assertThat(warnings.get(0)).contains("YAML DSL compact notation detected", "camel validate normalize"); } + @Test + void aFileInsideAJarIsNotWarnedAbout(@TempDir Path dir) throws Exception { + // CAMEL-25380: the Kamelets of the Kamelet catalog are compact, and the user cannot change a file in a jar + Path jar = dir.resolve("routes.jar"); + try (JarOutputStream out = new JarOutputStream(Files.newOutputStream(jar))) { + out.putNextEntry(new JarEntry("jarroutes/compact.yaml")); + out.write(""" + - route: + from: + uri: "direct:start" + steps: + - setBody: + simple: "Hello ${body}" + - to: "mock:result" + """.getBytes(StandardCharsets.UTF_8)); + out.closeEntry(); + } + try (URLClassLoader cl = new URLClassLoader(new URL[] { jar.toUri().toURL() }, getClass().getClassLoader())) { + context.setApplicationContextClassLoader(cl); + Resource resource = PluginHelper.getResourceLoader(context).resolveResource("classpath:jarroutes/compact.yaml"); + assertThat(resource.exists()).isTrue(); + loadRoutes(resource); + } + assertThat(context.getRouteDefinitions()).hasSize(1); + assertThat(warnings).isEmpty(); + } + @Test void aStepWrittenAsAStringIsTheCompactNotation() throws Exception { loadRoutes("""
