Add headers to asynchronous get in HttpClient

Issue-ID: POLICY-1625
Signed-off-by: Jim Hahn <jrh3@att.com>
Change-Id: I61ef2fcfde5eb361652d2d6e3f55324af7ca7b4e
diff --git a/policy-endpoints/src/main/java/org/onap/policy/common/endpoints/http/client/HttpClient.java b/policy-endpoints/src/main/java/org/onap/policy/common/endpoints/http/client/HttpClient.java
index ebed1d7..9e4e412 100644
--- a/policy-endpoints/src/main/java/org/onap/policy/common/endpoints/http/client/HttpClient.java
+++ b/policy-endpoints/src/main/java/org/onap/policy/common/endpoints/http/client/HttpClient.java
@@ -53,19 +53,21 @@
      * Asynchronous GET request.
      *
      * @param callback callback to be invoked, asynchronously, when the request completes
-     * @param path context uri path.
+     * @param path context uri path
+     * @param headers request headers
      *
      * @return future that can be used to cancel the request or await the response
      */
-    Future<Response> get(InvocationCallback<Response> callback, String path);
+    Future<Response> get(InvocationCallback<Response> callback, String path, Map<String, Object> headers);
 
     /**
      * Asynchronous GET request.
      *
      * @param callback callback to be invoked, asynchronously, when the request completes
+     * @param headers request headers
      * @return future that can be used to cancel the request or await the response
      */
-    Future<Response> get(InvocationCallback<Response> callback);
+    Future<Response> get(InvocationCallback<Response> callback, Map<String, Object> headers);
 
     /**
      * PUT request.
diff --git a/policy-endpoints/src/main/java/org/onap/policy/common/endpoints/http/client/internal/JerseyClient.java b/policy-endpoints/src/main/java/org/onap/policy/common/endpoints/http/client/internal/JerseyClient.java
index 1a822ff..38ec682 100644
--- a/policy-endpoints/src/main/java/org/onap/policy/common/endpoints/http/client/internal/JerseyClient.java
+++ b/policy-endpoints/src/main/java/org/onap/policy/common/endpoints/http/client/internal/JerseyClient.java
@@ -26,6 +26,7 @@
 import java.security.KeyManagementException;
 import java.security.NoSuchAlgorithmException;
 import java.security.SecureRandom;
+import java.util.Collections;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.concurrent.Future;
@@ -171,17 +172,23 @@
     }
 
     @Override
-    public Future<Response> get(InvocationCallback<Response> callback, String path) {
+    public Future<Response> get(InvocationCallback<Response> callback, String path, Map<String, Object> headers) {
+        Map<String, Object> headers2 = (headers != null ? headers : Collections.emptyMap());
+
         if (!StringUtils.isBlank(path)) {
-            return this.client.target(this.baseUrl).path(path).request().async().get(callback);
+            return getBuilder(path, headers2).async().get(callback);
         } else {
-            return this.client.target(this.baseUrl).request().async().get(callback);
+            return get(callback, headers2);
         }
     }
 
     @Override
-    public Future<Response> get(InvocationCallback<Response> callback) {
-        return this.client.target(this.baseUrl).request().async().get(callback);
+    public Future<Response> get(InvocationCallback<Response> callback, Map<String, Object> headers) {
+        Builder builder = this.client.target(this.baseUrl).request();
+        if (headers != null) {
+            headers.forEach(builder::header);
+        }
+        return builder.async().get(callback);
     }
 
     @Override
diff --git a/policy-endpoints/src/test/java/org/onap/policy/common/endpoints/http/server/test/HttpClientTest.java b/policy-endpoints/src/test/java/org/onap/policy/common/endpoints/http/server/test/HttpClientTest.java
index d3f94cd..5d609a6 100644
--- a/policy-endpoints/src/test/java/org/onap/policy/common/endpoints/http/server/test/HttpClientTest.java
+++ b/policy-endpoints/src/test/java/org/onap/policy/common/endpoints/http/server/test/HttpClientTest.java
@@ -31,6 +31,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Properties;
+import java.util.TreeMap;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 import javax.ws.rs.client.Entity;
@@ -204,7 +205,7 @@
         final HttpClient client = getNoAuthHttpClient(TEST_HTTP_NO_AUTH_CLIENT, false,
             6666);
         MyCallback callback = new MyCallback();
-        final Response response = client.get(callback, HELLO).get();
+        final Response response = client.get(callback, HELLO, new TreeMap<>()).get();
 
         verifyCallback("testHttpGetNoAuthClientAsync", callback, response);
 
@@ -316,7 +317,7 @@
         final HttpClient client = getAuthHttpClient();
 
         MyCallback callback = new MyCallback();
-        final Response response = client.get(callback, HELLO).get();
+        final Response response = client.get(callback, HELLO, null).get();
 
         verifyCallback("testHttpAsyncAuthClient", callback, response);
 
@@ -496,13 +497,13 @@
 
         // try it asynchronously, too
         MyCallback callback = new MyCallback();
-        response = clientPap.get(callback).get();
+        response = clientPap.get(callback, null).get();
         verifyCallback("testHttpAuthClientProps", callback, response);
         assertEquals(200, response.getStatus());
 
         // try it asynchronously, with empty path
         callback = new MyCallback();
-        response = clientPap.get(callback, "").get();
+        response = clientPap.get(callback, "", null).get();
         verifyCallback("testHttpAuthClientProps - empty path", callback, response);
         assertEquals(200, response.getStatus());
     }