<!--
    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements.  See the NOTICE file distributed with
    this work for additional information regarding copyright ownership.
    The ASF licenses this file to You under the Apache License, Version 2.0
    (the "License"); you may not use this file except in compliance with
    the License.  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
-->
<html>
<head>
</head>
<body>

The Camel <a href="http://camel.apache.org/dsl.html">Domain Specific Language</a> for creating
<a href="http://camel.apache.org/routes.html">Routes</a>,
<a href="http://camel.apache.org/predicate.html">Predicates</a>,
<a href="http://camel.apache.org/expression.html">Expressions</a> and
<a href="http://camel.apache.org/error-handler.html">Error Handlers</a>. The entry point to the builder suite
is the <a href="RouteBuilder.html">RouteBuilder</a> class.

</body>
</html>
