WS-Addressing
CXF provides support for the 2004-08 and 1.0 versions of WS-Addressing.
To enable WS-Addressing you may enable the WSAddressingFeature on your service. If you wish to use XML to configure this, you may use the following syntax:
<jaxws:endpoint id="{your.service.namespace}YourPortName"> <jaxws:features> <wsa:addressing xmlns:wsa="http://cxf.apache.org/ws/addressing"/> </jaxws:features> </jaxws:endpoint>
You can also use the same exact syntax with a <jaxws:client>
<jaxws: client id="{your.service.namespace}YourPortName"> <jaxws:features> <wsa:addressing xmlns:wsa="http://cxf.apache.org/ws/addressing"/> </jaxws:features> </jaxws:client>
From an API point of view this looks very similar:
import org.apache.cxf.jaxws.EndpointImpl; import org.apache.cxf.ws.addressing.WSAddressingFeature; MyServiceImpl implementor = new MyServiceImpl() EndpointImpl ep = (EndpointImpl) Endpoint.create(implementor); ep.getFeatures().add(new WSAddressingFeature()); ep.publish("http://some/address");
You can also use it with the ClientProxyFactoryBeans and ServerFactoryBeans (and their JAX-WS versions, namely JaxWsProxyFactoryBean and JaxWsServerFactoryBean):
import org.apache.cxf.frontend.simple.ClientProxyFactoryBean; import org.apache.cxf.ws.addressing.WSAddressingFeature; ClientProxyFactoryBean factory = new ClientProxyFactoryBean(); factory.setServiceClass(MyService.class); factory.setAddress("http://acme.come/some-service"); factory.getFeatures().add(new WSAddressingFeature()); MyService client = (MyService) factory.create();
Enabling WS-Addressing with WS-Policy
If you're using WS-Policy, CXF can automatically set up WS-Addressing for you if you use the <Addressing> policy expression.
TODO