You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2021/02/25 10:08:00 UTC

[camel] branch master updated: CAMEL-16258: camel-spring-boot - @ExcludeRoutes not working anymore

This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/master by this push:
     new 1098bce  CAMEL-16258: camel-spring-boot - @ExcludeRoutes not working anymore
1098bce is described below

commit 1098bce9df4970e379737883cd18abc3a29fd96d
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Feb 25 11:06:45 2021 +0100

    CAMEL-16258: camel-spring-boot - @ExcludeRoutes not working anymore
---
 .../java/org/apache/camel/ExtendedCamelContext.java  |  5 +++++
 .../apache/camel/impl/engine/SimpleCamelContext.java |  4 ++++
 .../org/apache/camel/impl/DefaultCamelContext.java   |  5 +++++
 .../camel/impl/lw/LightweightCamelContext.java       |  5 +++++
 .../impl/lw/LightweightRuntimeCamelContext.java      |  5 +++++
 .../apache/camel/main/DefaultRoutesCollector.java    | 20 ++++++++++++++++++++
 6 files changed, 44 insertions(+)

diff --git a/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java b/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java
index 4689df9..c68403e 100644
--- a/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java
+++ b/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java
@@ -753,4 +753,9 @@ public interface ExtendedCamelContext extends CamelContext {
      */
     void disposeModel();
 
+    /**
+     * Used during unit-testing where its possible to specify a set of routes to exclude from discovery
+     */
+    String getTestExcludeRoutes();
+
 }
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java
index 90f7a62..6a0137d 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java
@@ -597,4 +597,8 @@ public class SimpleCamelContext extends AbstractCamelContext {
         throw new UnsupportedOperationException();
     }
 
+    @Override
+    public String getTestExcludeRoutes() {
+        throw new UnsupportedOperationException();
+    }
 }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java b/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
index 050d306..c482064 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
@@ -140,6 +140,11 @@ public class DefaultCamelContext extends SimpleCamelContext implements ModelCame
         return getOptions().disableJmx;
     }
 
+    @Override
+    public String getTestExcludeRoutes() {
+        return getExcludeRoutes();
+    }
+
     public static String getExcludeRoutes() {
         return getOptions().excludeRoutes;
     }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContext.java b/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContext.java
index 85f642e..5b122bd 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContext.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContext.java
@@ -1597,6 +1597,11 @@ public class LightweightCamelContext implements ExtendedCamelContext, CatalogCam
         getExtendedCamelContext().setStartupStepRecorder(startupStepRecorder);
     }
 
+    @Override
+    public String getTestExcludeRoutes() {
+        return getExtendedCamelContext().getTestExcludeRoutes();
+    }
+
     //
     // CatalogCamelContext
     //
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightRuntimeCamelContext.java b/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightRuntimeCamelContext.java
index 931073b..97dba59 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightRuntimeCamelContext.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightRuntimeCamelContext.java
@@ -1904,6 +1904,11 @@ public class LightweightRuntimeCamelContext implements ExtendedCamelContext, Cat
     }
 
     @Override
+    public String getTestExcludeRoutes() {
+        return null;
+    }
+
+    @Override
     public RouteController getInternalRouteController() {
         return new RouteController() {
             @Override
diff --git a/core/camel-main/src/main/java/org/apache/camel/main/DefaultRoutesCollector.java b/core/camel-main/src/main/java/org/apache/camel/main/DefaultRoutesCollector.java
index 648bd5c..7570a66 100644
--- a/core/camel-main/src/main/java/org/apache/camel/main/DefaultRoutesCollector.java
+++ b/core/camel-main/src/main/java/org/apache/camel/main/DefaultRoutesCollector.java
@@ -74,6 +74,26 @@ public class DefaultRoutesCollector implements RoutesCollector {
                 name = name.replace('.', '/');
 
                 boolean match = !"false".equals(includePattern);
+
+                // special support for testing with @ExcludeRoutes annotation with camel-test modules
+                String exclude = camelContext.adapt(ExtendedCamelContext.class).getTestExcludeRoutes();
+                // exclude take precedence over include
+                if (match && ObjectHelper.isNotEmpty(exclude)) {
+                    // this property is a comma separated list of FQN class names, so we need to make
+                    // name as path so we can use ant patch matcher
+                    exclude = exclude.replace('.', '/');
+                    // there may be multiple separated by comma
+                    String[] parts = exclude.split(",");
+                    for (String part : parts) {
+                        // must negate when excluding, and hence !
+                        match = !matcher.match(part, name);
+                        log.trace("Java RoutesBuilder: {} exclude filter: {} -> {}", name, part, match);
+                        if (!match) {
+                            break;
+                        }
+                    }
+                }
+
                 // exclude take precedence over include
                 if (match && ObjectHelper.isNotEmpty(excludePattern)) {
                     // there may be multiple separated by comma