CXF OSGI Example
================

A simple example which receives web service calls (via a CXF consumer, using bean binding)
and writes these requests into the file system. It's not a very useful use case, but the goal
of this example is to show you how you can use the CXF consumer component in an OSGI
environment with the OSGI HTTP service. If your target container is Apache Karaf or Apache
ServiceMix, you can use PAX Web to setup and start an OSGI HTTP service. All Camel
bundles using a Camel CXF consumer can use this HTTP service without needing to start
individual Jetty instances. Another advantage is that all provided services can now share
the same port.


You will need to compile the example first:
  mvn install

Remarks:
- During the compilation phase, a unit test will be performed which simulates the
  client calling the web service exposed by our camel/cxf route.
- In Eclipse, I have used the following option when starting the junit test case. This option tells
  CXF that it must use log4j : -Dorg.apache.cxf.Logger=org.apache.cxf.common.logging.Log4jLogger

To run the example on Apache ServiceMix 4.x or Apache Karaf 2.2.x

1) launch the server
karaf.bat
  
Note for Karaf 2.2.x: 
  a) edit the etc/jre.properties file to add the following packages to be exported
  jre-1.6=, \
  com.sun.org.apache.xerces.internal.dom, \
  com.sun.org.apache.xerces.internal.jaxp, \

  b) from the same file comment out the following exports already provided by the bundles
  that will be imported next: javax.xml.bind*, javax.jws*, javax.xml.soap*, javax.xml.ws*, 
  javax.activation, javax.annotation, javax.xml.stream*.


2) Add features required
features:addUrl mvn:org.apache.camel.karaf/apache-camel/${version}/xml/features
features:install war
features:install cxf
features:install camel-spring
features:install camel-jaxb
features:install camel-cxf
  

3) Deploy the example
osgi:install -s mvn:org.apache.camel/camel-example-cxf-osgi/${version}
  

4) Verify that your service is available using the following url in the browser. 
We assume you're using Karaf's default PAX Web configuration which uses 
port 8181 for http. If you would like to use another port or https, change the configuration in 
${KARAF_HOME}/etc/org.ops4j.pax.web.cfg. The immediate extension after the hostname and port ("cxf" in
the below URL) is configured via the org.apache.cxf.osgi.cfg file (Please see 
http://team.ops4j.org/wiki//display/paxweb/Pax+Web for more information on PAX Web).
  
http://localhost:8181/cxf/camel-example-cxf-osgi/webservices/incident?wsdl
                                

5) Start SOAPUI (2.x or later)
Create a new project called camel-example-cxf-osgi
Point to the following url: http://localhost:8181/cxf/camel-example-cxf-osgi/webservices/incident?wsdl
Open the request 1 (under camel-example-cxf-osgi --> ReportIncidentBinding --> ReportIncident) and copy/paste a SOAP
message generated by the unit test, for example:
  
<xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Header />
   <soap:Body>
      <ns2:inputReportIncident xmlns:ns2="http://reportincident.example.camel.apache.org">
         <incidentId>111</incidentId>
         <incidentDate>2011-03-05</incidentDate>
         <givenName>Christian</givenName>
         <familyName>Mueller</familyName>
         <summary>Bla</summary>
         <details>Bla bla</details>
         <email>cmueller@apache.org</email>
         <phone>0049 69 1234567</phone>
      </ns2:inputReportIncident>
   </soap:Body>
</soap:Envelope>
  

6) Check the file system
Check the folder "target/inbox/" in the Karaf base directory to see that a message has arrived.


This example is described in more detail at
  http://camel.apache.org/cxf-example-osgi.html

If you hit any problems please let us know on the Camel Forums
  http://camel.apache.org/discussion-forums.html

Please help us make Apache Camel better - we appreciate any feedback you may
have.  Enjoy!

------------------------
The Camel Riders!
