Spring Boot Actuator
When the presence of the Spring Boot Actuator is detected, the application may benefit from metrics support auto-configuration (based on Micrometer library). The instrumentation layer automatically (or programmatically) tracks the server-side metrics with respect to requests processing, and exposes it along with other metrics. For more details, please check Micrometer Integration documentation.
Property | Description | Default |
---|---|---|
cxf.metrics.enabled | Enables or disables metrics auto-configuration | true |
cxf.metrics.jaxrs.enabled | Enables or disables JAX-RS metrics auto-configuration | true |
cxf.metrics.jaxws.enabled | Enables or disables JAX-WS metrics auto-configuration | true |
cxf.metrics.server.autoTimeRequests | Whether requests handled by CXF should be automatically timed. If the number of time series emitted grows | true |
cxf.metrics.server.requestsMetricName | Name of the metric for received requests (server-side) | cxf.server.requests |
cxf.metrics.server.maxUriTags | Maximum number of unique URI tag values allowed. After the max number of tag values is reached, | 100 |
cxf.metrics.client.requestsMetricName | Name of the metric for sent requests (client-side) | cxf.client.requests |
cxf.metrics.client.maxUriTags | Maximum number of unique URI tag values allowed. After the max number of tag values is reached, | 100 |
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.12</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.servlet.loadOnStartup" set loadOnStartup priority of the CXFServlet (by default, -1)
Use "cxf.servlet.enabled" enable/disable CXFServlet regsitration (since 3.3.12/3.4.5)
If needed, one can use Spring ImportResource annotation to import the existing JAX-WS contexts available on the classpath.
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.12</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.servlet.loadOnStartup" set loadOnStartup priority of the CXFServlet (by default, -1)
Use "cxf.servlet.enabled" enable/disable CXFServlet regsitration (since 3.3.12/3.4.5)
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.component-scan-packages" property to restrict which of the auto-discovered Spring components are accepted as JAX-RS resource or provider classes. It sets a comma-separated list of the packages that a given bean instance's class must be in. Note, this property, if set, is only effective if a given bean is a singleton. It can be used alongside or as an alternative to the "cxf.jaxrs.component-scan-beans" property. This property is available starting from CXF 3.1.11.
Use "cxf.jaxrs.component-scan-beans" property to restrict which of the auto-discovered Spring components are accepted as JAX-RS resource or provider classes. It sets a comma-separated list of the accepted bean names - the auto-discovered component will only be accepted if its bean name is in this list. It can be used alongside or as an alternative to the "cxf.jaxrs.component-scan-packages" property. This property is available starting from CXF 3.1.11.
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.
If needed, instead of having the resources auto-discovered, one can use Spring ImportResource annotation to import the existing JAX-RS contexts available on the classpath.
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.