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() {