In Apache Camel, the Camel CXF component is the key to integrating routes with Web services. You can use the Camel CXF component to create a CXF endpoint, which can be used in either of the following ways:
Consumer—(at the start of a route) represents a Web service instance, which integrates with the route. The type of payload injected into the route depends on the value of the endpoint's
dataFormatoption.Producer—(at other points in the route) represents a WS client proxy, which converts the current exchange object into an operation invocation on a remote Web service. The format of the current exchange must match the endpoint's
dataFormatsetting.
In the current demonstration, we are interested in creating a Camel CXF consumer
endpoint, with the dataFormat option set to POJO.
The Camel CXF component requires you to add a dependency on the camel-cxf
component in your Maven POM. For example, the pom.xml file from the
customer-ws-camel-cxf-pojo demonstration project includes the following
dependency:
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-cxf</artifactId>
<version>${camel-version}</version>
</dependency>The cxf:bean: URI is used to bind an Apache CXF endpoint to a route and has the
following general syntax:
cxf:bean:CxfEndpointID[?Options]
Where is the ID of a bean created
using the CxfEndpointIDcxf:cxfEndpoint element, which configures the details of the WS
endpoint. You can append options to this URI (where the options are described in detail in
CXF in Apache Camel Documentation). If you do not
specify any additional options, the endpoint uses the POJO data format by
default.
For example, to start a route with a Apache CXF endpoint that is configured by the bean with
ID, customer-ws, define the route as follows:
<route>
<from uri="cxf:bean:customer-ws"/>
...
</route>![]() | Note |
|---|---|
There is an alternative URI syntax,
|
The cxf:cxfEndpoint element is used to define a WS endpoint that binds
either to the start (consumer endpoint) or the end (producer endpoint) of a route. For
example, to define the customer-ws WS endpoint referenced in the preceding
route, you would define a cxf:cxfEndpoint element as follows:
<?xml version="1.0" encoding="UTF-8"?>
<beans ...
xmlns:cxf="http://camel.apache.org/schema/cxf" ...>
...
<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"/>
<cxf:cxfEndpoint id="customer-ws"
address="http://0.0.0.0:9191/Customer"
endpointName="c:SOAPOverHTTP"
serviceName="c:CustomerService"
serviceClass="com.fusesource.demo.wsdl.customerservice.CustomerService"
xmlns:c="http://demo.fusesource.com/wsdl/CustomerService/"/>
...
</beans>![]() | Important |
|---|---|
Remember that the |
Apache CXF deploys the WS endpoint into a Jetty servlet container instance and the address attribute of
cxf:cxfEndpoint is therefore used to configure the addressing information for
the endpoint in the Jetty container.
Specify a complete HTTP URL, including the host and IP port (the value of the IP port
effectively identifies the target Jetty container). Typically, for a Jetty container, you
specify the host as 0.0.0.0, which is interpreted as a wildcard that matches
every IP network interface on the local machine (that is, if deployed on a multi-homed host,
Jetty opens a listening port on every network card). For example, to deploy the endpoint to
the custom Jetty container listening on IP port, 9191:
address="http://0.0.0.0:9191/Customers"
![]() | Note |
|---|---|
If you want to configure a secure endpoint (secured by SSL), you would specify the
|
The serviceClass attribute of the cxf:cxfEndpoint element
references the SEI of the Web service, which in this case is the
CustomerService interface.
Because of the modular structure of Apache CXF, additional configuration is added as needed
using the relevant <import ...> tags in XML. In the most recent version of
Apache CXF (later than 2.4.3), only the META-INF/cxf/cxf.xml resource is
needed.
For more details, see Importing XML resources.






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


