From 255a9c8e85426ee3fb0316a71bb140de2cba6995 Mon Sep 17 00:00:00 2001 From: "Brian M. Long" Date: Tue, 30 May 2023 17:53:10 -0400 Subject: [PATCH 1/3] enabling more extensible configuration --- src/main/java/com/inteligr8/rs/Client.java | 16 ++++-------- .../com/inteligr8/rs/ClientConfiguration.java | 25 +++++++++++++++++++ 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/inteligr8/rs/Client.java b/src/main/java/com/inteligr8/rs/Client.java index cda7b3a..fc5eaa2 100644 --- a/src/main/java/com/inteligr8/rs/Client.java +++ b/src/main/java/com/inteligr8/rs/Client.java @@ -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. diff --git a/src/main/java/com/inteligr8/rs/ClientConfiguration.java b/src/main/java/com/inteligr8/rs/ClientConfiguration.java index 1bc48fe..48834b0 100644 --- a/src/main/java/com/inteligr8/rs/ClientConfiguration.java +++ b/src/main/java/com/inteligr8/rs/ClientConfiguration.java @@ -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) { + } } From 37e8b63179b8b72b651c91475d2644a911f5217d Mon Sep 17 00:00:00 2001 From: "Brian M. Long" Date: Tue, 30 May 2023 17:54:29 -0400 Subject: [PATCH 2/3] added default enum deserialization --- src/main/java/com/inteligr8/rs/Client.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/com/inteligr8/rs/Client.java b/src/main/java/com/inteligr8/rs/Client.java index fc5eaa2..8333763 100644 --- a/src/main/java/com/inteligr8/rs/Client.java +++ b/src/main/java/com/inteligr8/rs/Client.java @@ -72,6 +72,9 @@ public abstract class Client { this.getConfig().configureJacksonMapper(om); JacksonJaxbJsonProvider provider = new JacksonJaxbJsonProvider(om, JacksonJaxbJsonProvider.DEFAULT_ANNOTATIONS); + provider.enable(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL); + provider.disable(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_USING_DEFAULT_VALUE); + this.getConfig().configureJacksonProvider(provider); if (this.getConfig().isWrapRootValueEnabled()) From 9a9a95891382971ad2eec34e50e1463e38db9a02 Mon Sep 17 00:00:00 2001 From: "Brian M. Long" Date: Tue, 30 May 2023 17:58:38 -0400 Subject: [PATCH 3/3] allowing client ext; not just config ext --- src/main/java/com/inteligr8/rs/Client.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/com/inteligr8/rs/Client.java b/src/main/java/com/inteligr8/rs/Client.java index 8333763..1700d99 100644 --- a/src/main/java/com/inteligr8/rs/Client.java +++ b/src/main/java/com/inteligr8/rs/Client.java @@ -90,10 +90,19 @@ 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.