46.5. Configuring the Client Endpoint
It is possible to augment the functionality of the base
javax.ws.rs.client.Clientobject by registering and configuring features and providers.
The following example shows a client configured to have a logging feature, a custom entity provider, and to set the
// Java import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.Client; import org.apache.cxf.feature.LoggingFeature; ... Client client = ClientBuilder.newClient(); client.register(LoggingFeature.class) .register(MyCustomEntityProvider.class) .property("LoggingFeature.prettyLogging","true");
Configurable API for registering objects
Clientclass supports the
ConfigurableAPI for registering objects, which provides several variants of the
registermethod. In most cases, you would register either a class or an object instance, as shown in the following examples:
client.register(LoggingFeature.class) client.register(new LoggingFeature())
For more details about the
registervariants, see the reference documentation for
What can you configure on the client?
You can configure the following aspects of a client endpoint:
javax.ws.rs.core.Featureis effectively a plug-in that adds an extra feature or functionality to a JAX-RS client. Often, a feature installs one or more interceptors in order to provide the required functionality.
A provider is a particular kind of client plug-in that provides a mapping capability. The JAX-RS 2.0 specification defines the following kinds of provider:
- Entity providers
- An entity provider provides the capability of mapping between a specific media type a Java type. For more details, see Section 46.4, “Parsing Requests and Responses”.
- Exception mapping providers
- An exception mapping provider maps a checked runtime exception to an instance of
- Context providers
- A context provider is used on the server side, to supply context to resource classes and other service providers.
A JAX-RS 2.0 filter is a plug-in that gives you access to the URI, headers, and miscellaneous context data at various points (extension points) of the message processing pipeline. For details, see Chapter 58, JAX-RS 2.0 Filters and Interceptors.
A JAX-RS 2.0 interceptor is a plug-in that gives you access to the message body of a request or response as it is being read or written. For details, see Chapter 58, JAX-RS 2.0 Filters and Interceptors.
By setting one or more properties on the client, you can customize the configuration of a registered feature or a registered provider.
Other configurable types
It is possible, not only to configure a
javax.ws.rs.client.ClientBuilder) object, but also a
WebTargetobject. When you change the configuration of a
WebTargetobject, the underlying client configuration is deep copied to give the new
WebTargetconfiguration. Hence, it is possible to change the configuration of the
WebTargetobject without changing the configuration of the original