From 41b7ee255ac95c62c948dd9743506d1e737425e0 Mon Sep 17 00:00:00 2001 From: "Brian M. Long" Date: Tue, 31 Aug 2021 13:20:42 -0400 Subject: [PATCH] moved CXF/Jersey config to common --- .../com/inteligr8/rs/ClientConfiguration.java | 26 +++++++++---------- .../inteligr8/rs/ClientCxfConfiguration.java | 9 +++++++ .../java/com/inteligr8/rs/ClientCxfImpl.java | 12 +++++++++ .../rs/ClientJerseyConfiguration.java | 9 +++++++ .../com/inteligr8/rs/ClientJerseyImpl.java | 14 +++++++--- 5 files changed, 54 insertions(+), 16 deletions(-) create mode 100644 src/main/java/com/inteligr8/rs/ClientCxfConfiguration.java create mode 100644 src/main/java/com/inteligr8/rs/ClientJerseyConfiguration.java diff --git a/src/main/java/com/inteligr8/rs/ClientConfiguration.java b/src/main/java/com/inteligr8/rs/ClientConfiguration.java index 5a5e784..312e073 100644 --- a/src/main/java/com/inteligr8/rs/ClientConfiguration.java +++ b/src/main/java/com/inteligr8/rs/ClientConfiguration.java @@ -4,31 +4,31 @@ import java.net.URI; import javax.ws.rs.client.ClientRequestFilter; -public abstract class ClientConfiguration { +public interface ClientConfiguration { - public abstract String getBaseUrl(); + String getBaseUrl(); - public abstract String getBasicAuthUsername(); + String getBasicAuthUsername(); - public abstract String getBasicAuthPassword(); + String getBasicAuthPassword(); - public abstract String getAccessToken(); + String getAccessToken(); - public abstract String getOAuthTokenUrl(); + String getOAuthTokenUrl(); - public abstract String getOAuthClientId(); + String getOAuthClientId(); - public abstract String getOAuthClientSecret(); + String getOAuthClientSecret(); - public abstract String getOAuthAuthCode(); + String getOAuthAuthCode(); - public abstract String getOAuthAuthRedirectUri(); + String getOAuthAuthRedirectUri(); - public abstract String getOAuthUsername(); + String getOAuthUsername(); - public abstract String getOAuthPassword(); + String getOAuthPassword(); - public ClientRequestFilter getAuthorizationFilter() { + default ClientRequestFilter getAuthorizationFilter() { if (this.getAccessToken() != null) { return new AccessTokenRequestFilter(this.getAccessToken()); } else if (this.getOAuthTokenUrl() != null) { diff --git a/src/main/java/com/inteligr8/rs/ClientCxfConfiguration.java b/src/main/java/com/inteligr8/rs/ClientCxfConfiguration.java new file mode 100644 index 0000000..57836a5 --- /dev/null +++ b/src/main/java/com/inteligr8/rs/ClientCxfConfiguration.java @@ -0,0 +1,9 @@ +package com.inteligr8.rs; + +public interface ClientCxfConfiguration extends ClientConfiguration { + + default boolean isDefaultBusEnabled() { + return true; + } + +} diff --git a/src/main/java/com/inteligr8/rs/ClientCxfImpl.java b/src/main/java/com/inteligr8/rs/ClientCxfImpl.java index 6229208..09ff0ec 100644 --- a/src/main/java/com/inteligr8/rs/ClientCxfImpl.java +++ b/src/main/java/com/inteligr8/rs/ClientCxfImpl.java @@ -6,6 +6,7 @@ import java.util.List; import javax.ws.rs.client.ClientRequestFilter; import javax.ws.rs.ext.RuntimeDelegate; +import org.apache.cxf.BusFactory; import org.apache.cxf.jaxrs.client.JAXRSClientFactory; import org.apache.cxf.jaxrs.client.WebClient; import org.apache.cxf.jaxrs.impl.RuntimeDelegateImpl; @@ -22,6 +23,9 @@ public abstract class ClientCxfImpl extends Client implements InitializingBean { private final Logger logger = LoggerFactory.getLogger(ClientCxfImpl.class); + @Override + protected abstract ClientCxfConfiguration getConfig(); + @Override public void afterPropertiesSet() { if (RuntimeDelegate.getInstance() == null) { @@ -49,6 +53,14 @@ public abstract class ClientCxfImpl extends Client implements InitializingBean { // we can't use JAXRSClientFactory with a JAXRS client (duh!) // so we need to create a CXF client WebClient client = WebClient.create(this.getConfig().getBaseUrl(), providersAndFilters); + + if (!this.getConfig().isDefaultBusEnabled()) { + // Some applications (like ACS) add interceptors to the default bus + // those interceptors may treat all messages as SOAP messages (like ACS), resulting in ClassCastExceptions + // we need to ignore the default bus + org.apache.cxf.jaxrs.client.ClientConfiguration config = WebClient.getConfig(client); + config.setBus(BusFactory.newInstance().createBus()); + } return client; } diff --git a/src/main/java/com/inteligr8/rs/ClientJerseyConfiguration.java b/src/main/java/com/inteligr8/rs/ClientJerseyConfiguration.java new file mode 100644 index 0000000..a9517a7 --- /dev/null +++ b/src/main/java/com/inteligr8/rs/ClientJerseyConfiguration.java @@ -0,0 +1,9 @@ +package com.inteligr8.rs; + +public interface ClientJerseyConfiguration extends ClientConfiguration { + + default boolean isPutBodyRequired() { + return true; + } + +} diff --git a/src/main/java/com/inteligr8/rs/ClientJerseyImpl.java b/src/main/java/com/inteligr8/rs/ClientJerseyImpl.java index 678ef1d..b4601b8 100644 --- a/src/main/java/com/inteligr8/rs/ClientJerseyImpl.java +++ b/src/main/java/com/inteligr8/rs/ClientJerseyImpl.java @@ -16,6 +16,9 @@ public abstract class ClientJerseyImpl extends Client implements InitializingBea private final Logger logger = LoggerFactory.getLogger(ClientJerseyImpl.class); + @Override + protected abstract ClientJerseyConfiguration getConfig(); + @Override public void afterPropertiesSet() { if (RuntimeDelegate.getInstance() == null) { @@ -34,9 +37,14 @@ public abstract class ClientJerseyImpl extends Client implements InitializingBea @Override public javax.ws.rs.client.Client getClient() { - return super.getClient() - // allow PUT operations without body data - .property(ClientProperties.SUPPRESS_HTTP_COMPLIANCE_VALIDATION, true); + javax.ws.rs.client.Client client = super.getClient(); + + if (!this.getConfig().isPutBodyRequired()) { + // allow PUT operations without body data + client.property(ClientProperties.SUPPRESS_HTTP_COMPLIANCE_VALIDATION, true); + } + + return client; } @Override