Spring Boot CXF JAX-WS Starter
Features
Registers CXFServlet with a "/services/*" URL pattern for serving CXF JAX-WS endpoints.
Setup
<dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-spring-boot-starter-jaxws</artifactId> <version>3.1.7</version> </dependency>
Additional Configuration
Use "cxf.path" property to customize a CXFServlet URL pattern
Use "cxf.servlet.init" map property to customize CXFServlet properties such as "services-list-path" (available by default at "/services"), etc.
API Documentation
JAX-WS endpoints support WSDL.
Service Registry Publication
Publication of JAX-WS endpoints into well-known service registries such as Netflix Eureka Registry can be achieved similarly to the way JAX-RS endpoints are registered and is shown in a JAX-RS Spring Boot Scan demo.
Examples
Consider the following Configuration instance:
package sample.ws; import javax.xml.ws.Endpoint; import org.apache.cxf.Bus; import org.apache.cxf.jaxws.EndpointImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import sample.ws.service.HelloPortImpl; @Configuration public class WebServiceConfig { @Autowired private Bus bus; @Bean public Endpoint endpoint() { EndpointImpl endpoint = new EndpointImpl(bus, new HelloPortImpl()); endpoint.publish("/Hello"); return endpoint; } }
Having a CXF JAX-WS starter alongside this Configuration is sufficient for enabling a CXF JAX-WS endpoint which will respond to SOAP request URI such as
"http://localhost:8080/services/Hello".
Please also see a JAX-WS Spring Boot demo.
Spring Boot CXF JAX-RS Starter
Features
Registers CXF Servlet with a "/services/*" URL pattern for serving CXF JAX-RS endpoints.
Optionally auto-discovers JAX-RS root resources and providers and creates a JAX-RS endpoint.
Note the use of CXF JAX-RS Clients in SpringBoot Application is covered in this section.
Setup
<dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-spring-boot-starter-jaxrs</artifactId> <version>3.1.7</version> </dependency>
Additional Configuration
Use "cxf.path" property to customize a CXFServlet URL pattern.
Use "cxf.servlet.init" map property to customize CXFServlet properties such as "services-list-path" (available by default at "/services"), etc.
Use "cxf.jaxrs.server.path" property to customize a JAX-RS server endpoint address (default is "/").
JAX-RS root resources and providers annotated with JAX-RS @Path and @Provider and native CXF Providers annotated with CXF @Provider can be auto-discovered.
Use "cxf.jaxrs.component-scan" property to create a JAX-RS endpoint from the auto-discovered JAX-RS root resources and providers which are marked as Spring Components (annotated with Spring @Component or created and returned from @Bean methods).
Use "cxf.jaxrs.classes-scan" property to create a JAX-RS endpoint from the auto-discovered JAX-RS root resources and provider classes. Such classes do not have to be annotated with Spring @Component. This property needs to be accompanied by a "cxf.jaxrs.classes-scan-packages" property which sets a comma-separated list of the packages to scan.
Note that while "cxf.jaxrs.component-scan" and "cxf.jaxrs.classes-scan" are mutually exclusive, "cxf.jaxrs.component-scan" can be used alongside the "cxf.jaxrs.classes-scan-packages" property to enable the auto-discovery of the JAX-RS resources and providers which may or may not be marked as Spring Components.
API Documentation
Swagger
See CXF Swagger2Feature documentation on how to enable Swagger2Feature in SpringBoot and how to auto-activate Swagger UI.
WADL
CXF automatically loads a WADL provider if a cxf-rt-rs-service-description module is available on the runtime classpath.
Service Registry Publication
Publication of JAX-RS endpoints into well-known service registries such as Netflix Eureka Registry is shown in a JAX-RS Spring Boot Scan demo.
Examples
Manual Configuration
Consider the following Configuration instance:
package sample.rs.service; import java.util.Arrays; import org.apache.cxf.Bus; import org.apache.cxf.endpoint.Server; import org.apache.cxf.jaxrs.JAXRSServerFactoryBean; import org.apache.cxf.jaxrs.swagger.Swagger2Feature; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; import sample.rs.service.hello1.HelloServiceImpl1; import sample.rs.service.hello2.HelloServiceImpl2; @SpringBootApplication public class SampleRestApplication { @Autowired private Bus bus; public static void main(String[] args) { SpringApplication.run(SampleRestApplication.class, args); } @Bean public Server rsServer() { JAXRSServerFactoryBean endpoint = new JAXRSServerFactoryBean(); endpoint.setBus(bus); endpoint.setAddress("/"); // Register 2 JAX-RS root resources supporting "/sayHello/{id}" and "/sayHello2/{id}" relative paths endpoint.setServiceBeans(Arrays.<Object>asList(new HelloServiceImpl1(), new HelloServiceImpl2())); endpoint.setFeatures(Arrays.asList(new Swagger2Feature())); return endpoint.create(); } }
Having a CXF JAX-RS starter alongside this Configuration is sufficient for enabling a CXF JAX-RS endpoint which will respond to HTTP request URI such as
"http://localhost:8080/services/sayHello/ApacheCxfUser". The above code also makes Swagger docs available at "http://localhost:8080/services/swagger.json".
Please also see a JAX-RS Spring Boot demo.
Auto Configuration
Spring Boot Application example shown in the Manual Configuration section can be simplified if the auto-discovery is enabled.
For example, given the following application.yml properties:
cxf: jaxrs: component-scan: true classes-scan-packages: org.apache.cxf.jaxrs.swagger
the application becomes simply:
package sample.rs.service; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class SampleScanRestApplication { public static void main(String[] args) { SpringApplication.run(SampleScanRestApplication.class, args); } }
This application will enable a CXF JAX-RS endpoint which will respond to HTTP request URI such as
"http://localhost:8080/services/sayHello/ApacheCxfUser". The above code also makes Swagger docs available at "http://localhost:8080/services/swagger.json".
Please also see a JAX-RS Spring Boot Scan demo.