blob: 761ac9225c10f81653718b206786fcffa9f159f7 [file] [log] [blame]
[[contentBasedRouter-eip]]
= Content Based Router
:page-source: core/camel-core-engine/src/main/docs/eips/content-based-router-eip.adoc
The
http://www.enterpriseintegrationpatterns.com/ContentBasedRouter.html[Content
Based Router] from the xref:enterprise-integration-patterns.adoc[EIP
patterns] allows you to route messages to the correct destination based
on the contents of the message exchanges.
image::eip/ContentBasedRouter.gif[image]
The following example shows how to route a request from an input
*seda:a* endpoint to either *seda:b*, *seda:c* or *seda:d* depending on
the evaluation of various xref:predicate.adoc[Predicate] expressions
== Using the xref:fluent-builders.adoc[Fluent Builders]
[source,java]
----
RouteBuilder builder = new RouteBuilder() {
public void configure() {
errorHandler(deadLetterChannel("mock:error"));
from("direct:a")
.choice()
.when(header("foo").isEqualTo("bar"))
.to("direct:b")
.when(header("foo").isEqualTo("cheese"))
.to("direct:c")
.otherwise()
.to("direct:d");
}
};
----
[TIP]
====
See
xref:faq/why-can-i-not-use-when-or-otherwise-in-a-java-camel-route.adoc[Why
can I not use when or otherwise in a Java Camel route] if you have
problems with the Java DSL, accepting using `when` or `otherwise`.
====
== Using the xref:spring-xml-extensions.adoc[Spring XML Extensions]
[source,java]
----
<camelContext errorHandlerRef="errorHandler" xmlns="http://camel.apache.org/schema/spring">
<route>
<from uri="direct:a"/>
<choice>
<when>
<xpath>$foo = 'bar'</xpath>
<to uri="direct:b"/>
</when>
<when>
<xpath>$foo = 'cheese'</xpath>
<to uri="direct:c"/>
</when>
<otherwise>
<to uri="direct:d"/>
</otherwise>
</choice>
</route>
</camelContext>
----
For further examples of this pattern in use you could look at the
https://github.com/apache/camel/blob/master/core/camel-core/src/test/java/org/apache/camel/processor/ChoiceTest.java[junit test case].
[[ContentBasedRouter-UsingThisPattern]]
== Using This Pattern
If you would like to use this EIP Pattern then please read the
xref:getting-started.adoc[Getting Started]. You may also find the
xref:architecture.adoc[Architecture] useful particularly the description
of xref:endpoint.adoc[Endpoint] and xref:uris.adoc[URIs]. Then you could
try out some of the xref:examples.adoc[Examples] first before trying
this pattern out.