CAMEL-6610 fix the IndexOutOfBoundsException when customized id of wireTap component
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/4e598d18 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/4e598d18 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/4e598d18 Branch: refs/heads/camel-2.11.x Commit: 4e598d18c4feda908946555def2285bd1ae8dda8 Parents: 1a23f0b Author: Willem Jiang <ningji...@apache.org> Authored: Wed Aug 7 15:04:15 2013 +0800 Committer: Willem Jiang <ningji...@apache.org> Committed: Thu Aug 8 08:16:33 2013 +0800 ---------------------------------------------------------------------- .../org/apache/camel/model/ProcessorDefinition.java | 8 +++++++- .../java/org/apache/camel/processor/WireTapTest.java | 13 +++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/4e598d18/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java b/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java index b1e7fe3..a01d95c 100644 --- a/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java +++ b/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java @@ -1010,6 +1010,7 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type> // set id on this setId(id); } else { + // set it on last output as this is what the user means to do // for Block(s) with non empty getOutputs() the id probably refers // to the last definition in the current Block @@ -1022,7 +1023,12 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type> } } } - outputs.get(outputs.size() - 1).setId(id); + if (!getOutputs().isEmpty()) { + outputs.get(outputs.size() - 1).setId(id); + } else { + // the output could be empty + setId(id); + } } return (Type) this; http://git-wip-us.apache.org/repos/asf/camel/blob/4e598d18/camel-core/src/test/java/org/apache/camel/processor/WireTapTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/processor/WireTapTest.java b/camel-core/src/test/java/org/apache/camel/processor/WireTapTest.java index 266cd49..3c45d54 100644 --- a/camel-core/src/test/java/org/apache/camel/processor/WireTapTest.java +++ b/camel-core/src/test/java/org/apache/camel/processor/WireTapTest.java @@ -38,6 +38,16 @@ public class WireTapTest extends ContextTestSupport { assertMockEndpointsSatisfied(); } + + public void testWireTapId() throws Exception { + MockEndpoint a = getMockEndpoint("mock:a"); + MockEndpoint b = getMockEndpoint("mock:b"); + a.expectedBodiesReceived("Hello"); + b.expectedBodiesReceived("Hello"); + + template.sendBody("direct:test", "Hello"); + assertMockEndpointsSatisfied(); + } @Override protected void setUp() throws Exception { @@ -59,6 +69,9 @@ public class WireTapTest extends ContextTestSupport { from("direct:tap") .delay(1000).setBody().constant("Tapped") .to("mock:result", "mock:tap"); + + from("direct:test").wireTap("direct:a").id("wiretap_1").to("mock:a"); + from("direct:a").to("mock:b"); } }; }