Loading pom.xml +8 −8 Original line number Diff line number Diff line Loading @@ -43,9 +43,9 @@ <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <junit.version>5.10.0</junit.version> <spring.version>6.0.19</spring.version> <jackson.version>2.17.2</jackson.version> <junit.version>5.12.0</junit.version> <spring.version>6.0.23</spring.version> <jackson.version>2.17.3</jackson.version> <jersey.version>3.1.8</jersey.version> </properties> Loading Loading @@ -78,12 +78,12 @@ <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.14.0</version> <version>3.17.0</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>2.0.13</version> <version>2.0.17</version> </dependency> <dependency> <groupId>jakarta.ws.rs</groupId> Loading Loading @@ -168,7 +168,7 @@ </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>3.1.0</version> <version>3.4.0</version> <dependencies> <dependency> <groupId>org.junit.jupiter</groupId> Loading @@ -179,7 +179,7 @@ </plugin> <plugin> <artifactId>maven-failsafe-plugin</artifactId> <version>3.1.0</version> <version>3.4.0</version> <dependencies> <dependency> <groupId>org.junit.jupiter</groupId> Loading Loading @@ -235,7 +235,7 @@ <plugin> <groupId>org.sonatype.plugins</groupId> <artifactId>nexus-staging-maven-plugin</artifactId> <version>1.6.13</version> <version>1.6.14</version> <configuration> <serverId>ossrh</serverId> <nexusUrl>https://s01.oss.sonatype.org/</nexusUrl> Loading src/main/java/com/inteligr8/rs/BasicAuthorizationFilter.java +2 −0 Original line number Diff line number Diff line Loading @@ -34,6 +34,8 @@ public class BasicAuthorizationFilter implements AuthorizationFilter { private final String password; /** * This constructor instantiates the filter with required fields. * * @param username A username or access key. * @param password A password or secret key. */ Loading src/main/java/com/inteligr8/rs/BearerTokenAuthorizationFilter.java +2 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,8 @@ public class BearerTokenAuthorizationFilter implements AuthorizationFilter { private final String token; /** * This constructor instantiates the filter with required fields. * * @param token A 'Bearer' token. */ public BearerTokenAuthorizationFilter(String token) { Loading src/main/java/com/inteligr8/rs/Client.java +30 −13 Original line number Diff line number Diff line Loading @@ -26,7 +26,7 @@ import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.fasterxml.jackson.jakarta.rs.json.JacksonJsonProvider; /** * A class that provides pre-configured JAX-RS Client & WebTarget objects. * A class that provides pre-configured Jakarta RS Client & WebTarget objects. * * @author brian@inteligr8.com */ Loading @@ -36,12 +36,17 @@ public abstract class Client { private jakarta.ws.rs.client.Client client; /** * This method retrieves the configuration for the client. * * @return The client configuration. */ public abstract ClientConfiguration getConfig(); /** * @return A pre-configured JAX-RS client (no URL) with configured authorization. * This method retrieves an anonymous cached instance of the underlying * Jakarta RS client. * * @return A pre-configured Jakarta RS client (no URL) with configured authorization. */ public final jakarta.ws.rs.client.Client getClient() { synchronized (this.sync) { Loading @@ -53,8 +58,11 @@ public abstract class Client { } /** * This method retrieves either an anonymous cached instance or builds an * authorized instance of the underlying Jakarta RS client. * * @param authFilter A dynamic authorization filter. * @return A pre-configured JAX-RS client (no URL) with the specified authorization. * @return A pre-configured Jakarta RS client (no URL) with the specified authorization. */ public jakarta.ws.rs.client.Client getClient(AuthorizationFilter authFilter) { if (authFilter == null) { Loading @@ -65,8 +73,10 @@ public abstract class Client { } /** * This method builds a new Jakarta RS client with optional authorization. * * @param authFilter A dynamic authorization filter. * @return A pre-configured JAX-RS client (no URL) with the specified authorization. * @return A pre-configured Jakarta RS client (no URL) with the specified authorization. */ public final jakarta.ws.rs.client.Client buildClient(AuthorizationFilter authFilter) { ObjectMapper om = new ObjectMapper(); Loading Loading @@ -101,14 +111,19 @@ public abstract class Client { } /** * @param clientBuilder A client builder * This method allows sub-classes to extend the Jakarta RS client builder * before the client is built. * * @param clientBuilder A Jakarta RS client builder. */ public void buildClient(ClientBuilder clientBuilder) { // for extension purposes } /** * @return A pre-configured JAX-RS target (client w/ base URL) with configured authorization. * This method builds an anonymous Jakarta RS target. * * @return A pre-configured Jakarta RS target (client w/ base URL) with configured authorization. */ public final WebTarget getTarget() { return this.getClient() Loading @@ -116,8 +131,10 @@ public abstract class Client { } /** * This method builds an authorized Jakarta RS target. * * @param authFilter A dynamic authorization filter. * @return A pre-configured JAX-RS target (client w/ base URL) with the specified authorization. * @return A pre-configured Jakarta RS target (client w/ base URL) with the specified authorization. */ public WebTarget getTarget(AuthorizationFilter authFilter) { if (authFilter == null) { Loading @@ -129,10 +146,10 @@ public abstract class Client { } /** * This method retrieves a JAX-RS implementation of the specified API. * This method retrieves a Jakarta RS implementation of the specified API. * * @param <T> A JAX-RS annotated API class. * @param apiClass A JAX-RS annotated API class. * @param <T> A Jakarta RS annotated API class. * @param apiClass A Jakarta RS annotated API class. * @return An instance of the API class. */ public final <T> T getApi(Class<T> apiClass) { Loading @@ -140,12 +157,12 @@ public abstract class Client { } /** * This method retrieves a JAX-RS implementation of the specified API with * This method retrieves a Jakarta RS implementation of the specified API with * the specified authorization. * * @param <T> A JAX-RS annotated API class. * @param <T> A Jakarta RS annotated API class. * @param authFilter A dynamic authorization filter. * @param apiClass A JAX-RS annotated API class. * @param apiClass A Jakarta RS annotated API class. * @return An instance of the API class. */ public abstract <T> T getApi(AuthorizationFilter authFilter, Class<T> apiClass); Loading src/main/java/com/inteligr8/rs/ClientConfiguration.java +76 −17 Original line number Diff line number Diff line Loading @@ -30,89 +30,127 @@ import jakarta.ws.rs.client.ClientBuilder; public interface ClientConfiguration { /** * @return The base or root URL of the service. * This method retrieves the base/root URL of the client service. * * @return The URL. */ String getBaseUrl(); /** * @return The username for BASIC authentication. * This method retrieves the username to use in HTTP BASIC authentication/authorization. * * @return A username. */ default String getBasicAuthUsername() { return null; } /** * @return The corresponding password for the username in BASIC authentication. * This method retrieves the password to use in HTTP BASIC authentication/authorization. * * @return The corresponding password for the username. */ default String getBasicAuthPassword() { return null; } /** * @return The client ID for Client Enforcement authentication. * This method retrieves the client identifier to use in Client Enforcement authorization. * * @return A client identifier. */ default String getClientId() { return null; } /** * @return The corresponding client secret for the client ID in Client Enforcement authentication. * This method retrieves the client secret to use in Client Enforcement authorization. * * @return The corresponding client secret for the client identifier. */ default String getClientSecret() { return null; } /** * @return The token for BEARER authorization. * This method retrieves the token to use in HTTP BEARER authorization. * This is provided in a response to the token URL. * * @return An access token. */ default String getBearerToken() { return null; } /** * @return The token URL for OAuth authorization. * This method retrieves the token URL to use for OAuth authorization. * The value can be pulled from OAuth endpoint well-known meta-data. That * endpoint or the token URL itself may also be provided OAuth IdP * administrator. * * @return An OAuth token URL. */ default String getOAuthTokenUrl() { return null; } /** * @return The client ID provided by the OAuth IdP administrator. * This method retrieves the client identifier to use in OAuth * authorization. This is provided by the OAuth IdP administrator or * tooling. * * @return A client identifier. */ default String getOAuthClientId() { return this.getClientId(); } /** * @return The corresponding client secret for the client ID provided by the OAuth IdP administrator. * This method retrieves the client secret to use in OAuth authorization. * This is provided by the OAuth IdP administrator or tooling. * * @return The corresponding client secret for the client identifier. */ default String getOAuthClientSecret() { return this.getClientSecret(); } /** * @return The authorization code used in the OAuth Authorization Code flow. * This method retrieves the authorization code to use in OAuth * Authorization Code flow. This is provided by the OAuth IdP * administrator or tooling. * * @return An authorization code. */ default String getOAuthAuthCode() { return null; } /** * @return The redirect URL used in the OAuth Authorization Code flow. * This method retrieves the redirect URL to use in OAuth Authorization * Code flow. This has meaning to the client-side web application. * * @return A URL for the OAuth flow to redirect to when complete. */ default String getOAuthAuthRedirectUri() { return null; } /** * @return The username used in the OAuth Password Grant flow. * This method retrieves the username to use in OAuth Password Grant flow. * This is provided by the OAuth IdP administrator or tooling. * * @return A username. */ default String getOAuthUsername() { return null; } /** * @return The corresponding password for the username used in the OAuth Password Grant flow. * This method retrieves the password to use in OAuth Password Grant flow. * This is provided by the OAuth IdP administrator or tooling. * * @return The corresponding password for the username. */ default String getOAuthPassword() { return null; Loading @@ -120,10 +158,22 @@ public interface ClientConfiguration { /** * This method retrieves the connection (before request sent) timeout for * the client. * * @return A timeout in milliseconds. */ default Integer getConnectTimeoutInMillis() { return null; } /** * This method retrieves the response (after request sent) timeout for the * client. * * @return A timeout in milliseconds. */ default Integer getResponseTimeoutInMillis() { return null; } Loading @@ -131,27 +181,36 @@ public interface ClientConfiguration { /** * @return true to enable Jackson UNWRAP_ROOT_VALUE feature; false otherwise. * This method enables/disables the JackSON UNWRAP_ROOT_VALUE feature. * * @return `true` to enable; `false` otherwise. */ default boolean isUnwrapRootValueEnabled() { return false; } /** * @return true to enable Jackson WRAP_ROOT_VALUE feature; false otherwise. * This method enables/disables the JackSON WRAP_ROOT_VALUE feature. * * @return `true` to enable; `false` otherwise. */ default boolean isWrapRootValueEnabled() { return false; } /** * @param mapper A Jackson object mapper to configure. * This method allows sub-classes to extend the JackSON mapper * configuration and behavior. * * @param mapper A JackSON object mapper. */ default void configureJacksonMapper(ObjectMapper mapper) { } /** * @param provider A Jackson Jakarta RS provider to configure. * This method allows sub-classes to extend the JackSON JSON provider. * * @param provider A JackSON Jakarta RS provider. */ default void configureJacksonProvider(JacksonJsonProvider provider) { } Loading Loading
pom.xml +8 −8 Original line number Diff line number Diff line Loading @@ -43,9 +43,9 @@ <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <junit.version>5.10.0</junit.version> <spring.version>6.0.19</spring.version> <jackson.version>2.17.2</jackson.version> <junit.version>5.12.0</junit.version> <spring.version>6.0.23</spring.version> <jackson.version>2.17.3</jackson.version> <jersey.version>3.1.8</jersey.version> </properties> Loading Loading @@ -78,12 +78,12 @@ <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.14.0</version> <version>3.17.0</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>2.0.13</version> <version>2.0.17</version> </dependency> <dependency> <groupId>jakarta.ws.rs</groupId> Loading Loading @@ -168,7 +168,7 @@ </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>3.1.0</version> <version>3.4.0</version> <dependencies> <dependency> <groupId>org.junit.jupiter</groupId> Loading @@ -179,7 +179,7 @@ </plugin> <plugin> <artifactId>maven-failsafe-plugin</artifactId> <version>3.1.0</version> <version>3.4.0</version> <dependencies> <dependency> <groupId>org.junit.jupiter</groupId> Loading Loading @@ -235,7 +235,7 @@ <plugin> <groupId>org.sonatype.plugins</groupId> <artifactId>nexus-staging-maven-plugin</artifactId> <version>1.6.13</version> <version>1.6.14</version> <configuration> <serverId>ossrh</serverId> <nexusUrl>https://s01.oss.sonatype.org/</nexusUrl> Loading
src/main/java/com/inteligr8/rs/BasicAuthorizationFilter.java +2 −0 Original line number Diff line number Diff line Loading @@ -34,6 +34,8 @@ public class BasicAuthorizationFilter implements AuthorizationFilter { private final String password; /** * This constructor instantiates the filter with required fields. * * @param username A username or access key. * @param password A password or secret key. */ Loading
src/main/java/com/inteligr8/rs/BearerTokenAuthorizationFilter.java +2 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,8 @@ public class BearerTokenAuthorizationFilter implements AuthorizationFilter { private final String token; /** * This constructor instantiates the filter with required fields. * * @param token A 'Bearer' token. */ public BearerTokenAuthorizationFilter(String token) { Loading
src/main/java/com/inteligr8/rs/Client.java +30 −13 Original line number Diff line number Diff line Loading @@ -26,7 +26,7 @@ import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.fasterxml.jackson.jakarta.rs.json.JacksonJsonProvider; /** * A class that provides pre-configured JAX-RS Client & WebTarget objects. * A class that provides pre-configured Jakarta RS Client & WebTarget objects. * * @author brian@inteligr8.com */ Loading @@ -36,12 +36,17 @@ public abstract class Client { private jakarta.ws.rs.client.Client client; /** * This method retrieves the configuration for the client. * * @return The client configuration. */ public abstract ClientConfiguration getConfig(); /** * @return A pre-configured JAX-RS client (no URL) with configured authorization. * This method retrieves an anonymous cached instance of the underlying * Jakarta RS client. * * @return A pre-configured Jakarta RS client (no URL) with configured authorization. */ public final jakarta.ws.rs.client.Client getClient() { synchronized (this.sync) { Loading @@ -53,8 +58,11 @@ public abstract class Client { } /** * This method retrieves either an anonymous cached instance or builds an * authorized instance of the underlying Jakarta RS client. * * @param authFilter A dynamic authorization filter. * @return A pre-configured JAX-RS client (no URL) with the specified authorization. * @return A pre-configured Jakarta RS client (no URL) with the specified authorization. */ public jakarta.ws.rs.client.Client getClient(AuthorizationFilter authFilter) { if (authFilter == null) { Loading @@ -65,8 +73,10 @@ public abstract class Client { } /** * This method builds a new Jakarta RS client with optional authorization. * * @param authFilter A dynamic authorization filter. * @return A pre-configured JAX-RS client (no URL) with the specified authorization. * @return A pre-configured Jakarta RS client (no URL) with the specified authorization. */ public final jakarta.ws.rs.client.Client buildClient(AuthorizationFilter authFilter) { ObjectMapper om = new ObjectMapper(); Loading Loading @@ -101,14 +111,19 @@ public abstract class Client { } /** * @param clientBuilder A client builder * This method allows sub-classes to extend the Jakarta RS client builder * before the client is built. * * @param clientBuilder A Jakarta RS client builder. */ public void buildClient(ClientBuilder clientBuilder) { // for extension purposes } /** * @return A pre-configured JAX-RS target (client w/ base URL) with configured authorization. * This method builds an anonymous Jakarta RS target. * * @return A pre-configured Jakarta RS target (client w/ base URL) with configured authorization. */ public final WebTarget getTarget() { return this.getClient() Loading @@ -116,8 +131,10 @@ public abstract class Client { } /** * This method builds an authorized Jakarta RS target. * * @param authFilter A dynamic authorization filter. * @return A pre-configured JAX-RS target (client w/ base URL) with the specified authorization. * @return A pre-configured Jakarta RS target (client w/ base URL) with the specified authorization. */ public WebTarget getTarget(AuthorizationFilter authFilter) { if (authFilter == null) { Loading @@ -129,10 +146,10 @@ public abstract class Client { } /** * This method retrieves a JAX-RS implementation of the specified API. * This method retrieves a Jakarta RS implementation of the specified API. * * @param <T> A JAX-RS annotated API class. * @param apiClass A JAX-RS annotated API class. * @param <T> A Jakarta RS annotated API class. * @param apiClass A Jakarta RS annotated API class. * @return An instance of the API class. */ public final <T> T getApi(Class<T> apiClass) { Loading @@ -140,12 +157,12 @@ public abstract class Client { } /** * This method retrieves a JAX-RS implementation of the specified API with * This method retrieves a Jakarta RS implementation of the specified API with * the specified authorization. * * @param <T> A JAX-RS annotated API class. * @param <T> A Jakarta RS annotated API class. * @param authFilter A dynamic authorization filter. * @param apiClass A JAX-RS annotated API class. * @param apiClass A Jakarta RS annotated API class. * @return An instance of the API class. */ public abstract <T> T getApi(AuthorizationFilter authFilter, Class<T> apiClass); Loading
src/main/java/com/inteligr8/rs/ClientConfiguration.java +76 −17 Original line number Diff line number Diff line Loading @@ -30,89 +30,127 @@ import jakarta.ws.rs.client.ClientBuilder; public interface ClientConfiguration { /** * @return The base or root URL of the service. * This method retrieves the base/root URL of the client service. * * @return The URL. */ String getBaseUrl(); /** * @return The username for BASIC authentication. * This method retrieves the username to use in HTTP BASIC authentication/authorization. * * @return A username. */ default String getBasicAuthUsername() { return null; } /** * @return The corresponding password for the username in BASIC authentication. * This method retrieves the password to use in HTTP BASIC authentication/authorization. * * @return The corresponding password for the username. */ default String getBasicAuthPassword() { return null; } /** * @return The client ID for Client Enforcement authentication. * This method retrieves the client identifier to use in Client Enforcement authorization. * * @return A client identifier. */ default String getClientId() { return null; } /** * @return The corresponding client secret for the client ID in Client Enforcement authentication. * This method retrieves the client secret to use in Client Enforcement authorization. * * @return The corresponding client secret for the client identifier. */ default String getClientSecret() { return null; } /** * @return The token for BEARER authorization. * This method retrieves the token to use in HTTP BEARER authorization. * This is provided in a response to the token URL. * * @return An access token. */ default String getBearerToken() { return null; } /** * @return The token URL for OAuth authorization. * This method retrieves the token URL to use for OAuth authorization. * The value can be pulled from OAuth endpoint well-known meta-data. That * endpoint or the token URL itself may also be provided OAuth IdP * administrator. * * @return An OAuth token URL. */ default String getOAuthTokenUrl() { return null; } /** * @return The client ID provided by the OAuth IdP administrator. * This method retrieves the client identifier to use in OAuth * authorization. This is provided by the OAuth IdP administrator or * tooling. * * @return A client identifier. */ default String getOAuthClientId() { return this.getClientId(); } /** * @return The corresponding client secret for the client ID provided by the OAuth IdP administrator. * This method retrieves the client secret to use in OAuth authorization. * This is provided by the OAuth IdP administrator or tooling. * * @return The corresponding client secret for the client identifier. */ default String getOAuthClientSecret() { return this.getClientSecret(); } /** * @return The authorization code used in the OAuth Authorization Code flow. * This method retrieves the authorization code to use in OAuth * Authorization Code flow. This is provided by the OAuth IdP * administrator or tooling. * * @return An authorization code. */ default String getOAuthAuthCode() { return null; } /** * @return The redirect URL used in the OAuth Authorization Code flow. * This method retrieves the redirect URL to use in OAuth Authorization * Code flow. This has meaning to the client-side web application. * * @return A URL for the OAuth flow to redirect to when complete. */ default String getOAuthAuthRedirectUri() { return null; } /** * @return The username used in the OAuth Password Grant flow. * This method retrieves the username to use in OAuth Password Grant flow. * This is provided by the OAuth IdP administrator or tooling. * * @return A username. */ default String getOAuthUsername() { return null; } /** * @return The corresponding password for the username used in the OAuth Password Grant flow. * This method retrieves the password to use in OAuth Password Grant flow. * This is provided by the OAuth IdP administrator or tooling. * * @return The corresponding password for the username. */ default String getOAuthPassword() { return null; Loading @@ -120,10 +158,22 @@ public interface ClientConfiguration { /** * This method retrieves the connection (before request sent) timeout for * the client. * * @return A timeout in milliseconds. */ default Integer getConnectTimeoutInMillis() { return null; } /** * This method retrieves the response (after request sent) timeout for the * client. * * @return A timeout in milliseconds. */ default Integer getResponseTimeoutInMillis() { return null; } Loading @@ -131,27 +181,36 @@ public interface ClientConfiguration { /** * @return true to enable Jackson UNWRAP_ROOT_VALUE feature; false otherwise. * This method enables/disables the JackSON UNWRAP_ROOT_VALUE feature. * * @return `true` to enable; `false` otherwise. */ default boolean isUnwrapRootValueEnabled() { return false; } /** * @return true to enable Jackson WRAP_ROOT_VALUE feature; false otherwise. * This method enables/disables the JackSON WRAP_ROOT_VALUE feature. * * @return `true` to enable; `false` otherwise. */ default boolean isWrapRootValueEnabled() { return false; } /** * @param mapper A Jackson object mapper to configure. * This method allows sub-classes to extend the JackSON mapper * configuration and behavior. * * @param mapper A JackSON object mapper. */ default void configureJacksonMapper(ObjectMapper mapper) { } /** * @param provider A Jackson Jakarta RS provider to configure. * This method allows sub-classes to extend the JackSON JSON provider. * * @param provider A JackSON Jakarta RS provider. */ default void configureJacksonProvider(JacksonJsonProvider provider) { } Loading