Skip to content

Commit 15960c9

Browse files
committed
Add method for setting default HTTP headers for all requests #22
1 parent 4be6162 commit 15960c9

File tree

2 files changed

+56
-5
lines changed

2 files changed

+56
-5
lines changed

src/main/java/com/ibm/watson/developer_cloud/service/WatsonService.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import java.io.IOException;
1717
import java.net.CookieManager;
1818
import java.net.CookiePolicy;
19+
import java.util.Map;
1920
import java.util.concurrent.TimeUnit;
2021
import java.util.logging.Level;
2122
import java.util.logging.Logger;
@@ -50,10 +51,11 @@ public abstract class WatsonService {
5051
private final OkHttpClient client;
5152
private String endPoint;
5253
private final String name;
54+
private Headers defaultHeaders = null;
5355

5456
/**
5557
* Instantiates a new Watson service.
56-
*
58+
*
5759
* @param name the service name
5860
*/
5961
public WatsonService(String name) {
@@ -96,6 +98,11 @@ protected Response execute(Request request) {
9698
builder.url(RequestUtil.replaceEndPoint(request.urlString(), getEndPoint()));
9799
}
98100

101+
// Set default headers
102+
if (defaultHeaders != null) {
103+
builder.headers(defaultHeaders);
104+
}
105+
99106
// Set User-Agent
100107
builder.header(HttpHeaders.USER_AGENT, getUserAgent());
101108

@@ -299,9 +306,17 @@ public void setUsernameAndPassword(String username, String password) {
299306
apiKey = Credentials.basic(username, password);
300307
}
301308

309+
/**
310+
* Set the default headers to be used on every HTTP request.
311+
* @param headers name value pairs of headers
312+
*/
313+
public void setDefaultHeaders(Map<String, String> headers) {
314+
defaultHeaders = Headers.of(headers);
315+
}
316+
302317
/*
303318
* (non-Javadoc)
304-
*
319+
*
305320
* @see java.lang.Object#toString()
306321
*/
307322
@Override

src/test/java/com/ibm/watson/developer_cloud/service/GenericServiceTest.java

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,24 @@
1313
*/
1414
package com.ibm.watson.developer_cloud.service;
1515

16-
import static org.mockserver.integration.ClientAndServer.startClientAndServer;
17-
import static org.mockserver.model.HttpRequest.request;
18-
import static org.mockserver.model.HttpResponse.response;
16+
import static org.mockserver.integration.ClientAndServer.*;
17+
import static org.mockserver.model.HttpRequest.*;
18+
import static org.mockserver.model.HttpResponse.*;
1919

20+
import java.util.HashMap;
21+
import java.util.Map;
2022
import java.util.logging.Level;
2123
import java.util.logging.Logger;
2224

2325
import org.junit.After;
2426
import org.junit.Before;
2527
import org.junit.Test;
2628
import org.mockserver.integration.ClientAndServer;
29+
import org.mockserver.model.Header;
30+
import org.mockserver.model.HttpRequest;
2731

2832
import com.ibm.watson.developer_cloud.WatsonServiceTest;
33+
import com.ibm.watson.developer_cloud.http.HttpHeaders;
2934
import com.ibm.watson.developer_cloud.personality_insights.v2.PersonalityInsights;
3035
import com.ibm.watson.developer_cloud.personality_insights.v2.PersonalityInsightsTest;
3136

@@ -64,6 +69,14 @@ private void mockAPICallWithError(int code, String errorMessage) {
6469
"{\"code\":" + code + ", \"error\":\"" + errorMessage + "\"}"));
6570
}
6671

72+
/**
73+
* Mock a successful PersonalityInsights call.
74+
*/
75+
private void mockAPICall() {
76+
mockServer.when(request().withMethod(POST).withPath(GET_PROFILE_PATH)).respond(
77+
response().withStatusCode(200).withBody("{}"));
78+
}
79+
6780
/**
6881
* Service unavailable exception.
6982
*/
@@ -188,4 +201,27 @@ public void testUnsupportedException() {
188201
service.getProfile(sampleText);
189202
}
190203

204+
@Test
205+
public void testUserAgentIsSet() {
206+
mockAPICall();
207+
service.getProfile(sampleText);
208+
mockServer.verify(new HttpRequest().withMethod("POST")
209+
.withHeader(new Header(HttpHeaders.USER_AGENT, "watson-developer-cloud-java-sdk-2.1.0")));
210+
}
211+
212+
@Test
213+
public void testDefaultHeadersAreSet() {
214+
final Map<String, String> headers = new HashMap<String, String>();
215+
headers.put("name1", "value1");
216+
headers.put("name2", "value2");
217+
218+
final Header expectedHeader1 = new Header("name1", "value1");
219+
final Header expectedHeader2 = new Header("name2", "value2");
220+
221+
service.setDefaultHeaders(headers);
222+
mockAPICall();
223+
service.getProfile(sampleText);
224+
mockServer.verify(new HttpRequest().withMethod("POST")
225+
.withHeader(expectedHeader1).withHeader(expectedHeader2));
226+
}
191227
}

0 commit comments

Comments
 (0)