40.3. Proxying with PAYLOAD Format
Overview
If you want to access the content of the Web services messages that pass throught the route, you might prefer to process the messages in the normal PAYLOAD format: that is, where the body of the exchange is accessible as an XML document (essentially, an
org.w3c.dom.Node
object). The key advantate of using PAYLOAD format is that you can easily process the contents of a message, by accessing the message body as an XML document.
Figure 40.3, “Proxy Route with Message in PAYLOAD Format” shows an overview of how to proxy a Web service using an Apache Camel route, where the route processes the messages in PAYLOAD format. The key feature of this route is that both the consumer endpoint (at the start of the route) and the producer endpoint (at the end of the route) must be compatible with the PAYLOAD data format.
Figure 40.3. Proxy Route with Message in PAYLOAD Format
Consumer endpoint for CXF/PAYLOAD
To parse incoming messages into PAYLOAD data format, the consumer endpoint at the start of the route must be a Camel CXF endpoint that is configured to use PAYLOAD mode. Use the
cxf:bean:BeanID
URI format to reference the Camel CXF endpoint as follows, where you must set the dataFormat
option to PAYLOAD:
<route>
<from uri="cxf:bean:customerServiceProxy?dataFormat=PAYLOAD"/>
...
</route>
The bean with the ID,
customerServiceProxy
, is a Camel CXF/PAYLOAD endpoint, which is defined as follows:
<?xml version="1.0" encoding="UTF-8"?> <beans ...> ... <cxf:cxfEndpoint id="customerServiceProxy" xmlns:c="http://demo.fusesource.org/wsdl/camelcxf" address="/Customers" endpointName="c:SOAPOverHTTP" serviceName="c:CustomerService" wsdlURL="wsdl/CustomerService.wsdl" /> ... </beans>
Producer endpoint for CXF/PAYLOAD
To convert the exchange body from PAYLOAD data format to a SOAP/HTTP message, the producer endpoint at the end of the route must be a Camel CXF endpoint configured to use PAYLOAD mode. Use the
cxf:bean:BeanID
URI format to reference the Camel CXF endpoint as follows, where you must set the dataFormat
option to PAYLOAD:
<route>
...
<to uri="cxf:bean:customerServiceReal?dataFormat=PAYLOAD"/>
</route>
The bean with the ID,
customerServiceReal
, is a Camel CXF/PAYLOAD endpoint, which is defined as follows:
<?xml version="1.0" encoding="UTF-8"?> <beans ...> ... <cxf:cxfEndpoint id="customerServiceReal" xmlns:c="http://demo.fusesource.org/wsdl/camelcxf" address="http://localhost:8083/Customers" endpointName="c:SOAPOverHTTP" serviceName="c:CustomerService" wsdlURL="wsdl/CustomerService.wsdl" /> ... </beans>
Outgoing HTTP headers
By default, any headers in the exchange that are not prefixed by
Camel
will be converted into HTTP headers and sent out over the wire by the Camel CXF producer endpoint. This could have adverse consequences on the behavior of your application, so it is important to be aware of any headers that are set in the exchange object and to remove them, if necessary.
For more details about dealing with headers, see Section 40.4, “Handling HTTP Headers”.