One of the options for deploying the provider-based route is to package it as an OSGi bundle and deploy it into an OSGi container such as Red Hat JBoss Fuse. Some of the advantages of an OSGi deployment include:
Bundles are a relatively lightweight deployment option (because dependencies can be shared between deployed bundles).
OSGi provides sophisticated dependency management, ensuring that only version-consistent dependencies are added to the bundle's classpath.
The Maven bundle plug-in is used to package your project as an
OSGi bundle, in preparation for deployment into the OSGi
container. There are two essential modifications to make to your
project's pom.xml file:
Change the packaging type to
bundle(by editing the value of theproject/packagingelement in the POM).Add the Maven bundle plug-in to your POM file and configure it as appropriate.
Configuring the Maven bundle plug-in is quite a technical task (although the default settings are often adequate). For full details of how to customize the plug-in configuration, consult Deploying into the OSGi Container and Managing OSGi Dependencies.
The following POM fragment shows a sample configuration of the Maven bundle plug-in, which is appropriate for the current example.
<?xml version="1.0"?>
<project ...>
...
<groupId>org.fusesource.sparks.fuse-webinars.cxf-webinars</groupId>
<artifactId>customer-ws-camel-cxf-provider</artifactId>
<name>customer-ws-camel-cxf-provider</name>
<url>http://www.fusesource.com</url>
<packaging>bundle</packaging>
...
<build>
<plugins>
...
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<instructions>
<Import-Package>
org.apache.camel.component.velocity,
META-INF.cxf,
META-INF.cxf.osgi,
javax.jws,
javax.wsdl,
javax.xml.bind,
javax.xml.bind.annotation,
javax.xml.namespace,
javax.xml.ws,
org.w3c.dom,
<!-- Workaround to access DOM XPathFactory -->
org.apache.xpath.jaxp,
*
</Import-Package>
<DynamicImport-Package>
org.apache.cxf.*,
org.springframework.beans.*
</DynamicImport-Package>
</instructions>
</configuration>
</plugin>
...
</plugins>
</build>
</project>The Java packages from Apache CXF and the Spring API are imported
using dynamic imports (specified using the
DynamicImport-Package element). This is a
pragmatic way of dealing with the fact that Spring XML files are
not terribly well integrated with the Maven bundle plug-in. At
build time, the Maven bundle plug-in is not
able to figure out which Java classes are required by the Spring
XML code. By listing wildcarded package names in the
DynamicImport-Package element, however, you
allow the OSGi container to figure out which Java classes are
needed by the Spring XML code at run
time.
![]() | Note |
|---|---|
In general, using |
After you have configured the POM file, you can build the Maven project and install it in your local repository by entering the following command:
mvn install
To deploy the route bundle, enter the following command at the container console:
karaf@root> install -s mvn:org.fusesource.sparks.fuse-webinars.cxf-webinars/customer-ws-camel-cxf-provider
![]() | Note |
|---|---|
If your local Maven repository is stored in a non-standard
location, you might need to customize the value of the
|






![[Note]](imagesdb/note.gif)


