== 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/3.1.0-SNAPSHOT/camel-example-rest-karaf-osgi-activator-tika-detect-3.1.0-SNAPSHOT.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/3.1.0-SNAPSHOT
----
. 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/3.1.0-SNAPSHOT/camel-example-rest-karaf-osgi-activator-tika-detect-3.1.0-SNAPSHOT.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!
