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

Reply via email to