Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Wiki Markup
h2. Loop
The Loop allows to process the a message a number of times and possibly process them in a different way.  Useful mostly for testing.

{info:title=Default mode}
Notice by default the loop uses the same exchange throughout the looping. So the result from the previous iteration is used for the next (eg [Pipes And Filters]). From *Camel 2.8* onwards you can enable copy mode instead. See the options table for more details.
{info}

h3. Options
{div:class=confluenceTableSmall}
|| Name || Default Value || Description ||
| {{copy}} | {{false}} | *Camel 2.8:* Whether or not copy mode is used. If {{false}} then the same Exchange is being used throughout the looping. So the result from the previous iteration will be _visible_ for the next iteration. Instead you can enable copy mode, and then each iteration is _restarting_ with a fresh copy of the input [Exchange]. |

h3. Exchange properties
For each iteration two properties are set on the {{Exchange}} that could be used by processors down the pipeline to process the [Message] in different ways.
|| Property || Description ||
| {{CamelIterationCount}} | Camel 1.x: Total number of iterations to be run |
| {{CamelIterationIndex}} | Camel 1.x: Index of the current iteration (0 based) |
| {{CamelLoopSize}} | Camel 2.0: Total number of loops |
| {{CamelLoopIndex}} | Camel 2.0: Index of the current iteration (0 based) |
that could be used by processors down the pipeline to process the [Message] in different ways.

h4. Examples

The following example shows how to take a request from the *direct:x* endpoint , then send the message repetitively to *mock:result*.  The number of times the message is sent is either passed as an argument to {{loop()}}, or determined at runtime by evaluating an expression.  The expression *must* evaluate to an {{int}}, otherwise a {{RuntimeCamelException}} is thrown.

*Using the [Fluent Builders]*

Pass loop count as an argument

Loop

The Loop allows to process the a message a number of times and possibly process them in a different way. Useful mostly for testing.

For each iteration two properties are set on the Exchange that could be used by processors down the pipeline to process the Message in different ways.

Property

Description

CamelIterationCount

Camel 1.x: Total number of iterations to be run

CamelIterationIndex

Camel 1.x: Index of the current iteration (0 based)

CamelLoopSize

Camel 2.0: Total number of loops

CamelLoopIndex

Camel 2.0: Index of the current iteration (0 based)

that could be used by processors down the pipeline to process the Message in different ways.

Examples

The following example shows how to take a request from the direct:x endpoint , then send the message repetitively to mock:result. The number of times the message is sent is either passed as an argument to loop(), or determined at runtime by evaluating an expression. The expression must evaluate to an int, otherwise a RuntimeCamelException is thrown.

Using the Fluent Builders

Pass loop count as an argument

Wiki Markup
{snippet:id=ex1|lang=java|url=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/LoopTest.java}

Use expression to determine loop

...

Wiki Markup
 count
{snippet:id=ex2|lang=java|url=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/LoopTest.java}

Use expression to determine loop

...

Wiki Markup
 count
{snippet:id=ex3|lang=java|url=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/LoopTest.java}

*Using the [Spring XML Extensions

...

]*

Pass loop count as an

...

Wiki Markup
 argument
{snippet:id=ex1|lang=xml|url=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/loop.xml}

Use expression to determine loop

...

Wiki Markup
 count
{snippet:id=ex2|lang=xml|url=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/loop.xml}

For further examples of this pattern in use you could look at one of the [junit test

...

 case|http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/LoopTest.java?view=markup]

{include:Using This Pattern}