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 13 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.
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: URI format to reference the
Camel CXF endpoint as follows, where you must set the
BeanIDdataFormat 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>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: URI format to
reference the Camel CXF endpoint as follows, where you must set the
BeanIDdataFormat 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>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 Handling HTTP Headers.









