Overview
CXF includes a "local" transport. This transport allows you to send messsages more efficiently inside a JVM. The messages will serialized and piped from one endpoint to another.
The local transport supports URIs of the structure "local://{endpoint_name}" where {endpoint_name} is any set of characters. To use the local transport you simply need to set your address to a local URI.
Examples
JAX-WS
This code shows how to publish on a local endpoint:
import javax.xml.ws.Endpoint; HelloServiceImpl serverImpl = new HelloServiceImpl(); Endpoint.publish("local://hello", serverImpl);
Or with XML:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:simple="http://cxf.apache.org/simple" xmlns:soap="http://cxf.apache.org/bindings/soap" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://cxf.apache.org/bindings/soap http://cxf.apache.org/schemas/configuration/soap.xsd http://cxf.apache.org/simple http://cxf.apache.org/schemas/simple.xsd"> <import resource="classpath:META-INF/cxf/cxf.xml"/> <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/> <bean class="org.apache.cxf.transport.local.LocalTransportFactory" lazy-init="false"> <property name="transportIds"> <list> <value>http://cxf.apache.org/transports/local</value> <value>http://schemas.xmlsoap.org/soap/http</value> <value>http://schemas.xmlsoap.org/wsdl/soap/http</value> </list> </property> </bean> <jaxws:endpoint name="helloWorld" address="local://hello" implementor="org.example.HelloServiceImpl"/> </beans>
Simple Frontend
Before you use the local transport , you need to register the default soap transportURI with the local transport factory in the bus
Bus bus = BusFactory.getDefaultBus(); LocalTransportFactory localTransport = new LocalTransportFactory(); dfm.registerDestinationFactory("http://schemas.xmlsoap.org/soap/http", localTransport); dfm.registerDestinationFactory("http://schemas.xmlsoap.org/wsdl/soap/http", localTransport); dfm.registerDestinationFactory("http://cxf.apache.org/bindings/xformat", localTransport); dfm.registerDestinationFactory("http://cxf.apache.org/transports/local", localTransport); ConduitInitiatorManager extension = bus.getExtension(ConduitInitiatorManager.class); extension.registerConduitInitiator("http://cxf.apache.org/transports/local", localTransport); extension.registerConduitInitiator("http://schemas.xmlsoap.org/wsdl/soap/http", localTransport); extension.registerConduitInitiator("http://schemas.xmlsoap.org/soap/http", localTransport); extension.registerConduitInitiator("http://cxf.apache.org/bindings/xformat", localTransport);
You can also pass in a local://address to the server and client factory beans:
import org.apache.cxf.frontend.ServerFactoryBean; ServerFactoryBean sf = new ServerFactoryBean(); sf.setAddress("local://hello"); sf.setServiceBean(new HelloServiceImpl()); sf.setServiceClass(HelloService.class); // Optionally specify the service interface sf.create();
import org.apache.cxf.frontend.ClientProxyFactoryBean; ClientProxyFactoryBean cf = new ClientProxyFactoryBean(); cf.setAddress("local://hello"); cf.setServiceClass(HelloService.class); // Optionally specify the service interface HelloService h = (HelloService) cf.create();