This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch multi-route-loader in repository https://gitbox.apache.org/repos/asf/camel.git
commit 28988f5cd2817bdb0d867a2dcff61d1b3d84074c Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Thu Feb 15 17:40:48 2024 +0100 CAMEL-20245: camel-yaml-dsl - Add support for multi extension --- .../java/org/apache/camel/impl/engine/DefaultRoutesLoader.java | 6 +++++- .../org/apache/camel/dsl/yaml/YamlRoutesBuilderLoader.java | 10 ++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultRoutesLoader.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultRoutesLoader.java index 31be0748a39..3270da91b8d 100644 --- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultRoutesLoader.java +++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultRoutesLoader.java @@ -231,7 +231,11 @@ public class DefaultRoutesLoader extends ServiceSupport implements RoutesLoader, RoutesBuilderLoader.class); if (answer == null) { - answer = loaders.computeIfAbsent(extension, this::resolveService); + answer = loaders.values().stream() + // find existing loader that support this extension + .filter(l -> l.isSupportedExtension(extension)).findFirst() + // or resolve loader from classpath + .orElse(loaders.computeIfAbsent(extension, this::resolveService)); } return answer; diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoader.java b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoader.java index 4643fcd5ae5..b9d6fbb0a4a 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoader.java +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoader.java @@ -27,6 +27,7 @@ import java.util.Map; import java.util.Objects; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicBoolean; import org.apache.camel.CamelContext; import org.apache.camel.CamelContextAware; @@ -102,6 +103,9 @@ public class YamlRoutesBuilderLoader extends YamlRoutesBuilderLoaderSupport { private static final Logger LOG = LoggerFactory.getLogger(YamlRoutesBuilderLoader.class); + private final AtomicBoolean deprecatedWarnLogged = new AtomicBoolean(); + private final AtomicBoolean deprecatedBindingWarnLogged = new AtomicBoolean(); + // API versions for Camel-K Integration and Pipe // we are lenient so lets just assume we can work with any of the v1 even if they evolve private static final String INTEGRATION_VERSION = "camel.apache.org/v1"; @@ -127,7 +131,9 @@ public class YamlRoutesBuilderLoader extends YamlRoutesBuilderLoaderSupport { public boolean isSupportedExtension(String extension) { // this builder can support multiple extensions if (DEPRECATED_EXTENSION.equals(extension)) { - LOG.warn("File extension camelk.yaml is deprecated. Use camel.yaml instead."); + if (deprecatedWarnLogged.compareAndSet(false, true)) { + LOG.warn("File extension camelk.yaml is deprecated. Use camel.yaml instead."); + } return true; } return Arrays.asList(SUPPORTED_EXTENSION).contains(extension); @@ -343,7 +349,7 @@ public class YamlRoutesBuilderLoader extends YamlRoutesBuilderLoaderSupport { if (integration) { target = preConfigureIntegration(root, ctx, target, preParse); } else if (binding || pipe) { - if (binding) { + if (binding && deprecatedBindingWarnLogged.compareAndSet(false, true)) { LOG.warn("CamelK kind=KameletBinding is deprecated. Use CamelK kind=Pipe instead."); } target = preConfigurePipe(root, ctx, target, preParse);