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 2019/10/07 04:12:16 UTC

[camel] branch master updated: Advice-with add more validation of inputs

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 88be34c  Advice-with add more validation of inputs
88be34c is described below

commit 88be34c24ab3f8e354f518b41b73542cefe02d63
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Mon Oct 7 06:11:54 2019 +0200

    Advice-with add more validation of inputs
---
 .../camel/builder/AdviceWithRouteBuilder.java      | 34 ++++++++++++----------
 .../org/apache/camel/reifier/RouteReifier.java     |  7 +++++
 .../interceptor/AdviceWithLambdaTest.java          | 28 ++++++++++++++++++
 .../processor/interceptor/AdviceWithTest.java      | 16 ++++++++++
 4 files changed, 70 insertions(+), 15 deletions(-)

diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/builder/AdviceWithRouteBuilder.java b/core/camel-core-engine/src/main/java/org/apache/camel/builder/AdviceWithRouteBuilder.java
index 06c782e..0f86eff 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/builder/AdviceWithRouteBuilder.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/builder/AdviceWithRouteBuilder.java
@@ -75,7 +75,7 @@ public abstract class AdviceWithRouteBuilder extends RouteBuilder {
      * @param camelContext the camel context
      * @param routeId either the route id as a string value, or <tt>null</tt> to
      *            chose the 1st route, or you can specify a number for the n'th
-     *            route.
+     *            route, or provide the route definition instance directly as well.
      * @param builder the advice with route builder
      * @return a new route which is this route merged with the route builder
      * @throws Exception can be thrown from the route builder
@@ -87,22 +87,26 @@ public abstract class AdviceWithRouteBuilder extends RouteBuilder {
         }
 
         RouteDefinition rd;
-        String id = mcc.getTypeConverter().convertTo(String.class, routeId);
-        if (id != null) {
-            rd = mcc.getRouteDefinition(id);
-            if (rd == null) {
-                // okay it may be a number
-                Integer num = mcc.getTypeConverter().tryConvertTo(Integer.class, routeId);
-                if (num != null) {
-                    rd = mcc.getRouteDefinitions().get(num);
+        if (routeId instanceof RouteDefinition) {
+            rd = (RouteDefinition) routeId;
+        } else {
+            String id = mcc.getTypeConverter().convertTo(String.class, routeId);
+            if (id != null) {
+                rd = mcc.getRouteDefinition(id);
+                if (rd == null) {
+                    // okay it may be a number
+                    Integer num = mcc.getTypeConverter().tryConvertTo(Integer.class, routeId);
+                    if (num != null) {
+                        rd = mcc.getRouteDefinitions().get(num);
+                    }
                 }
+                if (rd == null) {
+                    throw new IllegalArgumentException("Cannot advice route as route with id: " + routeId + " does not exists");
+                }
+            } else {
+                // grab first route
+                rd = mcc.getRouteDefinitions().get(0);
             }
-            if (rd == null) {
-                throw new IllegalArgumentException("Cannot advice route as route with id: " + routeId + " does not exists");
-            }
-        } else {
-            // grab first route
-            rd = mcc.getRouteDefinitions().get(0);
         }
 
         return RouteReifier.adviceWith(rd, camelContext, new AdviceWithRouteBuilder() {
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RouteReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RouteReifier.java
index e08c137..758e199 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RouteReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RouteReifier.java
@@ -88,6 +88,13 @@ public class RouteReifier extends ProcessorReifier<RouteDefinition> {
      * @see AdviceWithRouteBuilder
      */
     public static RouteDefinition adviceWith(RouteDefinition definition, CamelContext camelContext, RouteBuilder builder) throws Exception {
+        ObjectHelper.notNull(definition, "RouteDefinition");
+        ObjectHelper.notNull(camelContext, "CamelContext");
+        ObjectHelper.notNull(builder, "RouteBuilder");
+
+        if (definition.getInput() == null) {
+            throw new IllegalArgumentException("RouteDefinition has no input");
+        }
         return new RouteReifier(definition).adviceWith(camelContext, builder);
     }
 
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/interceptor/AdviceWithLambdaTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/interceptor/AdviceWithLambdaTest.java
index 8161efb..72c8707 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/interceptor/AdviceWithLambdaTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/interceptor/AdviceWithLambdaTest.java
@@ -20,6 +20,7 @@ import org.apache.camel.CamelExecutionException;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.builder.AdviceWithRouteBuilder;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.model.RouteDefinition;
 import org.junit.Test;
 
 public class AdviceWithLambdaTest extends ContextTestSupport {
@@ -85,6 +86,33 @@ public class AdviceWithLambdaTest extends ContextTestSupport {
         assertMockEndpointsSatisfied();
     }
 
+    @Test
+    public void testAdvisedRouteDefinition() throws Exception {
+        AdviceWithRouteBuilder.adviceWith(context, context.getRouteDefinitions().get(0), a -> {
+            a.interceptSendToEndpoint("mock:foo").skipSendToOriginalEndpoint().to("log:foo").to("mock:advised");
+        });
+
+        getMockEndpoint("mock:foo").expectedMessageCount(0);
+        getMockEndpoint("mock:advised").expectedMessageCount(1);
+        getMockEndpoint("mock:result").expectedMessageCount(1);
+
+        template.sendBody("direct:start", "Hello World");
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Test
+    public void testAdvisedEmptyRouteDefinition() throws Exception {
+        try {
+            AdviceWithRouteBuilder.adviceWith(context, new RouteDefinition(), a -> {
+                a.interceptSendToEndpoint("mock:foo").skipSendToOriginalEndpoint().to("log:foo").to("mock:advised");
+            });
+            fail("Should throw exception");
+        } catch (IllegalArgumentException e) {
+            // expected
+        }
+    }
+
     @Override
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/interceptor/AdviceWithTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/interceptor/AdviceWithTest.java
index f78efd6..93787ea 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/interceptor/AdviceWithTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/interceptor/AdviceWithTest.java
@@ -19,6 +19,7 @@ package org.apache.camel.processor.interceptor;
 import org.apache.camel.CamelExecutionException;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.reifier.RouteReifier;
 import org.junit.Test;
 
@@ -97,6 +98,21 @@ public class AdviceWithTest extends ContextTestSupport {
         assertMockEndpointsSatisfied();
     }
 
+    @Test
+    public void testAdvisedEmptyRoutes() throws Exception {
+        try {
+            RouteReifier.adviceWith(new RouteDefinition(), context, new RouteBuilder() {
+                @Override
+                public void configure() throws Exception {
+                    interceptSendToEndpoint("mock:foo").skipSendToOriginalEndpoint().to("log:foo").to("mock:advised");
+                }
+            });
+            fail("Should have thrown exception");
+        } catch (IllegalArgumentException e) {
+            // expected
+        }
+    }
+
     @Override
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {