From 53d9c7381da68b9b8d499f879f5149baf2d3c4dd Mon Sep 17 00:00:00 2001 From: "Brian M. Long" Date: Mon, 2 May 2022 17:41:16 -0400 Subject: [PATCH] allow singleton classes (might be bad) --- .../cxf/com/inteligr8/rs/ClientCxfImpl.java | 28 ++++++++++++----- .../com/inteligr8/rs/ClientJerseyImpl.java | 30 ++++++++++++++----- 2 files changed, 44 insertions(+), 14 deletions(-) diff --git a/src/main/cxf/com/inteligr8/rs/ClientCxfImpl.java b/src/main/cxf/com/inteligr8/rs/ClientCxfImpl.java index c28bbd7..304508e 100644 --- a/src/main/cxf/com/inteligr8/rs/ClientCxfImpl.java +++ b/src/main/cxf/com/inteligr8/rs/ClientCxfImpl.java @@ -3,6 +3,7 @@ package com.inteligr8.rs; import java.util.LinkedList; import java.util.List; +import javax.annotation.PostConstruct; import javax.ws.rs.ext.RuntimeDelegate; import org.apache.cxf.BusFactory; @@ -11,7 +12,7 @@ import org.apache.cxf.jaxrs.client.WebClient; import org.apache.cxf.jaxrs.impl.RuntimeDelegateImpl; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.InitializingBean; +import org.springframework.stereotype.Component; import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider; @@ -21,22 +22,31 @@ import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider; * * @author brian@inteligr8.com */ -public abstract class ClientCxfImpl extends Client implements InitializingBean { +@Component("client.cxf") +public class ClientCxfImpl extends Client { private final Logger logger = LoggerFactory.getLogger(ClientCxfImpl.class); - @Override - protected abstract ClientCxfConfiguration getConfig(); + private ClientCxfConfiguration config; - @Override - public void afterPropertiesSet() { - this.register(); + /** + * This constructor is for Spring use and inheriting APIs + */ + protected ClientCxfImpl() { + } + + /** + * This constructor is for POJO use + */ + public ClientCxfImpl(ClientCxfConfiguration config) { + this.config = config; } /** * This method registers the Apache CXF library as the default provider for * the JAX-RS specification. */ + @PostConstruct public void register() { if (RuntimeDelegate.getInstance() == null) { this.logger.info("Setting JAX-RS runtime delegate to the CXF library"); @@ -94,6 +104,10 @@ public abstract class ClientCxfImpl extends Client implements InitializingBean { public void addProvidersAndFilters(List providersAndFilters) { // for extension purposes } + + protected ClientCxfConfiguration getConfig() { + return this.config; + } /** * This method retrieves a JAX-RS implementation of the specified API with diff --git a/src/main/jersey/com/inteligr8/rs/ClientJerseyImpl.java b/src/main/jersey/com/inteligr8/rs/ClientJerseyImpl.java index d3735cf..e2653c8 100644 --- a/src/main/jersey/com/inteligr8/rs/ClientJerseyImpl.java +++ b/src/main/jersey/com/inteligr8/rs/ClientJerseyImpl.java @@ -1,5 +1,6 @@ package com.inteligr8.rs; +import javax.annotation.PostConstruct; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.ext.RuntimeDelegate; @@ -9,7 +10,8 @@ import org.glassfish.jersey.internal.RuntimeDelegateImpl; import org.glassfish.jersey.media.multipart.MultiPartFeature; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; /** * A class that provides pre-configured JAX-RS Client & WebTarget objects @@ -17,22 +19,32 @@ import org.springframework.beans.factory.InitializingBean; * * @author brian@inteligr8.com */ -public abstract class ClientJerseyImpl extends Client implements InitializingBean { +@Component("client.jersey") +public class ClientJerseyImpl extends Client { private final Logger logger = LoggerFactory.getLogger(ClientJerseyImpl.class); - @Override - protected abstract ClientJerseyConfiguration getConfig(); + @Autowired + private ClientJerseyConfiguration config; - @Override - public void afterPropertiesSet() { - this.register(); + /** + * This constructor is for Spring use and inheriting APIs + */ + protected ClientJerseyImpl() { + } + + /** + * This constructor is for POJO use + */ + public ClientJerseyImpl(ClientJerseyConfiguration config) { + this.config = config; } /** * This method registers the Jersey library as the default provider for the * JAX-RS specification. */ + @PostConstruct public void register() { if (RuntimeDelegate.getInstance() == null) { this.logger.info("Setting JAX-RS runtime delegate to the Jersey library"); @@ -57,6 +69,10 @@ public abstract class ClientJerseyImpl extends Client implements InitializingBea clientBuilder.property(ClientProperties.SUPPRESS_HTTP_COMPLIANCE_VALIDATION, true); } } + + protected ClientJerseyConfiguration getConfig() { + return this.config; + } /** * This method retrieves a JAX-RS implementation of the specified API with