diff --git a/pom.xml b/pom.xml
index d8e8371..f56f421 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
4.0.0
com.taboola
api-java-client-core
- 1.0.6
+ 1.0.7
${project.groupId}:${project.artifactId}
API Java client core
diff --git a/src/main/java/com/taboola/rest/api/RestAPIClient.java b/src/main/java/com/taboola/rest/api/RestAPIClient.java
index e6e7b32..c8f0152 100644
--- a/src/main/java/com/taboola/rest/api/RestAPIClient.java
+++ b/src/main/java/com/taboola/rest/api/RestAPIClient.java
@@ -20,8 +20,10 @@
import com.taboola.rest.api.internal.serialization.SerializationMapperCreator;
import com.taboola.rest.api.model.CommunicationInterceptor;
import com.taboola.rest.api.model.HttpLoggingLevel;
+import com.taboola.rest.api.model.MultiRequestHeadersSupplier;
import com.taboola.rest.api.model.NoOpCommunicationInterceptor;
import com.taboola.rest.api.model.RequestHeader;
+import com.taboola.rest.api.model.RequestHeadersSupplier;
import com.taboola.rest.api.model.StringResponseFactory;
/**
@@ -51,7 +53,7 @@ public static RestAPIClientBuilder builder() {
}
public static class RestAPIClientBuilder {
- private static final String VERSION = "1.0.6";
+ private static final String VERSION = "1.0.7";
private static final Integer DEFAULT_MAX_IDLE_CONNECTIONS = 5;
private static final Long DEFAULT_KEEP_ALIVE_DURATION_MILLIS = 300_000L;
private static final SerializationConfig DEFAULT_SERIALIZATION_CONFIG = new SerializationConfig();
@@ -70,6 +72,7 @@ public static class RestAPIClientBuilder {
private Boolean debug;
private SerializationConfig serializationConfig;
private Collection headers;
+ private RequestHeadersSupplier headersSupplier;
private String userAgentPrefix;
private String userAgentSuffix;
private String restAPIVersion;
@@ -139,6 +142,11 @@ public RestAPIClientBuilder setHeaders(Collection headers) {
return this;
}
+ public RestAPIClientBuilder setHeadersSupplier(RequestHeadersSupplier headersSupplier) {
+ this.headersSupplier = headersSupplier;
+ return this;
+ }
+
public RestAPIClientBuilder setAPIVersion(String restAPIVersion) {
this.restAPIVersion = restAPIVersion;
return this;
@@ -168,8 +176,10 @@ public RestAPIClient build() {
organizeState();
String finalUserAgent = String.format("%s/%s/%s (%s)", userAgentPrefix, restAPIVersion, VERSION, userAgentSuffix);
Collection headers = getAllHeaders(this.headers, finalUserAgent);
+ RequestHeadersSupplier multiRequestHeadersSupplier = new MultiRequestHeadersSupplier(() -> headers, headersSupplier);
+
CommunicationConfig config = new CommunicationConfig(baseUrl, connectionTimeoutMillis, readTimeoutMillis, writeTimeoutMillis, maxIdleConnections,
- keepAliveDurationMillis, headers, debug, exceptionFactory, objectMapper, stringResponseFactories, loggingLevel, communicationInterceptor);
+ keepAliveDurationMillis, multiRequestHeadersSupplier, debug, exceptionFactory, objectMapper, stringResponseFactories, loggingLevel, communicationInterceptor);
return new RestAPIClient(new CommunicationFactory(config));
}
@@ -241,7 +251,7 @@ private void organizeState() {
loggingLevel = HttpLoggingLevel.BASIC;
}
- if(communicationInterceptor == null) {
+ if (communicationInterceptor == null) {
communicationInterceptor = DEFAULT_COMMUNICATION_INTERCEPTOR;
}
}
diff --git a/src/main/java/com/taboola/rest/api/internal/CommunicationFactory.java b/src/main/java/com/taboola/rest/api/internal/CommunicationFactory.java
index ec86dfb..6aab8a8 100644
--- a/src/main/java/com/taboola/rest/api/internal/CommunicationFactory.java
+++ b/src/main/java/com/taboola/rest/api/internal/CommunicationFactory.java
@@ -57,7 +57,7 @@ private Retrofit.Builder createRetrofitBuilder(CommunicationConfig config) {
private OkHttpClient createOkHttpClient(CommunicationConfig config) {
return new OkHttpClient.Builder()
- .addInterceptor(new HeadersInterceptor(config.getHeaders()))
+ .addInterceptor(new HeadersInterceptor(config.getRequestHeadersSupplier()))
.addInterceptor(createLoggingInterceptor(config))
.addInterceptor(new ImmutableRequestResponseInterceptor(config.getCommunicationInterceptor()))
.readTimeout(config.getReadTimeoutMillis(), TimeUnit.MILLISECONDS)
diff --git a/src/main/java/com/taboola/rest/api/internal/config/CommunicationConfig.java b/src/main/java/com/taboola/rest/api/internal/config/CommunicationConfig.java
index d6c89d3..034d1a8 100644
--- a/src/main/java/com/taboola/rest/api/internal/config/CommunicationConfig.java
+++ b/src/main/java/com/taboola/rest/api/internal/config/CommunicationConfig.java
@@ -8,7 +8,7 @@
import com.taboola.rest.api.internal.StringResponseFactories;
import com.taboola.rest.api.model.CommunicationInterceptor;
import com.taboola.rest.api.model.HttpLoggingLevel;
-import com.taboola.rest.api.model.RequestHeader;
+import com.taboola.rest.api.model.RequestHeadersSupplier;
/**
* Created by vladi
@@ -25,7 +25,7 @@ public class CommunicationConfig {
private final int maxIdleConnections;
private final long keepAliveDurationMillis;
private final boolean debug;
- private final Collection headers;
+ private final RequestHeadersSupplier requestHeadersSupplier;
private final ExceptionFactory exceptionFactory;
private final ObjectMapper objectMapper;
private final StringResponseFactories stringResponseFactories;
@@ -34,7 +34,7 @@ public class CommunicationConfig {
public CommunicationConfig(String baseUrl, Long connectionTimeoutMillis, Long readTimeoutMillis,
Long writeTimeoutMillis, Integer maxIdleConnections, Long keepAliveDurationMillis,
- Collection headers, boolean debug, ExceptionFactory exceptionFactory,
+ RequestHeadersSupplier requestHeadersSupplier, boolean debug, ExceptionFactory exceptionFactory,
ObjectMapper objectMapper, StringResponseFactories stringResponseFactories, HttpLoggingLevel loggingLevel,
CommunicationInterceptor communicationInterceptor) {
this.baseUrl = baseUrl;
@@ -43,7 +43,7 @@ public CommunicationConfig(String baseUrl, Long connectionTimeoutMillis, Long re
this.writeTimeoutMillis = writeTimeoutMillis;
this.maxIdleConnections = maxIdleConnections;
this.keepAliveDurationMillis = keepAliveDurationMillis;
- this.headers = headers;
+ this.requestHeadersSupplier = requestHeadersSupplier;
this.debug = debug;
this.exceptionFactory = exceptionFactory;
this.objectMapper = objectMapper;
@@ -76,8 +76,8 @@ public long getKeepAliveDurationMillis() {
return keepAliveDurationMillis;
}
- public Collection getHeaders() {
- return headers;
+ public RequestHeadersSupplier getRequestHeadersSupplier() {
+ return requestHeadersSupplier;
}
public boolean isDebug() {
@@ -114,7 +114,7 @@ public String toString() {
", maxIdleConnections=" + maxIdleConnections +
", keepAliveDurationMillis=" + keepAliveDurationMillis +
", debug=" + debug +
- ", headers=" + headers +
+ ", requestHeadersSupplier=" + requestHeadersSupplier +
", exceptionFactory=" + exceptionFactory +
", objectMapper=" + objectMapper +
", stringResponseFactories=" + stringResponseFactories +
diff --git a/src/main/java/com/taboola/rest/api/internal/interceptors/HeadersInterceptor.java b/src/main/java/com/taboola/rest/api/internal/interceptors/HeadersInterceptor.java
index 9940e20..3928faf 100644
--- a/src/main/java/com/taboola/rest/api/internal/interceptors/HeadersInterceptor.java
+++ b/src/main/java/com/taboola/rest/api/internal/interceptors/HeadersInterceptor.java
@@ -1,9 +1,9 @@
package com.taboola.rest.api.internal.interceptors;
import java.io.IOException;
-import java.util.Collection;
import com.taboola.rest.api.model.RequestHeader;
+import com.taboola.rest.api.model.RequestHeadersSupplier;
import okhttp3.Interceptor;
import okhttp3.Request;
@@ -13,22 +13,23 @@
* Created on 10/21/20.
*/
public class HeadersInterceptor implements Interceptor {
- private final Collection headers;
+ private final RequestHeadersSupplier requestHeadersSupplier;
- public HeadersInterceptor(Collection headers) {
- this.headers = headers;
+ public HeadersInterceptor(RequestHeadersSupplier requestHeadersSupplier) {
+ this.requestHeadersSupplier = requestHeadersSupplier;
}
@Override
public Response intercept(Chain chain) throws IOException {
Request.Builder builder = chain.request().newBuilder();
- headers.stream()
+ requestHeadersSupplier.get()
+ .stream()
.filter(this::validateHeader)
.forEach(header -> builder.header(header.getName(), header.getValue()));
return chain.proceed(builder.build());
}
- private boolean validateHeader(RequestHeader header){
+ private boolean validateHeader(RequestHeader header) {
return header.getName() != null && header.getValue() != null;
}
}
diff --git a/src/main/java/com/taboola/rest/api/model/MultiRequestHeadersSupplier.java b/src/main/java/com/taboola/rest/api/model/MultiRequestHeadersSupplier.java
new file mode 100644
index 0000000..9dbfe87
--- /dev/null
+++ b/src/main/java/com/taboola/rest/api/model/MultiRequestHeadersSupplier.java
@@ -0,0 +1,24 @@
+package com.taboola.rest.api.model;
+
+import java.util.Collection;
+import java.util.Objects;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+public class MultiRequestHeadersSupplier implements RequestHeadersSupplier {
+ private final Collection suppliers;
+
+ public MultiRequestHeadersSupplier(RequestHeadersSupplier... suppliers) {
+ this.suppliers = Stream.of(suppliers == null ? new RequestHeadersSupplier[0] : suppliers)
+ .filter(Objects::nonNull)
+ .collect(Collectors.toList());
+ }
+
+ @Override
+ public Collection get() {
+ return suppliers.stream()
+ .map(RequestHeadersSupplier::get)
+ .flatMap(Collection::stream)
+ .collect(Collectors.toList());
+ }
+}
diff --git a/src/main/java/com/taboola/rest/api/model/RequestHeadersSupplier.java b/src/main/java/com/taboola/rest/api/model/RequestHeadersSupplier.java
new file mode 100644
index 0000000..2f99461
--- /dev/null
+++ b/src/main/java/com/taboola/rest/api/model/RequestHeadersSupplier.java
@@ -0,0 +1,7 @@
+package com.taboola.rest.api.model;
+
+import java.util.Collection;
+import java.util.function.Supplier;
+
+public interface RequestHeadersSupplier extends Supplier> {
+}
diff --git a/src/test/java/com/taboola/rest/api/internal/CommunicationFactoryTest.java b/src/test/java/com/taboola/rest/api/internal/CommunicationFactoryTest.java
index d7a5c8f..745baf1 100644
--- a/src/test/java/com/taboola/rest/api/internal/CommunicationFactoryTest.java
+++ b/src/test/java/com/taboola/rest/api/internal/CommunicationFactoryTest.java
@@ -38,7 +38,7 @@ public interface TestEndpoint {
public void beforeTest() {
CommunicationConfig communicationConfig = new CommunicationConfig("http://localhost",
1L, 1L, 1L, 1, 60L,
- Collections.singleton(new UserAgentHeader("Dummy-Agent")),true, new DefaultExceptionFactory(),
+ () -> Collections.singleton(new UserAgentHeader("Dummy-Agent")), true, new DefaultExceptionFactory(),
new ObjectMapper(), new StringResponseFactories(), HttpLoggingLevel.BASIC, new NoOpCommunicationInterceptor());
testInstance = new CommunicationFactory(communicationConfig);
}