The example builds a simple HelloWorld service and packages it for deployment
into FUSE ESB. The service is written using standard JAX-WS APIs. It implements a
single operation sayHi()
. Once deployed, the service is
exposed as a SOAP/HTTP endpoint. The most interesting parts of the example are
the Spring configuration used to configure the endpoint and the Maven POM used to
build the bundle.
The Spring configuration provides the details needed to expose the service using SOAP/HTTP. It can also contain details used to configure advanced FUSE Services Framework functionality.
The Maven POM, in addition to compiling the code, uses the bundle generation plug-in to package the resulting classes into an OSGi bundle. It contains all of the details needed by the FUSE ESB container to activate the bundle and deploy the packaged service.
The FUSE ESB Maven tooling automates a number of the steps in packaging functionality for deployment into FUSE ESB. In order to use the Maven OSGi tooling, you add the elements shown in Example 3.2 to your POM file.
Example 3.2. POM Elements for Using FUSE ESB OSGi Tooling
... <pluginRepositories> <pluginRepository> <id>fusesource.m2</id> <name>FUSE Open Source Community Release Repository</name> <url>http://repo.fusesource.com/maven2</url> <snapshots> <enabled>false</enabled> </snapshots> <releases> <enabled>true</enabled> </releases> </pluginRepository> </pluginRepositories> ... <build> <plugins> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> ... </plugin> </plugins> </build> ...
These elements point Maven to the correct repositories to download the FUSE ESB Maven tooling and load the plug-in that implements the OSGi tooling.
The FUSE ESB container needs some details about a service before it can
instantiate and endpoint for it. FUSE Services Framework uses Spring based configuration to
define endpoints for services. The configuration shown in Example 3.3 is stored in the example's
\src\main\resources\META-INF\spring\beans.xml
file.
Example 3.3. OSGi Example Spring Configuration
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> <import resource="classpath:META-INF/cxf/cxf.xml" /><import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" /> <import resource="classpath:META-INF/cxf/cxf-extension-http.xml" /> <import resource="classpath:META-INF/cxf/osgi/cxf-extension-osgi.xml" /> <jaxws:endpoint id="helloWorld"
implementor="org.apache.servicemix.examples.cxf.HelloWorldImpl" address="/HelloWorld"/> </beans>
The configuration shown in Example 3.3 does the following:
Imports the required configuration to load the required parts of the FUSE Services Framework runtime. | |
Configures the endpoint that exposes the service using the
|
For more information on the FUSE Services Framework Spring configuration see Developing and Deploying JAX-WS Services.
Example 3.4. OSGi POM
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.apache.servicemix.examples</groupId> <artifactId>examples</artifactId> <version>4.0.0-fuse-SNAPSHOT</version> </parent> <groupId>org.apache.servicemix.examples</groupId> <artifactId>cxf-osgi</artifactId> <packaging>bundle</packaging> <version>4.0.0-fuse-SNAPSHOT</version> <name>Apache ServiceMix Example :: CXF OSGi</name> <!-- Add ServiceMix repositories for snaphots and releases --> ... <dependencies> <dependency> <groupId>org.apache.geronimo.specs</groupId> <artifactId>geronimo-ws-metadata_2.0_spec</artifactId> <version>${geronimo.wsmetadata.version}</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <configuration> <instructions> <Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName> <Import-Package> javax.jws, javax.wsdl, META-INF.cxf, META-INF.cxf.osgi, org.apache.cxf.bus, org.apache.cxf.bus.spring, org.apache.cxf.bus.resource, org.apache.cxf.configuration.spring, org.apache.cxf.resource, org.apache.servicemix.cxf.transport.http_osgi, org.springframework.beans.factory.config </Import-Package> <Private-Package>org.apache.servicemix.examples.cxf</Private-Package> <Require-Bundle>org.apache.cxf.cxf-bundle</Require-Bundle> </instructions> </configuration> </plugin> </plugins> </build> </project>