Welcome to Apache Camel
=============================================================================== 

Apache Camel is a powerful open source integration framework based on known
Enterprise Integration Patterns with powerful Bean Integration.

Camel lets you create the Enterprise Integration Patterns to implement routing
and mediation rules in either a Java based Domain Specific Language (or Fluent API),
via Spring based Xml Configuration files or via the Scala DSL. This means you
get smart completion of routing rules in your IDE whether in your Java,
Scala or XML editor.

Apache Camel uses URIs so that it can easily work directly with any kind of
Transport or messaging model such as HTTP, ActiveMQ, JMS, JBI, SCA, MINA
or CXF Bus API together with working with pluggable Data Format options.
Apache Camel is a small library which has minimal dependencies for easy embedding
in any Java application. Apache Camel lets you work with the same API regardless
which kind of Transport used, so learn the API once and you will be able to
interact with all the Components that is provided out-of-the-box.

Apache Camel has powerful Bean Binding and integrated seamless with
popular frameworks such as Spring and Guice.

Apache Camel has extensive Testing support allowing you to easily
unit test your routes.

Apache Camel can be used as a routing and mediation engine for the
following projects:

  * Apache ServiceMix which is the most popular and powerful distributed
    open source ESB, JBI and OSGi container
  * Apache ActiveMQ which is the most popular and powerful open
    source message broker
  * Apache CXF which is a smart web services suite (JAX-WS and JAX-RS)
  * Apache MINA a networking framework


Getting Started
=============================================================================== 

To help you get started, try the following links:

Getting Started
  http://camel.apache.org/getting-started.html

Building
  http://camel.apache.org/building.html

We welcome contributions of all kinds, for details of how you can help
  http://camel.apache.org/contributing.html

Please refer to the website for details of finding the issue tracker, 
email lists, wiki or IRC channel
  http://camel.apache.org/

If you need support or help then read this page first
  http://camel.apache.org/support.html

If you hit any problems please talk to us on the Camel Forums
  http://camel.apache.org/discussion-forums.html

Please help us make Apache Camel better - we appreciate any feedback 
you may have.

Enjoy!

-----------------
The Camel riders!

Licensing
=============================================================================== 

This software is licensed under the terms you may find in the file
named "LICENSE.txt" in this directory.
   
This distribution includes cryptographic software.  The country in
which you currently reside may have restrictions on the import,
possession, use, and/or re-export to another country, of
encryption software.  BEFORE using any encryption software, please
check your country's laws, regulations and policies concerning the
import, possession, or use, and re-export of encryption software, to
see if this is permitted.  See <http://www.wassenaar.org/> for more
information.

The U.S. Government Department of Commerce, Bureau of Industry and
Security (BIS), has classified this software as Export Commodity
Control Number (ECCN) 5D002.C.1, which includes information security
software using or performing cryptographic functions with asymmetric
algorithms.  The form and manner of this Apache Software Foundation
distribution makes it eligible for export under the License Exception
ENC Technology Software Unrestricted (TSU) exception (see the BIS
Export Administration Regulations, Section 740.13) for both object
code and source code.

The following provides more details on the included cryptographic
software:
   * camel-ahc can be configured to use https
   * camel-crypto can be used for secure communications
   * camel-cxf can be configured for secure communications
   * camel-ftp can be configured for secure communications
   * camel-gae can be configured for secure communications
   * camel-http can be configured to use https
   * camel-http4 can be configured to use https
   * camel-jasypt can be used for secure communications
   * camel-jetty can be configured to use https
   * camel-mail can be configured for secure communications
   * camel-nagios can be configured for secure communications
   * camel-xmlsecurity can be configured for secure communications

