You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Next »

camel-cxf component design note

Integrating CXF into Camel

Camel provides a component API , after defined the endpoint URI format, we just need implement the Camel component API by using CXF as a library to create the client and server for camel-cxf component's consumer and producer.

CXFConsumer

CXFConsumer works as the CXF server, so we create the CXF server with the CXFEndpoint which holds the endpoint information such as SEI class, wsdl location, service name and endpoint name etc.
Now we just leverage the CXF's invoker to override the default invoker by setting a CamelInvoker to the ServerFactoryBean.

CXFProducer

CXF Client is used to send out the incoming message from the CXFProducer and pass the response back.

DataFormat

camel-cxf component supports to handle the CXF message with different DataFormat.

To get the best reuse of the CXF generic message layer, we use the CXF feature API to setup the interceptors for different types message handling.

if (!dataFormat.equals(DataFormat.POJO)...) {
   List<AbstractFeature> features = new ArrayList<AbstractFeature>();
   // adding the logging feature here for debug
   features.add(new LoggingFeature());

   if (dataFormat.equals(DataFormat.PAYLOAD)) {
       features.add(new PayLoadDataFormatFeature());       
   }
   
   if (dataFormat.equals(DataFormat.MESSAGE)) {
       features.add(new MessageDataFormatFeature());
   }
   
  // set the feature to the ServerFactoryBean or ClientFactoryBean 
  ...
}

Integrate Camel into CXF

Currently , we introduce Camel Transport for CXF to integrate the Camel as an transport library in CXF.

Binding the conduit and destination with the context endpoint

As CXF transport API side, CXF transport API includes Conduit and Destination that we need to implement with Camel.
We use the the CamelTemplate to send out the message for a certain endpoint in the CamelConduit, and bind a consumer process for the CamelDestination.
Here you can specify the CamelContext endpoint URI in the endpoint address.

  • No labels