You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2016/07/19 09:00:22 UTC
[6/6] camel git commit: Added Java-DSL docs to Gitbook
Added Java-DSL docs to Gitbook
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/d67a95ea
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/d67a95ea
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/d67a95ea
Branch: refs/heads/master
Commit: d67a95ea21127efdbd89bc0fde33e15ddff776e3
Parents: 70d6968
Author: Andrea Cosentino <an...@gmail.com>
Authored: Tue Jul 19 10:57:42 2016 +0200
Committer: Andrea Cosentino <an...@gmail.com>
Committed: Tue Jul 19 10:57:42 2016 +0200
----------------------------------------------------------------------
docs/user-manual/en/SUMMARY.md | 1 +
docs/user-manual/en/java-dsl.adoc | 200 +++++++++++++++++++++++++++++++++
2 files changed, 201 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/d67a95ea/docs/user-manual/en/SUMMARY.md
----------------------------------------------------------------------
diff --git a/docs/user-manual/en/SUMMARY.md b/docs/user-manual/en/SUMMARY.md
index 448836f..bb215ef 100644
--- a/docs/user-manual/en/SUMMARY.md
+++ b/docs/user-manual/en/SUMMARY.md
@@ -18,6 +18,7 @@
* [Dependency Injection](dependency-injection.adoc)
* [Dozer Type Conversion](dozer-type-conversion.adoc)
* [DSL](dsl.adoc)
+ * [Java DSL](java-dsl.adoc)
* [Groovy DSL](groovy-dsl.adoc)
* [Endpoint](endpoint.adoc)
* [Exchange](exchange.adoc)
http://git-wip-us.apache.org/repos/asf/camel/blob/d67a95ea/docs/user-manual/en/java-dsl.adoc
----------------------------------------------------------------------
diff --git a/docs/user-manual/en/java-dsl.adoc b/docs/user-manual/en/java-dsl.adoc
new file mode 100644
index 0000000..60a6681
--- /dev/null
+++ b/docs/user-manual/en/java-dsl.adoc
@@ -0,0 +1,200 @@
+[[JavaDSL-JavaDSL]]
+Java DSL
+~~~~~~~~
+
+Apache Camel offers a Java based DSL using the fluent builder style. The
+Java DSL is available by extending the
+link:routebuilder.html[RouteBuilder] class, and implement the
+`configure` method.
+
+This is best illustrate by an example. In the code below we create a new
+class called `MyRouteBuilder` that extends the
+`org.apache.camel.builder.RouteBuilder` from Camel. +
+ In the `configure` method the Java DSL is at our disposal.
+
+[source,java]
+-------------------------------------------------------------------------
+import org.apache.camel.builder.RouteBuilder;
+
+/**
+ * A Camel Java DSL Router
+ */
+public class MyRouteBuilder extends RouteBuilder {
+
+ /**
+ * Let's configure the Camel routing rules using Java code...
+ */
+ public void configure() {
+
+ // here is a sample which processes the input files
+ // (leaving them in place - see the 'noop' flag)
+ // then performs content based routing on the message using XPath
+ from("file:src/data?noop=true")
+ .choice()
+ .when(xpath("/person/city = 'London'"))
+ .to("file:target/messages/uk")
+ .otherwise()
+ .to("file:target/messages/others");
+ }
+
+}
+-------------------------------------------------------------------------
+
+In the `configure` method we can define Camel link:routes.html[Routes].
+In the example above we have a single route, which pickup
+https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=CAMEL&title=File&linkCreation=true&fromPageId=30747520[File]s,
+(eg the from).
+
+[source,java]
+---------------------------------------
+ from("file:src/data?noop=true")
+---------------------------------------
+
+Then we use the link:content-based-router.html[Content Based Router] (eg
+the choice) to route the message depending if the person is from London
+or not.
+
+[source,java]
+-------------------------------------------------------
+ .choice()
+ .when(xpath("/person/city = 'London'"))
+ .to("file:target/messages/uk")
+ .otherwise()
+ .to("file:target/messages/others");
+-------------------------------------------------------
+
+[[JavaDSL-Routes]]
+Routes
+~~~~~~
+
+Camel supports the definition of routing rules using a Java
+link:dsl.html[DSL] (domain specific language) which avoids the need for
+cumbersome XML using a link:routebuilder.html[RouteBuilder].
+
+For example a simple route can be created as follows.
+
+[source,java]
+-------------------------------------------------------
+RouteBuilder builder = new RouteBuilder() {
+ public void configure() {
+ errorHandler(deadLetterChannel("mock:error"));
+
+ from("direct:a").to("direct:b");
+ }
+};
+-------------------------------------------------------
+
+As you can see from the above Camel uses link:uris.html[URIs] to wire
+endpoints together.
+
+[[JavaDSL-URIStringformatting]]
+URI String formatting
+^^^^^^^^^^^^^^^^^^^^^
+
+*Available as of Camel 2.0*
+
+If you have endpoint URIs that accept options and you want to be able to
+substitute the value, e.g. build the URI by concat the strings together,
+then you can use the `java.lang.String.format` method. But in Camel 2.0
+we have added two convenient methods in the Java DSL so you can do
+`fromF` and `toF` that uses String formatting to build the URI.
+
+[source,java]
+-------------------------------------------------------
+from("direct:start").toF("file://%s?fileName=%s", path, name);
+
+fromF("file://%s?include=%s", path, pattern).toF("mock:%s", result);
+-------------------------------------------------------
+
+[[JavaDSL-Filters]]
+Filters
+^^^^^^^
+
+You can combine simple routes with filters which can be arbitrary
+link:predicate.html[Predicate] implementations.
+
+[source,java]
+-------------------------------------------------------
+RouteBuilder builder = new RouteBuilder() {
+ public void configure() {
+ errorHandler(deadLetterChannel("mock:error"));
+
+ from("direct:a")
+ .filter(header("foo").isEqualTo("bar"))
+ .to("direct:b");
+ }
+};
+-------------------------------------------------------
+
+[[JavaDSL-Choices]]
+Choices
+^^^^^^^
+
+With a choice you provide a list of predicates and outcomes along with
+an optional default otherwise clause which is invoked if none of the
+conditions are met.
+
+[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");
+ }
+};
+-------------------------------------------------------
+
+[[JavaDSL-Usingacustomprocessor]]
+Using a custom processor
+++++++++++++++++++++++++
+
+Here is an example of using a custom link:processor.html[Processor]
+
+[source,java]
+-------------------------------------------------------
+myProcessor = new Processor() {
+ public void process(Exchange exchange) {
+ log.debug("Called with exchange: " + exchange);
+ }
+};
+
+RouteBuilder builder = new RouteBuilder() {
+ public void configure() {
+ errorHandler(deadLetterChannel("mock:error"));
+
+ from("direct:a")
+ .process(myProcessor);
+ }
+};
+-------------------------------------------------------
+
+You can mix and match custom processors with filters and choices.
+
+[source,java]
+-------------------------------------------------------
+RouteBuilder builder = new RouteBuilder() {
+ public void configure() {
+ errorHandler(deadLetterChannel("mock:error"));
+
+ from("direct:a")
+ .filter(header("foo").isEqualTo("bar"))
+ .process(myProcessor);
+ }
+};
+-------------------------------------------------------
+
+[[JavaDSL-SeeAlso]]
+See Also
+^^^^^^^^
+
+* link:dsl.html[DSL]
+* link:examples.html[Examples]
+