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

Apache Camel is a powerful rule based routing and mediation engine which 
provides a POJO based implementation of the Enterprise Integration Patterns 
using an extremely powerful fluent API (or declarative Java Domain Specific 
Language) to configure routing and mediation rules. The Domain Specific 
Language means that Apache Camel can support type-safe smart completion of 
routing rules in your IDE using regular Java code without huge amounts of 
XML configuration files; though Xml Configuration inside Spring is also 
supported.

Apache Camel uses generics, annotations and URIs so that it can easily work 
directly with any kind of Transport or messaging model such as HTTP, JMS, JBI, 
SCA, MINA or CXF Bus API without mandating a normalized message API which can 
often lead to leaky abstractions. Apache Camel is also a small library which 
has minimal dependencies for easy embedding in any Java application.


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

To help you get started, try the following links:-

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

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

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

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

If you hit any problems please talk to us on the Camel Forums
  http://activemq.apache.org/camel/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-jetty can be configured to use https
   * camel-jhc can be configured as a secure http server using SSL

