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);

Reply via email to