From 6c634aa249c4ca788cda6f77ffe87d9b6ec48e9a Mon Sep 17 00:00:00 2001 From: Dmitry Volodin Date: Fri, 29 Jun 2018 19:43:12 +0300 Subject: [PATCH] CAMEL-12607: When using Tokenizer skipFirst - java.util.NoSuchElementException if only one element --- .../java/org/apache/camel/util/GroupTokenIterator.java | 9 +++++++-- .../apache/camel/processor/SplitGroupSkipFirstTest.java | 8 ++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/camel-core/src/main/java/org/apache/camel/util/GroupTokenIterator.java b/camel-core/src/main/java/org/apache/camel/util/GroupTokenIterator.java index 0bfd2689a4bfd..2f05116d8f05b 100644 --- a/camel-core/src/main/java/org/apache/camel/util/GroupTokenIterator.java +++ b/camel-core/src/main/java/org/apache/camel/util/GroupTokenIterator.java @@ -50,7 +50,7 @@ public final class GroupTokenIterator implements Iterator, Closeable { private final ByteArrayOutputStream bos = new ByteArrayOutputStream(); /** - * Creates a new token based group titerator + * Creates a new token based group iterator * * @param camelContext the camel context * @param it the iterator to group @@ -155,7 +155,12 @@ private Object doNext() throws IOException, NoTypeConversionAvailableException { data = it.next(); if (skipFirst && hasSkipFirst.compareAndSet(false, true)) { - data = it.next(); + if (it.hasNext()) { + data = it.next(); + } else { + // Content with header only which is marked to skip + data = ""; + } } // include token in between diff --git a/camel-core/src/test/java/org/apache/camel/processor/SplitGroupSkipFirstTest.java b/camel-core/src/test/java/org/apache/camel/processor/SplitGroupSkipFirstTest.java index d85cac27c211e..5c09847c27e9f 100644 --- a/camel-core/src/test/java/org/apache/camel/processor/SplitGroupSkipFirstTest.java +++ b/camel-core/src/test/java/org/apache/camel/processor/SplitGroupSkipFirstTest.java @@ -31,6 +31,14 @@ public void testSplitSkipFirst() throws Exception { assertMockEndpointsSatisfied(); } + + public void testSplitSkipFirstOnlyHeader() throws Exception { + getMockEndpoint("mock:group").expectedBodiesReceived(""); + + template.sendBody("direct:start", "##comment\n"); + + assertMockEndpointsSatisfied(); + } @Override protected RouteBuilder createRouteBuilder() throws Exception {