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

Apache Camel is a powerful Spring based Integration Framework.

Camel implements the Enterprise Integration Patterns allowing you to configure
routing and mediation rules in either a Java based Domain Specific Language
(or Fluent API) or via Spring based XML Configuration files. Either approaches
mean you get smart completion of routing rules in your IDE whether in your
Java 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 and 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 can be used as a routing and mediation engine for the
following projects:

    * 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
    * Apache ServiceMix which is the most popular and powerful distributed
      open source ESB, JBI and OSGi container


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 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-ftp can be configured for secure file transfers
   * camel-mail can be configured for secure email communications
   * camel-cxf can be configured for secure web service communications
   * camel-crypto can be used for secure communications
   * camel-jasypt can be used for secure communications
   * camel-jetty can be configured to use https
   * camel-http can be configured to use https
   * camel-http4 can be configured to use https
   * camel-gae can be configured for secure communications
   * camel-xmlsecurity can be configured for secure communications

