Compare commits
	
		
			18 Commits
		
	
	
		
			v2.0.1-cxf
			...
			v2.0.5-cxf
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 458cdad213 | |||
| 8b03d251e8 | |||
| a1acb3f9d9 | |||
| 00f25ff054 | |||
| 003afc208e | |||
| 85df5d3ea4 | |||
| 9a9a958913 | |||
| 37e8b63179 | |||
| 255a9c8e85 | |||
| c9833bb4b1 | |||
| bcb7d4a7ed | |||
| 23b9c4ccb2 | |||
| 6bb1561825 | |||
| 0ce2369452 | |||
| ae82bc4ec7 | |||
| 8b13f06667 | |||
| 964cec0fb5 | |||
| fe2e04f3af | 
							
								
								
									
										69
									
								
								pom.xml
									
									
									
									
									
								
							
							
						
						
									
										69
									
								
								pom.xml
									
									
									
									
									
								
							| @@ -6,7 +6,7 @@ | ||||
| 	 | ||||
| 	<groupId>com.inteligr8</groupId> | ||||
| 	<artifactId>common-rest-client</artifactId> | ||||
| 	<version>2.0.1-cxf</version> | ||||
| 	<version>2.0.5-cxf</version> | ||||
| 	<packaging>jar</packaging> | ||||
|  | ||||
| 	<name>ReST API Client for Java</name> | ||||
| @@ -44,8 +44,9 @@ | ||||
| 		<maven.compiler.target>8</maven.compiler.target> | ||||
|  | ||||
| 		<junit.version>5.7.2</junit.version> | ||||
| 		<spring.version>5.2.14.RELEASE</spring.version> | ||||
| 		<cxf.version>3.3.2</cxf.version> | ||||
| 		<spring.version>5.3.27</spring.version> | ||||
| 		<jackson.version>2.15.1</jackson.version> | ||||
| 		<cxf.version>3.5.6</cxf.version> | ||||
| 	</properties> | ||||
|  | ||||
| 	<dependencies> | ||||
| @@ -57,22 +58,22 @@ | ||||
| 		<dependency> | ||||
| 			<groupId>com.fasterxml.jackson.core</groupId> | ||||
| 			<artifactId>jackson-databind</artifactId> | ||||
| 			<version>2.12.2</version> | ||||
| 			<version>${jackson.version}</version> | ||||
| 		</dependency> | ||||
| 		<dependency> | ||||
| 			<groupId>com.fasterxml.jackson.jaxrs</groupId> | ||||
| 			<artifactId>jackson-jaxrs-json-provider</artifactId> | ||||
| 			<version>2.12.2</version> | ||||
| 			<version>${jackson.version}</version> | ||||
| 		</dependency> | ||||
| 		<dependency> | ||||
| 			<groupId>com.fasterxml.jackson.datatype</groupId> | ||||
| 			<artifactId>jackson-datatype-jsr310</artifactId> | ||||
| 			<version>2.12.2</version> | ||||
| 			<version>${jackson.version}</version> | ||||
| 		</dependency> | ||||
| 		<dependency> | ||||
| 			<groupId>org.slf4j</groupId> | ||||
| 			<artifactId>slf4j-api</artifactId> | ||||
| 			<version>1.7.29</version> | ||||
| 			<version>1.7.36</version> | ||||
| 		</dependency> | ||||
| 		<dependency> | ||||
| 			<groupId>jakarta.ws.rs</groupId> | ||||
| @@ -94,7 +95,7 @@ | ||||
| 		<dependency> | ||||
| 			<groupId>org.apache.httpcomponents</groupId> | ||||
| 			<artifactId>httpclient</artifactId> | ||||
| 			<version>4.5.9</version> | ||||
| 			<version>4.5.14</version> | ||||
| 			<scope>test</scope> | ||||
| 		</dependency> | ||||
| 		 | ||||
| @@ -111,7 +112,7 @@ | ||||
| 			<plugin> | ||||
| 				<groupId>org.codehaus.mojo</groupId> | ||||
| 				<artifactId>build-helper-maven-plugin</artifactId> | ||||
| 				<version>3.2.0</version> | ||||
| 				<version>3.4.0</version> | ||||
| 				<executions> | ||||
| 					<execution> | ||||
| 						<id>add-jaxrs-src</id> | ||||
| @@ -135,7 +136,7 @@ | ||||
| 			</plugin> | ||||
| 			<plugin> | ||||
| 				<artifactId>maven-surefire-plugin</artifactId> | ||||
| 				<version>3.0.0-M5</version> | ||||
| 				<version>3.1.0</version> | ||||
| 				<dependencies> | ||||
| 					<dependency> | ||||
| 						<groupId>org.junit.jupiter</groupId> | ||||
| @@ -146,7 +147,7 @@ | ||||
| 			</plugin> | ||||
| 			<plugin> | ||||
| 				<artifactId>maven-failsafe-plugin</artifactId> | ||||
| 				<version>3.0.0-M5</version> | ||||
| 				<version>3.1.0</version> | ||||
| 				<dependencies> | ||||
| 					<dependency> | ||||
| 						<groupId>org.junit.jupiter</groupId> | ||||
| @@ -155,29 +156,6 @@ | ||||
| 					</dependency> | ||||
| 				</dependencies> | ||||
| 			</plugin> | ||||
| 			<plugin> | ||||
| 				<artifactId>maven-source-plugin</artifactId> | ||||
| 				<executions> | ||||
| 					<execution> | ||||
| 						<id>source</id> | ||||
| 						<phase>package</phase> | ||||
| 						<goals><goal>jar-no-fork</goal></goals> | ||||
| 					</execution> | ||||
| 				</executions> | ||||
| 			</plugin> | ||||
| 			<plugin> | ||||
| 				<artifactId>maven-javadoc-plugin</artifactId> | ||||
| 				<executions> | ||||
| 					<execution> | ||||
| 						<id>javadoc</id> | ||||
| 						<phase>package</phase> | ||||
| 						<goals><goal>jar</goal></goals> | ||||
| 						<configuration> | ||||
| 							<show>public</show> | ||||
| 						</configuration> | ||||
| 					</execution> | ||||
| 				</executions> | ||||
| 			</plugin> | ||||
| 		</plugins> | ||||
| 	</build> | ||||
|  | ||||
| @@ -189,6 +167,29 @@ | ||||
| 			</properties> | ||||
| 			<build> | ||||
| 				<plugins> | ||||
| 					<plugin> | ||||
| 						<artifactId>maven-source-plugin</artifactId> | ||||
| 						<executions> | ||||
| 							<execution> | ||||
| 								<id>source</id> | ||||
| 								<phase>package</phase> | ||||
| 								<goals><goal>jar-no-fork</goal></goals> | ||||
| 							</execution> | ||||
| 						</executions> | ||||
| 					</plugin> | ||||
| 					<plugin> | ||||
| 						<artifactId>maven-javadoc-plugin</artifactId> | ||||
| 						<executions> | ||||
| 							<execution> | ||||
| 								<id>javadoc</id> | ||||
| 								<phase>package</phase> | ||||
| 								<goals><goal>jar</goal></goals> | ||||
| 								<configuration> | ||||
| 									<show>public</show> | ||||
| 								</configuration> | ||||
| 							</execution> | ||||
| 						</executions> | ||||
| 					</plugin> | ||||
| 					<plugin> | ||||
| 						<artifactId>maven-gpg-plugin</artifactId> | ||||
| 						<executions> | ||||
|   | ||||
| @@ -14,6 +14,8 @@ | ||||
|  */ | ||||
| package com.inteligr8.rs; | ||||
|  | ||||
| import org.apache.cxf.jaxrs.client.WebClient; | ||||
|  | ||||
| /** | ||||
|  * This interface defines additional configurations specific to the Apache CXF | ||||
|  * JAX-RS library and its nuances. | ||||
| @@ -35,4 +37,12 @@ public interface ClientCxfConfiguration extends ClientConfiguration { | ||||
| 		return true; | ||||
| 	} | ||||
|  | ||||
|     /** | ||||
|      * A Jackson provider, logging filter, and authentication filter are already registered. | ||||
|      *  | ||||
|      * @param client A CXF client to configure. | ||||
|      */ | ||||
| 	default void configureClient(WebClient client) { | ||||
| 	} | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -29,6 +29,8 @@ import org.slf4j.LoggerFactory; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.stereotype.Component; | ||||
|  | ||||
| import com.fasterxml.jackson.databind.ObjectMapper; | ||||
| import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; | ||||
| import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider; | ||||
|  | ||||
| /** | ||||
| @@ -41,8 +43,10 @@ import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider; | ||||
| public class ClientCxfImpl extends Client { | ||||
| 	 | ||||
| 	private final Logger logger = LoggerFactory.getLogger(ClientCxfImpl.class); | ||||
| 	 | ||||
|  | ||||
|     private final Object sync = new Object(); | ||||
| 	private ClientCxfConfiguration config; | ||||
|     private WebClient client; | ||||
| 	 | ||||
| 	/** | ||||
| 	 * This constructor is for Spring or POJO use. | ||||
| @@ -77,16 +81,40 @@ public class ClientCxfImpl extends Client { | ||||
| 	 * @return A CXF client (not JAX-RS). | ||||
| 	 */ | ||||
| 	public WebClient getCxfClient() { | ||||
| 		return this.getCxfClient(null); | ||||
|         synchronized (this.sync) { | ||||
|             if (this.client == null) | ||||
|                 this.client = this.buildCxfClient(null); | ||||
|         } | ||||
|  | ||||
|         return this.client; | ||||
| 	} | ||||
|      | ||||
|     /** | ||||
|      * @param authFilter A dynamic authorization filter. | ||||
|      * @return A pre-configured CXF client (no URL) with the specified authorization. | ||||
|      */ | ||||
|     public WebClient getCxfClient(AuthorizationFilter authFilter) { | ||||
|         if (authFilter == null) { | ||||
|             return this.getCxfClient(); | ||||
|         } else { | ||||
|             return this.buildCxfClient(authFilter); | ||||
|         } | ||||
|     } | ||||
| 	 | ||||
| 	/** | ||||
| 	 * @param authFilter A post-configuration authorization filter. | ||||
| 	 * @return A CXF client (not JAX-RS). | ||||
| 	 */ | ||||
| 	public WebClient getCxfClient(AuthorizationFilter authFilter) { | ||||
| 	public WebClient buildCxfClient(AuthorizationFilter authFilter) { | ||||
|         ObjectMapper om = new ObjectMapper(); | ||||
|         om.registerModules(new JavaTimeModule()); | ||||
|         this.getConfig().configureJacksonMapper(om); | ||||
|  | ||||
|         JacksonJaxbJsonProvider jacksonProvider = new JacksonJaxbJsonProvider(om, JacksonJaxbJsonProvider.DEFAULT_ANNOTATIONS); | ||||
|         this.getConfig().configureJacksonProvider(jacksonProvider); | ||||
|          | ||||
| 		List<Object> providersAndFilters = new LinkedList<Object>(); | ||||
| 		providersAndFilters.add(new JacksonJaxbJsonProvider()); | ||||
| 		providersAndFilters.add(jacksonProvider); | ||||
| 		providersAndFilters.add(new CxfLoggingFilter()); | ||||
| 		providersAndFilters.add(new CxfMultipartProvider()); | ||||
| 		 | ||||
| @@ -109,6 +137,8 @@ public class ClientCxfImpl extends Client { | ||||
| 			config.setBus(BusFactory.newInstance().createBus()); | ||||
| 		} | ||||
| 		 | ||||
| 		this.config.configureClient(client); | ||||
| 		 | ||||
| 		return client; | ||||
| 	} | ||||
| 	 | ||||
|   | ||||
| @@ -18,9 +18,10 @@ import javax.ws.rs.client.ClientBuilder; | ||||
| import javax.ws.rs.client.WebTarget; | ||||
|  | ||||
| import com.fasterxml.jackson.databind.DeserializationFeature; | ||||
| 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. | ||||
| @@ -66,8 +67,16 @@ public abstract class Client { | ||||
| 	 * @return A pre-configured JAX-RS client (no URL) with the specified authorization. | ||||
| 	 */ | ||||
| 	public final javax.ws.rs.client.Client buildClient(AuthorizationFilter authFilter) { | ||||
| 		JacksonJsonProvider provider = new JacksonJaxbJsonProvider(); | ||||
|  | ||||
| 	    ObjectMapper om = new ObjectMapper(); | ||||
| 	    om.registerModules(new JavaTimeModule()); | ||||
| 	    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()) | ||||
| 			provider.enable(SerializationFeature.WRAP_ROOT_VALUE); | ||||
| 		if (this.getConfig().isUnwrapRootValueEnabled()) | ||||
| @@ -83,15 +92,17 @@ public abstract class Client { | ||||
| 			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 | ||||
| 	} | ||||
|      | ||||
|     /** | ||||
|      * @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. | ||||
|   | ||||
| @@ -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) { | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user