== Rest Karaf Osgi Activator Example 

=== Introduction

This example creates Apache Camel within an Apache Karaf Distribution.  The distribution includes the following Apache Karaf Features:
. camel-core
. camel-netty-http
. camel-jackson
. camel-swagger-java
. camel-tika

The example also includes the camel-osgi-activator which is a small bundle for starting an OSGi Apache Camel Project. The bundle starts the CamelContext and registering RouteBuilders from any bundle.

=== Project Structure

The project contains 5 subprojects

. parent - Parent POM for dependency and plugin management
. provision - Apache Karaf KAR project with all pre-installed camel features and bundle dependencies.
. distribution - Apache Karaf Distribution project that creates a full Apache Karaf runtime with provision KAR.
. core-rest - The preinstalled bundle with a Camel REST DSL Configuration.  Setup to install before context start.
. tika-detect - The preinstalled bundle with a Camel REST DSL Route that uses Apache Tika to detect a file MIME Type.
. tika-parse - A separate Camel REST DSL bundle that does not come pre-installed but maybe installed and started at runtime with an additional REST route that parses a file with Apache Tika.

=== Build

You will need to build this example first:

[source,sh]
----
$ mvn install
----

=== Run OSGi / Karaf

This example creates a distribution of Apache Karaf in the distribution/target folder.

. Unzip the zip or tar.gz file 
+
. Start Apache Karaf with the command below
+
[source,sh]
----
$ bin/karaf
----
. The first REST route will registered from the camel-example-rest-karaf-osgi-activator-rest bundle.  This bundle comes pre-installed. It can be tested with the curl below
+
[source,sh]
----
curl http://localhost:8080/camel-rest-osgi-activator/tika/detect?filePath=system/org/apache/camel/example/camel-example-rest-karaf-osgi-activator-tika-detect/${camel.version}/camel-example-rest-karaf-osgi-activator-tika-detect-${camel.version}.jar
----
+
. Install a new bundle with it's own REST route
+
[source,sh]
----
karaf@root()> install -s mvn:org.apache.camel.example/camel-example-rest-karaf-osgi-activator-tika-parse/${camel.version}
----
. This will expose a new route that can be tested without restarting
+
[source,sh]
----
curl http://localhost:8080/camel-rest-osgi-activator/tika/parse?filePath=system/org/apache/camel/example/camel-example-rest-karaf-osgi-activator-tika-detect/${camel.version}/camel-example-rest-karaf-osgi-activator-tika-detect-${camel.version}.jar
----

=== Help and contributions

If you hit any problem using Camel or have some feedback, then please
https://camel.apache.org/support.html[let us know].

We also love contributors, so
https://camel.apache.org/contributing.html[get involved] :-)

The Camel riders!
