Commit 255a9c8e authored by Brian Long's avatar Brian Long
Browse files

enabling more extensible configuration

parent bcb7d4a7
Loading
Loading
Loading
Loading
+5 −11
Original line number Diff line number Diff line
@@ -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,8 +69,10 @@ 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);
@@ -86,18 +87,11 @@ 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.
	 */
+25 −0
Original line number Diff line number Diff line
@@ -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.
@@ -129,6 +134,18 @@ public interface ClientConfiguration {
		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) {
	}
	
	

	/**
@@ -170,4 +187,12 @@ public interface ClientConfiguration {
		}
	}
    
    /**
     * 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) {
    }

}