enabling more extensible configuration

This commit is contained in:
2023-05-30 17:53:10 -04:00
parent bcb7d4a7ed
commit 255a9c8e85
2 changed files with 30 additions and 11 deletions

View File

@@ -22,7 +22,6 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;
import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
/**
* A class that provides pre-configured JAX-RS Client & WebTarget objects.
@@ -70,9 +69,11 @@ public abstract class Client {
public final javax.ws.rs.client.Client buildClient(AuthorizationFilter authFilter) {
ObjectMapper om = new ObjectMapper();
om.registerModules(new JavaTimeModule());
this.getConfig().configureJacksonMapper(om);
JacksonJsonProvider provider = new JacksonJaxbJsonProvider(om, JacksonJaxbJsonProvider.DEFAULT_ANNOTATIONS);
JacksonJaxbJsonProvider provider = new JacksonJaxbJsonProvider(om, JacksonJaxbJsonProvider.DEFAULT_ANNOTATIONS);
this.getConfig().configureJacksonProvider(provider);
if (this.getConfig().isWrapRootValueEnabled())
provider.enable(SerializationFeature.WRAP_ROOT_VALUE);
if (this.getConfig().isUnwrapRootValueEnabled())
@@ -86,17 +87,10 @@ public abstract class Client {
authFilter = this.getConfig().createAuthorizationFilter();
if (authFilter != null)
clientBuilder.register(authFilter);
this.buildClient(clientBuilder);
this.getConfig().configureClient(clientBuilder);
return clientBuilder.build();
}
/**
* @param clientBuilder A client builder
*/
public void buildClient(ClientBuilder clientBuilder) {
// for extension purposes
}
/**
* @return A pre-configured JAX-RS target (client w/ base URL) with configured authorization.

View File

@@ -16,6 +16,11 @@ package com.inteligr8.rs;
import java.net.URI;
import javax.ws.rs.client.ClientBuilder;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;
/**
* This interface defines the configurable parameters of the clients; primarily
* their default authentication and authorization.
@@ -128,6 +133,18 @@ public interface ClientConfiguration {
default boolean isWrapRootValueEnabled() {
return false;
}
/**
* @param mapper A Jackson object mapper to configure.
*/
default void configureJacksonMapper(ObjectMapper mapper) {
}
/**
* @param provider A Jackson JAX-RS provider to configure.
*/
default void configureJacksonProvider(JacksonJaxbJsonProvider provider) {
}
@@ -169,5 +186,13 @@ public interface ClientConfiguration {
return null;
}
}
/**
* A Jackson provider, logging filter, and authentication filter are already registered.
*
* @param clientBuilder A JAX-RS client builder to configure.
*/
default void configureClient(ClientBuilder clientBuilder) {
}
}