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 2011/10/29 17:53:29 UTC

svn commit: r1194910 - in /camel/trunk/camel-core/src: main/java/org/apache/camel/builder/ErrorHandlerBuilderRef.java main/java/org/apache/camel/support/TokenPairExpressionIterator.java test/java/org/apache/camel/processor/SplitTokenizerTest.java

Author: davsclaus
Date: Sat Oct 29 15:53:28 2011
New Revision: 1194910

URL: http://svn.apache.org/viewvc?rev=1194910&view=rev
Log:
CAMEL-4589: Polished

Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderRef.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/support/TokenPairExpressionIterator.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitTokenizerTest.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderRef.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderRef.java?rev=1194910&r1=1194909&r2=1194910&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderRef.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderRef.java Sat Oct 29 15:53:28 2011
@@ -18,7 +18,6 @@ package org.apache.camel.builder;
 
 import java.util.List;
 
-import org.apache.camel.CamelContext;
 import org.apache.camel.ErrorHandlerFactory;
 import org.apache.camel.Processor;
 import org.apache.camel.model.ModelCamelContext;

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/support/TokenPairExpressionIterator.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/support/TokenPairExpressionIterator.java?rev=1194910&r1=1194909&r2=1194910&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/support/TokenPairExpressionIterator.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/support/TokenPairExpressionIterator.java Sat Oct 29 15:53:28 2011
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.support;
 
+import java.io.Closeable;
+import java.io.IOException;
 import java.io.InputStream;
 import java.util.Iterator;
 import java.util.Scanner;
@@ -64,7 +66,7 @@ public class TokenPairExpressionIterator
     /**
      * Iterator to walk the input stream
      */
-    private static final class TokenPairIterator implements Iterator {
+    private static final class TokenPairIterator implements Iterator, Closeable {
 
         private final String startToken;
         private final String endToken;
@@ -79,24 +81,23 @@ public class TokenPairExpressionIterator
             // this iterator will do look ahead as we may have data
             // after the last end token, which the scanner would find
             // so we need to be one step ahead of the scanner
-            this.image = hasNext() ? next() : null;
+            this.image = scanner.hasNext() ? next() : null;
         }
 
         @Override
         public boolean hasNext() {
-            // must look a head
-            boolean answer = scanner.hasNext();
-            if (!answer) {
-                scanner.close();
-            }
-            return answer;
+            return image != null;
         }
 
         @Override
         public Object next() {
             Object answer = image;
             // calculate next
-            image = hasNext() ? getNext() : null;
+            if (scanner.hasNext()) {
+                image = getNext();
+            } else {
+                image = null;
+            }
 
             if (answer == null) {
                 // first time the image may be null
@@ -111,13 +112,18 @@ public class TokenPairExpressionIterator
             // only grab text after the start token
             if (next != null && next.contains(startToken)) {
                 next = ObjectHelper.after(next, startToken);
-            }
 
-            // include tokens in answer
-            if (next != null) {
-                StringBuilder sb = new StringBuilder();
-                next = sb.append(startToken).append(next).append(endToken).toString();
+                // include tokens in answer
+                if (next != null) {
+                    StringBuilder sb = new StringBuilder();
+                    next = sb.append(startToken).append(next).append(endToken).toString();
+                }
+            } else {
+                // must have start token, otherwise we have reached beyond last tokens
+                // and should not return more data
+                return null;
             }
+
             return next;
         }
 
@@ -125,6 +131,11 @@ public class TokenPairExpressionIterator
         public void remove() {
             // noop
         }
+
+        @Override
+        public void close() throws IOException {
+            scanner.close();
+        }
     }
 
 }

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitTokenizerTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitTokenizerTest.java?rev=1194910&r1=1194909&r2=1194910&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitTokenizerTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitTokenizerTest.java Sat Oct 29 15:53:28 2011
@@ -52,6 +52,25 @@ public class SplitTokenizerTest extends 
         assertMockEndpointsSatisfied();
     }
 
+    public void testSplitTokenizerD() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:split");
+        mock.expectedBodiesReceived("[Claus]", "[James]", "[Willem]");
+
+        template.sendBody("direct:d", "[Claus][James][Willem]");
+
+        assertMockEndpointsSatisfied();
+    }
+
+    public void testSplitTokenizerE() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:split");
+        mock.expectedBodiesReceived("<person>Claus</person>", "<person>James</person>", "<person>Willem</person>");
+
+        String xml = "<persons><person>Claus</person><person>James</person><person>Willem</person></persons>";
+        template.sendBody("direct:e", xml);
+
+        assertMockEndpointsSatisfied();
+    }
+
     @Override
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
@@ -68,6 +87,14 @@ public class SplitTokenizerTest extends 
                 from("direct:c")
                     .split().tokenize("(\\W+)\\s*", null, true)
                         .to("mock:split");
+
+                from("direct:d")
+                    .split().tokenizePair("[", "]")
+                        .to("mock:split");
+
+                from("direct:e")
+                    .split().tokenizePair("<person>", "</person>")
+                        .to("mock:split");
             }
         };
     }