Skip to content

Commit 80af417

Browse files
authored
Merge pull request #14 from taboola/custom-interceptor
Allow customized interceptors
2 parents e808f45 + 755e6e6 commit 80af417

File tree

8 files changed

+61
-19
lines changed

8 files changed

+61
-19
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<modelVersion>4.0.0</modelVersion>
77
<groupId>com.taboola</groupId>
88
<artifactId>api-java-client-core</artifactId>
9-
<version>1.0.6</version>
9+
<version>1.0.7</version>
1010

1111
<name>${project.groupId}:${project.artifactId}</name>
1212
<description>API Java client core</description>

src/main/java/com/taboola/rest/api/RestAPIClient.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,10 @@
2020
import com.taboola.rest.api.internal.serialization.SerializationMapperCreator;
2121
import com.taboola.rest.api.model.CommunicationInterceptor;
2222
import com.taboola.rest.api.model.HttpLoggingLevel;
23+
import com.taboola.rest.api.model.MultiRequestHeadersSupplier;
2324
import com.taboola.rest.api.model.NoOpCommunicationInterceptor;
2425
import com.taboola.rest.api.model.RequestHeader;
26+
import com.taboola.rest.api.model.RequestHeadersSupplier;
2527
import com.taboola.rest.api.model.StringResponseFactory;
2628

2729
/**
@@ -51,7 +53,7 @@ public static RestAPIClientBuilder builder() {
5153
}
5254

5355
public static class RestAPIClientBuilder {
54-
private static final String VERSION = "1.0.6";
56+
private static final String VERSION = "1.0.7";
5557
private static final Integer DEFAULT_MAX_IDLE_CONNECTIONS = 5;
5658
private static final Long DEFAULT_KEEP_ALIVE_DURATION_MILLIS = 300_000L;
5759
private static final SerializationConfig DEFAULT_SERIALIZATION_CONFIG = new SerializationConfig();
@@ -70,6 +72,7 @@ public static class RestAPIClientBuilder {
7072
private Boolean debug;
7173
private SerializationConfig serializationConfig;
7274
private Collection<RequestHeader> headers;
75+
private RequestHeadersSupplier headersSupplier;
7376
private String userAgentPrefix;
7477
private String userAgentSuffix;
7578
private String restAPIVersion;
@@ -139,6 +142,11 @@ public RestAPIClientBuilder setHeaders(Collection<RequestHeader> headers) {
139142
return this;
140143
}
141144

145+
public RestAPIClientBuilder setHeadersSupplier(RequestHeadersSupplier headersSupplier) {
146+
this.headersSupplier = headersSupplier;
147+
return this;
148+
}
149+
142150
public RestAPIClientBuilder setAPIVersion(String restAPIVersion) {
143151
this.restAPIVersion = restAPIVersion;
144152
return this;
@@ -168,8 +176,10 @@ public RestAPIClient build() {
168176
organizeState();
169177
String finalUserAgent = String.format("%s/%s/%s (%s)", userAgentPrefix, restAPIVersion, VERSION, userAgentSuffix);
170178
Collection<RequestHeader> headers = getAllHeaders(this.headers, finalUserAgent);
179+
RequestHeadersSupplier multiRequestHeadersSupplier = new MultiRequestHeadersSupplier(() -> headers, headersSupplier);
180+
171181
CommunicationConfig config = new CommunicationConfig(baseUrl, connectionTimeoutMillis, readTimeoutMillis, writeTimeoutMillis, maxIdleConnections,
172-
keepAliveDurationMillis, headers, debug, exceptionFactory, objectMapper, stringResponseFactories, loggingLevel, communicationInterceptor);
182+
keepAliveDurationMillis, multiRequestHeadersSupplier, debug, exceptionFactory, objectMapper, stringResponseFactories, loggingLevel, communicationInterceptor);
173183
return new RestAPIClient(new CommunicationFactory(config));
174184
}
175185

@@ -241,7 +251,7 @@ private void organizeState() {
241251
loggingLevel = HttpLoggingLevel.BASIC;
242252
}
243253

244-
if(communicationInterceptor == null) {
254+
if (communicationInterceptor == null) {
245255
communicationInterceptor = DEFAULT_COMMUNICATION_INTERCEPTOR;
246256
}
247257
}

src/main/java/com/taboola/rest/api/internal/CommunicationFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ private Retrofit.Builder createRetrofitBuilder(CommunicationConfig config) {
5757

5858
private OkHttpClient createOkHttpClient(CommunicationConfig config) {
5959
return new OkHttpClient.Builder()
60-
.addInterceptor(new HeadersInterceptor(config.getHeaders()))
60+
.addInterceptor(new HeadersInterceptor(config.getRequestHeadersSupplier()))
6161
.addInterceptor(createLoggingInterceptor(config))
6262
.addInterceptor(new ImmutableRequestResponseInterceptor(config.getCommunicationInterceptor()))
6363
.readTimeout(config.getReadTimeoutMillis(), TimeUnit.MILLISECONDS)

src/main/java/com/taboola/rest/api/internal/config/CommunicationConfig.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import com.taboola.rest.api.internal.StringResponseFactories;
99
import com.taboola.rest.api.model.CommunicationInterceptor;
1010
import com.taboola.rest.api.model.HttpLoggingLevel;
11-
import com.taboola.rest.api.model.RequestHeader;
11+
import com.taboola.rest.api.model.RequestHeadersSupplier;
1212

1313
/**
1414
* Created by vladi
@@ -25,7 +25,7 @@ public class CommunicationConfig {
2525
private final int maxIdleConnections;
2626
private final long keepAliveDurationMillis;
2727
private final boolean debug;
28-
private final Collection<RequestHeader> headers;
28+
private final RequestHeadersSupplier requestHeadersSupplier;
2929
private final ExceptionFactory exceptionFactory;
3030
private final ObjectMapper objectMapper;
3131
private final StringResponseFactories stringResponseFactories;
@@ -34,7 +34,7 @@ public class CommunicationConfig {
3434

3535
public CommunicationConfig(String baseUrl, Long connectionTimeoutMillis, Long readTimeoutMillis,
3636
Long writeTimeoutMillis, Integer maxIdleConnections, Long keepAliveDurationMillis,
37-
Collection<RequestHeader> headers, boolean debug, ExceptionFactory exceptionFactory,
37+
RequestHeadersSupplier requestHeadersSupplier, boolean debug, ExceptionFactory exceptionFactory,
3838
ObjectMapper objectMapper, StringResponseFactories stringResponseFactories, HttpLoggingLevel loggingLevel,
3939
CommunicationInterceptor communicationInterceptor) {
4040
this.baseUrl = baseUrl;
@@ -43,7 +43,7 @@ public CommunicationConfig(String baseUrl, Long connectionTimeoutMillis, Long re
4343
this.writeTimeoutMillis = writeTimeoutMillis;
4444
this.maxIdleConnections = maxIdleConnections;
4545
this.keepAliveDurationMillis = keepAliveDurationMillis;
46-
this.headers = headers;
46+
this.requestHeadersSupplier = requestHeadersSupplier;
4747
this.debug = debug;
4848
this.exceptionFactory = exceptionFactory;
4949
this.objectMapper = objectMapper;
@@ -76,8 +76,8 @@ public long getKeepAliveDurationMillis() {
7676
return keepAliveDurationMillis;
7777
}
7878

79-
public Collection<RequestHeader> getHeaders() {
80-
return headers;
79+
public RequestHeadersSupplier getRequestHeadersSupplier() {
80+
return requestHeadersSupplier;
8181
}
8282

8383
public boolean isDebug() {
@@ -114,7 +114,7 @@ public String toString() {
114114
", maxIdleConnections=" + maxIdleConnections +
115115
", keepAliveDurationMillis=" + keepAliveDurationMillis +
116116
", debug=" + debug +
117-
", headers=" + headers +
117+
", requestHeadersSupplier=" + requestHeadersSupplier +
118118
", exceptionFactory=" + exceptionFactory +
119119
", objectMapper=" + objectMapper +
120120
", stringResponseFactories=" + stringResponseFactories +
Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package com.taboola.rest.api.internal.interceptors;
22

33
import java.io.IOException;
4-
import java.util.Collection;
54

65
import com.taboola.rest.api.model.RequestHeader;
6+
import com.taboola.rest.api.model.RequestHeadersSupplier;
77

88
import okhttp3.Interceptor;
99
import okhttp3.Request;
@@ -13,22 +13,23 @@
1313
* Created on 10/21/20.
1414
*/
1515
public class HeadersInterceptor implements Interceptor {
16-
private final Collection<RequestHeader> headers;
16+
private final RequestHeadersSupplier requestHeadersSupplier;
1717

18-
public HeadersInterceptor(Collection<RequestHeader> headers) {
19-
this.headers = headers;
18+
public HeadersInterceptor(RequestHeadersSupplier requestHeadersSupplier) {
19+
this.requestHeadersSupplier = requestHeadersSupplier;
2020
}
2121

2222
@Override
2323
public Response intercept(Chain chain) throws IOException {
2424
Request.Builder builder = chain.request().newBuilder();
25-
headers.stream()
25+
requestHeadersSupplier.get()
26+
.stream()
2627
.filter(this::validateHeader)
2728
.forEach(header -> builder.header(header.getName(), header.getValue()));
2829
return chain.proceed(builder.build());
2930
}
3031

31-
private boolean validateHeader(RequestHeader header){
32+
private boolean validateHeader(RequestHeader header) {
3233
return header.getName() != null && header.getValue() != null;
3334
}
3435
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.taboola.rest.api.model;
2+
3+
import java.util.Collection;
4+
import java.util.Objects;
5+
import java.util.stream.Collectors;
6+
import java.util.stream.Stream;
7+
8+
public class MultiRequestHeadersSupplier implements RequestHeadersSupplier {
9+
private final Collection<RequestHeadersSupplier> suppliers;
10+
11+
public MultiRequestHeadersSupplier(RequestHeadersSupplier... suppliers) {
12+
this.suppliers = Stream.of(suppliers == null ? new RequestHeadersSupplier[0] : suppliers)
13+
.filter(Objects::nonNull)
14+
.collect(Collectors.toList());
15+
}
16+
17+
@Override
18+
public Collection<RequestHeader> get() {
19+
return suppliers.stream()
20+
.map(RequestHeadersSupplier::get)
21+
.flatMap(Collection::stream)
22+
.collect(Collectors.toList());
23+
}
24+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.taboola.rest.api.model;
2+
3+
import java.util.Collection;
4+
import java.util.function.Supplier;
5+
6+
public interface RequestHeadersSupplier extends Supplier<Collection<RequestHeader>> {
7+
}

src/test/java/com/taboola/rest/api/internal/CommunicationFactoryTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public interface TestEndpoint {
3838
public void beforeTest() {
3939
CommunicationConfig communicationConfig = new CommunicationConfig("http://localhost",
4040
1L, 1L, 1L, 1, 60L,
41-
Collections.singleton(new UserAgentHeader("Dummy-Agent")),true, new DefaultExceptionFactory(),
41+
() -> Collections.singleton(new UserAgentHeader("Dummy-Agent")), true, new DefaultExceptionFactory(),
4242
new ObjectMapper(), new StringResponseFactories(), HttpLoggingLevel.BASIC, new NoOpCommunicationInterceptor());
4343
testInstance = new CommunicationFactory(communicationConfig);
4444
}

0 commit comments

Comments
 (0)