From dd89e148932ba0acbfc6ceb4b229b001b6b8dd33 Mon Sep 17 00:00:00 2001 From: "Benjamin, Max (mb388a)" Date: Thu, 28 Jan 2021 13:12:40 -0500 Subject: allow RestClient to configure custom headers allow RestClient to configure custom headers always load the first implementation on the classpath Issue-ID: SO-3495 Signed-off-by: Benjamin, Max (mb388a) Change-Id: I9c433cdaed33a7db6182af259421676c088a1fae --- .../onap/so/client/sdnc/lcm/SDNCLcmRestClient.java | 9 +-- .../main/java/org/onap/so/client/HttpClient.java | 9 +-- .../main/java/org/onap/so/client/RestClient.java | 32 ++++++---- .../java/org/onap/so/client/RestProperties.java | 7 +++ .../org/onap/so/client/RestPropertiesLoader.java | 4 +- .../main/java/org/onap/so/client/RestRequest.java | 12 ++-- .../so/client/adapter/rest/AdapterRestClient.java | 11 ++-- .../onap/so/client/dmaap/rest/DMaaPRestClient.java | 11 ++-- .../java/org/onap/so/client/grm/GRMRestClient.java | 7 ++- .../onap/so/client/policy/PolicyRestClient.java | 13 +++-- .../java/org/onap/so/client/RestClientTest.java | 5 +- .../client/adapter/rest/AdapterRestClientTest.java | 20 ++++--- .../so/client/dmaap/rest/DMaaPRestClientTest.java | 22 ++++--- .../so/client/policy/PolicyClientImplTest.java | 23 ++++---- .../org/onap/aaiclient/client/aai/AAIClient.java | 13 +++-- .../aaiclient/client/aai/AAIDSLQueryClient.java | 9 ++- .../onap/aaiclient/client/aai/AAIRestClient.java | 24 +++++--- .../graphinventory/GraphInventoryClient.java | 14 ++--- .../graphinventory/GraphInventoryRestClient.java | 5 +- .../client/aai/AAIDSLQueryClientTest.java | 5 +- .../aaiclient/client/aai/AAIRestClientTest.java | 17 +++--- mso-api-handlers/mso-api-handler-infra/pom.xml | 18 +++--- pom.xml | 68 +++++++++++----------- 23 files changed, 206 insertions(+), 152 deletions(-) diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/sdnc/lcm/SDNCLcmRestClient.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/sdnc/lcm/SDNCLcmRestClient.java index 3faf58ec28..85d67a89c9 100644 --- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/sdnc/lcm/SDNCLcmRestClient.java +++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/sdnc/lcm/SDNCLcmRestClient.java @@ -21,10 +21,11 @@ package org.onap.so.client.sdnc.lcm; import java.net.URI; -import java.util.Map; import java.util.Optional; -import org.onap.so.client.RestClient; +import javax.ws.rs.core.MultivaluedMap; +import org.javatuples.Pair; import org.onap.logging.filter.base.ONAPComponents; +import org.onap.so.client.RestClient; import org.onap.so.client.sdnc.lcm.beans.LcmInput; import org.onap.so.client.sdnc.lcm.beans.LcmOutput; import org.onap.so.client.sdnc.lcm.beans.LcmRestRequest; @@ -44,8 +45,8 @@ public class SDNCLcmRestClient extends RestClient { } @Override - protected void initializeHeaderMap(Map headerMap) { - headerMap.put("Authorization", sdncLcmProperties.getBasicAuth()); + protected void initializeHeaderMap(MultivaluedMap> headerMap) { + headerMap.add("ALL", Pair.with("Authorization", sdncLcmProperties.getBasicAuth())); } @Override diff --git a/common/src/main/java/org/onap/so/client/HttpClient.java b/common/src/main/java/org/onap/so/client/HttpClient.java index eaeb0ab6c6..0420ab2373 100644 --- a/common/src/main/java/org/onap/so/client/HttpClient.java +++ b/common/src/main/java/org/onap/so/client/HttpClient.java @@ -20,10 +20,11 @@ package org.onap.so.client; +import static org.apache.commons.lang3.StringUtils.isNotBlank; import java.net.URL; -import java.util.Map; import java.util.Optional; -import static org.apache.commons.lang3.StringUtils.*; +import javax.ws.rs.core.MultivaluedMap; +import org.javatuples.Pair; import org.onap.logging.filter.base.ONAPComponentsList; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -49,7 +50,7 @@ public class HttpClient extends RestClient { } @Override - protected void initializeHeaderMap(Map headerMap) {} + protected void initializeHeaderMap(MultivaluedMap> headerMap) {} @Override protected Optional addResponseExceptionMapper() { @@ -79,7 +80,7 @@ public class HttpClient extends RestClient { public void addAdditionalHeader(String name, String value) { try { if (isNotBlank(name) && isNotBlank(value)) { - headerMap.put(name, value); + headerMap.add("ALL", Pair.with(name, value)); } else { log.warn("Not adding " + name + " to headers."); } diff --git a/common/src/main/java/org/onap/so/client/RestClient.java b/common/src/main/java/org/onap/so/client/RestClient.java index f201c7c906..d1b4c2b900 100644 --- a/common/src/main/java/org/onap/so/client/RestClient.java +++ b/common/src/main/java/org/onap/so/client/RestClient.java @@ -29,10 +29,7 @@ import java.security.GeneralSecurityException; import java.time.Duration; import java.util.ArrayList; import java.util.Base64; -import java.util.HashMap; import java.util.List; -import java.util.Map; -import java.util.Map.Entry; import java.util.Optional; import java.util.concurrent.TimeUnit; import java.util.function.Predicate; @@ -43,9 +40,12 @@ import javax.ws.rs.client.ResponseProcessingException; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.GenericType; import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.MultivaluedHashMap; +import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; import javax.ws.rs.core.UriBuilder; +import org.javatuples.Pair; import org.onap.logging.filter.base.MDCSetup; import org.onap.logging.filter.base.ONAPComponentsList; import org.onap.logging.filter.base.PayloadLoggingClientFilter; @@ -67,7 +67,7 @@ public abstract class RestClient { private static final int MAX_PAYLOAD_SIZE = 1024 * 1024; private WebTarget webTarget; - protected final Map headerMap; + protected final MultivaluedMap> headerMap; protected final Logger logger = LoggerFactory.getLogger(RestClient.class); protected URL host; protected Optional path; @@ -80,7 +80,7 @@ public abstract class RestClient { protected RestClient(RestProperties props, Optional path) { - headerMap = new HashMap<>(); + headerMap = new MultivaluedHashMap<>(); try { host = props.getEndpoint(); } catch (MalformedURLException e) { @@ -99,7 +99,7 @@ public abstract class RestClient { } protected RestClient(URL host, String contentType) { - headerMap = new HashMap<>(); + headerMap = new MultivaluedHashMap<>(); this.path = Optional.empty(); this.host = host; this.contentType = contentType; @@ -107,7 +107,7 @@ public abstract class RestClient { } protected RestClient(URL host, String acceptType, String contentType) { - headerMap = new HashMap<>(); + headerMap = new MultivaluedHashMap<>(); this.path = Optional.empty(); this.host = host; this.accept = acceptType; @@ -133,15 +133,23 @@ public abstract class RestClient { return MAX_PAYLOAD_SIZE; } - protected Builder getBuilder() { + protected Builder getBuilder(String method) { if (webTarget == null) { initializeClient(getClient()); } Builder builder = webTarget.request(); initializeHeaderMap(headerMap); - for (Entry entry : headerMap.entrySet()) { - builder.header(entry.getKey(), entry.getValue()); + if (headerMap.containsKey("ALL")) { + for (Pair pair : headerMap.get("ALL")) { + builder.header(pair.getValue0(), pair.getValue1()); + } + } + + if (headerMap.containsKey(method)) { + for (Pair pair : headerMap.get(method)) { + builder.header(pair.getValue0(), pair.getValue1()); + } } return builder; } @@ -150,7 +158,7 @@ public abstract class RestClient { return this.webTarget; } - protected abstract void initializeHeaderMap(Map headerMap); + protected abstract void initializeHeaderMap(MultivaluedMap> headerMap); protected Optional addResponseExceptionMapper() { return Optional.of(new ResponseExceptionMapperImpl()); @@ -170,7 +178,7 @@ public abstract class RestClient { try { byte[] decryptedAuth = CryptoUtils.decrypt(auth, key).getBytes(); String authHeaderValue = "Basic " + Base64.getEncoder().encodeToString(decryptedAuth); - headerMap.put("Authorization", authHeaderValue); + headerMap.add("ALL", Pair.with("Authorization", authHeaderValue)); } catch (GeneralSecurityException e) { logger.error(e.getMessage(), e); } diff --git a/common/src/main/java/org/onap/so/client/RestProperties.java b/common/src/main/java/org/onap/so/client/RestProperties.java index 79e006bf9a..d1cf77b047 100644 --- a/common/src/main/java/org/onap/so/client/RestProperties.java +++ b/common/src/main/java/org/onap/so/client/RestProperties.java @@ -22,6 +22,9 @@ package org.onap.so.client; import java.net.MalformedURLException; import java.net.URL; +import javax.ws.rs.core.MultivaluedHashMap; +import javax.ws.rs.core.MultivaluedMap; +import org.javatuples.Pair; public interface RestProperties { @@ -66,4 +69,8 @@ public interface RestProperties { public default CacheProperties getCacheProperties() { return new CacheProperties() {}; } + + public default MultivaluedMap> additionalHeaders() { + return new MultivaluedHashMap<>(); + } } diff --git a/common/src/main/java/org/onap/so/client/RestPropertiesLoader.java b/common/src/main/java/org/onap/so/client/RestPropertiesLoader.java index efb50cf04b..952c8de7de 100644 --- a/common/src/main/java/org/onap/so/client/RestPropertiesLoader.java +++ b/common/src/main/java/org/onap/so/client/RestPropertiesLoader.java @@ -62,9 +62,9 @@ public class RestPropertiesLoader { if (clazz.isAssignableFrom(item.getClass())) { try { if (forceNewInstance) { - result = (T) item.getClass().newInstance(); + return (T) item.getClass().newInstance(); } else { - result = (T) item; + return (T) item; } } catch (InstantiationException | IllegalAccessException e) { /* diff --git a/common/src/main/java/org/onap/so/client/RestRequest.java b/common/src/main/java/org/onap/so/client/RestRequest.java index 9e6e818171..0a1be758c9 100644 --- a/common/src/main/java/org/onap/so/client/RestRequest.java +++ b/common/src/main/java/org/onap/so/client/RestRequest.java @@ -49,23 +49,23 @@ public class RestRequest implements CheckedSupplier { public Response get() throws Exception { final Response response; if ("GET".equals(method)) { - response = this.client.getBuilder().accept(this.client.getAccept()).get(); + response = this.client.getBuilder(method).accept(this.client.getAccept()).get(); } else if ("POST".equals(method)) { - response = this.client.getBuilder().accept(this.client.getAccept()) + response = this.client.getBuilder(method).accept(this.client.getAccept()) .post(Entity.entity(entity, this.client.getContentType())); } else if ("PATCH".equals(method)) { - response = this.client.getBuilder().header("X-HTTP-Method-Override", "PATCH") + response = this.client.getBuilder(method).header("X-HTTP-Method-Override", "PATCH") .accept(this.client.getAccept()).post(Entity.entity(entity, this.client.getMergeContentType())); } else if ("DELETE".equals(method)) { if (entity == null) { - response = this.client.getBuilder().accept(this.client.getAccept()).delete(); + response = this.client.getBuilder(method).accept(this.client.getAccept()).delete(); } else { - response = this.client.getBuilder().accept(this.client.getAccept()) + response = this.client.getBuilder(method).accept(this.client.getAccept()) .build(HttpMethod.DELETE, Entity.entity(entity, this.client.getContentType())).invoke(); } } else if ("PUT".equals(method)) { - response = this.client.getBuilder().accept(this.client.getAccept()) + response = this.client.getBuilder(method).accept(this.client.getAccept()) .put(Entity.entity(entity, this.client.getContentType())); } else { response = Response.serverError().entity(method + " not valid").build(); diff --git a/common/src/main/java/org/onap/so/client/adapter/rest/AdapterRestClient.java b/common/src/main/java/org/onap/so/client/adapter/rest/AdapterRestClient.java index 88899a7097..3bac3dc210 100644 --- a/common/src/main/java/org/onap/so/client/adapter/rest/AdapterRestClient.java +++ b/common/src/main/java/org/onap/so/client/adapter/rest/AdapterRestClient.java @@ -22,14 +22,15 @@ package org.onap.so.client.adapter.rest; import java.net.URI; import java.security.GeneralSecurityException; -import java.util.Map; import java.util.Optional; +import javax.ws.rs.core.MultivaluedMap; import org.apache.commons.codec.binary.Base64; +import org.javatuples.Pair; +import org.onap.logging.filter.base.ONAPComponents; import org.onap.so.client.RestClient; import org.onap.so.client.policy.CommonObjectMapperProvider; import org.onap.so.client.policy.JettisonStyleMapperProvider; import org.onap.so.utils.CryptoUtils; -import org.onap.logging.filter.base.ONAPComponents; public class AdapterRestClient extends RestClient { @@ -51,9 +52,9 @@ public class AdapterRestClient extends RestClient { } @Override - protected void initializeHeaderMap(Map headerMap) { - headerMap.put("Authorization", - this.getBasicAuth(adapterRestProperties.getAuth(), adapterRestProperties.getKey())); + protected void initializeHeaderMap(MultivaluedMap> headerMap) { + headerMap.add("ALL", Pair.with("Authorization", + this.getBasicAuth(adapterRestProperties.getAuth(), adapterRestProperties.getKey()))); } @Override diff --git a/common/src/main/java/org/onap/so/client/dmaap/rest/DMaaPRestClient.java b/common/src/main/java/org/onap/so/client/dmaap/rest/DMaaPRestClient.java index e0c8d4ba80..85417e09d4 100644 --- a/common/src/main/java/org/onap/so/client/dmaap/rest/DMaaPRestClient.java +++ b/common/src/main/java/org/onap/so/client/dmaap/rest/DMaaPRestClient.java @@ -21,8 +21,10 @@ package org.onap.so.client.dmaap.rest; import java.net.URL; -import java.util.Map; import java.util.UUID; +import javax.ws.rs.core.MultivaluedMap; +import org.javatuples.Pair; +import org.onap.logging.filter.base.ONAPComponents; import org.onap.logging.ref.slf4j.ONAPLogConstants; import org.onap.so.client.RestClient; import org.onap.logging.filter.base.ONAPComponents; @@ -46,14 +48,15 @@ public class DMaaPRestClient extends RestClient { } @Override - protected void initializeHeaderMap(Map headerMap) { + protected void initializeHeaderMap(MultivaluedMap> headerMap) { if (auth != null && !auth.isEmpty() && key != null && !key.isEmpty()) { addBasicAuthHeader(auth, key); } String onapRequestId = UUID.randomUUID().toString(); - headerMap.put(ONAPLogConstants.Headers.REQUEST_ID, onapRequestId); + headerMap.add("ALL", Pair.with(ONAPLogConstants.Headers.REQUEST_ID, onapRequestId)); if (MDC.get(ONAPLogConstants.MDCs.REQUEST_ID) != null) { - headerMap.put(ONAPLogConstants.Headers.INVOCATION_ID, MDC.get(ONAPLogConstants.MDCs.REQUEST_ID)); + headerMap.add("ALL", + Pair.with(ONAPLogConstants.Headers.INVOCATION_ID, MDC.get(ONAPLogConstants.MDCs.REQUEST_ID))); } } } diff --git a/common/src/main/java/org/onap/so/client/grm/GRMRestClient.java b/common/src/main/java/org/onap/so/client/grm/GRMRestClient.java index 147f688ea8..cf73a57535 100644 --- a/common/src/main/java/org/onap/so/client/grm/GRMRestClient.java +++ b/common/src/main/java/org/onap/so/client/grm/GRMRestClient.java @@ -22,10 +22,11 @@ package org.onap.so.client.grm; import java.net.URI; -import java.util.Map; import java.util.Optional; -import org.onap.so.client.RestClient; +import javax.ws.rs.core.MultivaluedMap; +import org.javatuples.Pair; import org.onap.logging.filter.base.ONAPComponents; +import org.onap.so.client.RestClient; public class GRMRestClient extends RestClient { @@ -42,7 +43,7 @@ public class GRMRestClient extends RestClient { } @Override - protected void initializeHeaderMap(Map headerMap) { + protected void initializeHeaderMap(MultivaluedMap> headerMap) { String auth = properties.getAuth(); String key = properties.getKey(); diff --git a/common/src/main/java/org/onap/so/client/policy/PolicyRestClient.java b/common/src/main/java/org/onap/so/client/policy/PolicyRestClient.java index 33ece07e3d..f657c17c68 100644 --- a/common/src/main/java/org/onap/so/client/policy/PolicyRestClient.java +++ b/common/src/main/java/org/onap/so/client/policy/PolicyRestClient.java @@ -21,12 +21,13 @@ package org.onap.so.client.policy; -import java.util.Map; import java.util.Optional; +import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.UriBuilder; +import org.javatuples.Pair; +import org.onap.logging.filter.base.ONAPComponents; import org.onap.so.client.RestClient; import org.onap.so.client.policy.entities.PolicyServiceType; -import org.onap.logging.filter.base.ONAPComponents; public class PolicyRestClient extends RestClient { @@ -43,10 +44,10 @@ public class PolicyRestClient extends RestClient { } @Override - protected void initializeHeaderMap(Map headerMap) { - headerMap.put("ClientAuth", properties.getClientAuth()); - headerMap.put("Authorization", properties.getAuth()); - headerMap.put("Environment", properties.getEnvironment()); + protected void initializeHeaderMap(MultivaluedMap> headerMap) { + headerMap.add("ALL", Pair.with("ClientAuth", properties.getClientAuth())); + headerMap.add("ALL", Pair.with("Authorization", properties.getAuth())); + headerMap.add("ALL", Pair.with("Environment", properties.getEnvironment())); } } diff --git a/common/src/test/java/org/onap/so/client/RestClientTest.java b/common/src/test/java/org/onap/so/client/RestClientTest.java index 57abf8784f..3bf4ccf127 100644 --- a/common/src/test/java/org/onap/so/client/RestClientTest.java +++ b/common/src/test/java/org/onap/so/client/RestClientTest.java @@ -33,13 +33,14 @@ import java.net.SocketTimeoutException; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; -import java.util.Map; import java.util.Optional; import javax.ws.rs.NotFoundException; import javax.ws.rs.ProcessingException; import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.UriBuilder; import javax.ws.rs.core.UriBuilderException; +import org.javatuples.Pair; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; @@ -126,7 +127,7 @@ public class RestClientTest { RestClient client = new RestClient(props, Optional.of(new URI("/chunked/delayed"))) { @Override - protected void initializeHeaderMap(Map headerMap) { + protected void initializeHeaderMap(MultivaluedMap> headerMap) { // TODO Auto-generated method stub } diff --git a/common/src/test/java/org/onap/so/client/adapter/rest/AdapterRestClientTest.java b/common/src/test/java/org/onap/so/client/adapter/rest/AdapterRestClientTest.java index 5075da3b7a..964707ab8f 100644 --- a/common/src/test/java/org/onap/so/client/adapter/rest/AdapterRestClientTest.java +++ b/common/src/test/java/org/onap/so/client/adapter/rest/AdapterRestClientTest.java @@ -21,32 +21,33 @@ package org.onap.so.client.adapter.rest; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.entry; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.net.URI; import java.net.URISyntaxException; import java.security.GeneralSecurityException; -import java.util.HashMap; -import java.util.Map; +import javax.ws.rs.core.MultivaluedHashMap; +import javax.ws.rs.core.MultivaluedMap; import org.apache.commons.codec.binary.Base64; +import org.javatuples.Pair; import org.junit.Before; import org.junit.Test; +import org.onap.logging.filter.base.ONAPComponents; import org.onap.so.client.policy.JettisonStyleMapperProvider; import org.onap.so.utils.CryptoUtils; -import org.onap.logging.filter.base.ONAPComponents; public class AdapterRestClientTest { private static final String CRYPTO_KEY = "546573746F736973546573746F736973"; private static final String INVALID_CRYPTO_KEY = "1234"; - private Map headerMap; + private MultivaluedMap> headerMap; private AdapterRestProperties adapterRestPropertiesMock; @Before public void setup() { - headerMap = new HashMap<>(); + headerMap = new MultivaluedHashMap<>(); + adapterRestPropertiesMock = mock(AdapterRestProperties.class); } @@ -60,7 +61,8 @@ public class AdapterRestClientTest { // when testedObject.initializeHeaderMap(headerMap); // then - assertThat(headerMap).containsOnly(entry("Authorization", getExpectedEncodedString(encyptedMessage))); + assertThat(headerMap.get("ALL")) + .containsOnly(Pair.with("Authorization", getExpectedEncodedString(encyptedMessage))); } @Test @@ -70,7 +72,7 @@ public class AdapterRestClientTest { // when testedObject.initializeHeaderMap(headerMap); // then - assertThat(headerMap).containsOnly(entry("Authorization", null)); + assertThat(headerMap.get("ALL")).containsOnly(Pair.with("Authorization", null)); } @Test @@ -84,7 +86,7 @@ public class AdapterRestClientTest { // when testedObject.initializeHeaderMap(headerMap); // then - assertThat(headerMap).containsOnly(entry("Authorization", null)); + assertThat(headerMap.get("ALL")).containsOnly(Pair.with("Authorization", null)); } @Test diff --git a/common/src/test/java/org/onap/so/client/dmaap/rest/DMaaPRestClientTest.java b/common/src/test/java/org/onap/so/client/dmaap/rest/DMaaPRestClientTest.java index ca5b5da2da..4f00b9db96 100644 --- a/common/src/test/java/org/onap/so/client/dmaap/rest/DMaaPRestClientTest.java +++ b/common/src/test/java/org/onap/so/client/dmaap/rest/DMaaPRestClientTest.java @@ -24,8 +24,9 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import java.net.MalformedURLException; import java.net.URL; -import java.util.HashMap; -import java.util.Map; +import javax.ws.rs.core.MultivaluedHashMap; +import javax.ws.rs.core.MultivaluedMap; +import org.javatuples.Pair; import org.junit.Test; import org.onap.logging.ref.slf4j.ONAPLogConstants; import org.slf4j.MDC; @@ -48,11 +49,12 @@ public class DMaaPRestClientTest { throw new RuntimeException(e); } DMaaPRestClient client = new DMaaPRestClient(url, contentType, auth, key); - Map map = new HashMap<>(); + MultivaluedMap> map = new MultivaluedHashMap<>(); client.initializeHeaderMap(map); - map.put(ONAPLogConstants.MDCs.REQUEST_ID, "1234"); + map.add("ALL", Pair.with(ONAPLogConstants.MDCs.REQUEST_ID, "1234")); assertNotNull(map); - assertEquals("Found expected RequesttId", "1234", map.get(ONAPLogConstants.MDCs.REQUEST_ID)); + assertEquals("Found expected RequestId", true, + map.get("ALL").contains(Pair.with(ONAPLogConstants.MDCs.REQUEST_ID, "1234"))); } @@ -67,11 +69,12 @@ public class DMaaPRestClientTest { } MDC.put(ONAPLogConstants.MDCs.REQUEST_ID, "1234"); DMaaPRestClient client = new DMaaPRestClient(url, contentType, auth, key); - Map map = new HashMap<>(); + MultivaluedMap> map = new MultivaluedHashMap<>(); client.initializeHeaderMap(map); assertNotNull(map); - assertEquals("Found expected RequestId", "1234", map.get(ONAPLogConstants.Headers.INVOCATION_ID)); + assertEquals("Found expected RequestId", true, + map.get("ALL").contains(Pair.with(ONAPLogConstants.Headers.INVOCATION_ID, "1234"))); } @@ -87,11 +90,12 @@ public class DMaaPRestClientTest { MDC.put(ONAPLogConstants.MDCs.REQUEST_ID, null); DMaaPRestClient client = new DMaaPRestClient(url, contentType, auth, key); - Map map = new HashMap<>(); + MultivaluedMap> map = new MultivaluedHashMap<>(); client.initializeHeaderMap(map); assertNotNull(map); - assertEquals("header not found as expected", null, map.get(ONAPLogConstants.Headers.INVOCATION_ID)); + assertEquals("header not found as expected", false, + map.get("ALL").contains(Pair.with(ONAPLogConstants.Headers.INVOCATION_ID, "1234"))); } } diff --git a/common/src/test/java/org/onap/so/client/policy/PolicyClientImplTest.java b/common/src/test/java/org/onap/so/client/policy/PolicyClientImplTest.java index 3323fd8409..f9547cb3db 100644 --- a/common/src/test/java/org/onap/so/client/policy/PolicyClientImplTest.java +++ b/common/src/test/java/org/onap/so/client/policy/PolicyClientImplTest.java @@ -23,21 +23,22 @@ package org.onap.so.client.policy; import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs; -import static org.junit.Assert.assertEquals; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.isA; import static org.mockito.Mockito.doReturn; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import static org.assertj.core.api.Assertions.assertThat; import java.io.File; import java.io.IOException; import java.util.Arrays; -import java.util.HashMap; import java.util.List; -import java.util.Map; +import javax.ws.rs.core.MultivaluedHashMap; +import javax.ws.rs.core.MultivaluedMap; +import org.javatuples.Pair; import org.junit.BeforeClass; import org.junit.Test; import org.mockito.ArgumentCaptor; @@ -56,10 +57,10 @@ import org.onap.so.client.policy.entities.PolicyConfig; import org.onap.so.client.policy.entities.PolicyDecision; import org.onap.so.client.policy.entities.PolicyDecisionRequest; import org.onap.so.client.policy.entities.PolicyServiceType; +import org.onap.so.client.policy.entities.Workstep; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; -import org.onap.so.client.policy.entities.Workstep; public class PolicyClientImplTest { @@ -79,11 +80,13 @@ public class PolicyClientImplTest { @Test public void successReadProperties() { PolicyRestClient client = new PolicyRestClient(new PolicyRestPropertiesImpl(), PolicyServiceType.GET_DECISION); - Map map = new HashMap<>(); + MultivaluedMap> map = new MultivaluedHashMap<>(); client.initializeHeaderMap(map); - assertEquals("Found expected Client Auth", "Basic bTAzNzQzOnBvbGljeVIwY2sk", map.get("ClientAuth")); - assertEquals("Found expected Authorization", "Basic dGVzdHBkcDphbHBoYTEyMw==", map.get("Authorization")); - assertEquals("Found expected Environment", "TEST", map.get("Environment")); + assertTrue("Found expected Client Auth", + map.get("ALL").contains(Pair.with("ClientAuth", "Basic bTAzNzQzOnBvbGljeVIwY2sk"))); + assertTrue("Found expected Authorization", + map.get("ALL").contains(Pair.with("Authorization", "Basic dGVzdHBkcDphbHBoYTEyMw=="))); + assertTrue("Found expected Environment", map.get("ALL").contains(Pair.with("Environment", "TEST"))); } @Test diff --git a/graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/aai/AAIClient.java b/graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/aai/AAIClient.java index 1f747e6c8c..fc5ef86e56 100644 --- a/graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/aai/AAIClient.java +++ b/graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/aai/AAIClient.java @@ -21,10 +21,11 @@ package org.onap.aaiclient.client.aai; import java.net.URI; -import java.util.HashMap; -import java.util.Map; import javax.ws.rs.NotFoundException; +import javax.ws.rs.core.MultivaluedHashMap; +import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.UriBuilder; +import org.javatuples.Pair; import org.onap.aaiclient.client.graphinventory.GraphInventoryClient; import org.onap.aaiclient.client.graphinventory.exceptions.GraphInventoryUriComputationException; import org.onap.so.client.RestClient; @@ -38,19 +39,19 @@ public class AAIClient extends GraphInventoryClient { protected AAIVersion version; protected AAIClient() { - super(AAIProperties.class, new HashMap()); + super(AAIProperties.class, new MultivaluedHashMap<>()); } protected AAIClient(AAIVersion version) { - super(AAIProperties.class, new HashMap()); + super(AAIProperties.class, new MultivaluedHashMap<>()); this.version = version; } - protected AAIClient(Map additionalHeaders) { + protected AAIClient(MultivaluedMap> additionalHeaders) { super(AAIProperties.class, additionalHeaders); } - protected AAIClient(AAIVersion version, Map additionalHeaders) { + protected AAIClient(AAIVersion version, MultivaluedMap> additionalHeaders) { super(AAIProperties.class, additionalHeaders); this.version = version; } diff --git a/graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/aai/AAIDSLQueryClient.java b/graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/aai/AAIDSLQueryClient.java index 8b8707e533..d894a0fa0d 100644 --- a/graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/aai/AAIDSLQueryClient.java +++ b/graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/aai/AAIDSLQueryClient.java @@ -20,6 +20,8 @@ package org.onap.aaiclient.client.aai; +import javax.ws.rs.core.MultivaluedHashMap; +import org.javatuples.Pair; import org.onap.aaiclient.client.aai.entities.AAIResultWrapper; import org.onap.aaiclient.client.aai.entities.uri.AAIFluentTypeReverseLookup; import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory; @@ -33,11 +35,14 @@ public class AAIDSLQueryClient extends GraphInventoryQueryClient { public AAIDSLQueryClient() { - super(new AAIClient(ImmutableMap.of("X-DslApiVersion", "V2"))); + super(new AAIClient(new MultivaluedHashMap>( + ImmutableMap.of("ALL", Pair.with("X-DslApiVersion", "V2"))))); + } public AAIDSLQueryClient(AAIVersion version) { - super(new AAIClient(version, ImmutableMap.of("X-DslApiVersion", "V2"))); + super(new AAIClient(version, new MultivaluedHashMap>( + ImmutableMap.of("ALL", Pair.with("X-DslApiVersion", "V2"))))); } @Override diff --git a/graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/aai/AAIRestClient.java b/graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/aai/AAIRestClient.java index 0f69b0cc8f..df124efe9a 100644 --- a/graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/aai/AAIRestClient.java +++ b/graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/aai/AAIRestClient.java @@ -21,8 +21,9 @@ package org.onap.aaiclient.client.aai; import java.net.URI; -import java.util.Map; import java.util.Optional; +import javax.ws.rs.core.MultivaluedMap; +import org.javatuples.Pair; import org.onap.aaiclient.client.graphinventory.GraphInventoryPatchConverter; import org.onap.aaiclient.client.graphinventory.GraphInventoryRestClient; import org.onap.logging.filter.base.ONAPComponents; @@ -31,9 +32,10 @@ import org.onap.so.client.ResponseExceptionMapper; public class AAIRestClient extends GraphInventoryRestClient { private final AAIProperties aaiProperties; - private final Map additionalHeaders; + private final MultivaluedMap> additionalHeaders; - protected AAIRestClient(AAIProperties props, URI uri, Map additionalHeaders) { + protected AAIRestClient(AAIProperties props, URI uri, + MultivaluedMap> additionalHeaders) { super(props, uri); this.aaiProperties = props; this.additionalHeaders = additionalHeaders; @@ -45,16 +47,24 @@ public class AAIRestClient extends GraphInventoryRestClient { } @Override - protected void initializeHeaderMap(Map headerMap) { - headerMap.put("X-FromAppId", aaiProperties.getSystemName()); - headerMap.put("X-TransactionId", requestId); - headerMap.putAll(additionalHeaders); + protected void initializeHeaderMap(MultivaluedMap> headerMap) { + headerMap.add("ALL", Pair.with("X-FromAppId", aaiProperties.getSystemName())); + headerMap.add("ALL", Pair.with("X-TransactionId", requestId)); + additionalHeaders.forEach((k, v) -> { + headerMap.addAll(k, v); + }); String auth = aaiProperties.getAuth(); String key = aaiProperties.getKey(); if (auth != null && !auth.isEmpty() && key != null && !key.isEmpty()) { addBasicAuthHeader(auth, key); } + + if (!aaiProperties.additionalHeaders().isEmpty()) { + aaiProperties.additionalHeaders().forEach((k, v) -> { + headerMap.addAll(k, v); + }); + } } @Override diff --git a/graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/graphinventory/GraphInventoryClient.java b/graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/graphinventory/GraphInventoryClient.java index f8f977d117..af875fa274 100644 --- a/graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/graphinventory/GraphInventoryClient.java +++ b/graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/graphinventory/GraphInventoryClient.java @@ -21,22 +21,22 @@ package org.onap.aaiclient.client.graphinventory; import java.net.URI; -import java.util.Map; +import javax.ws.rs.core.MultivaluedHashMap; +import javax.ws.rs.core.MultivaluedMap; +import org.javatuples.Pair; import org.onap.aaiclient.client.graphinventory.entities.uri.GraphInventoryUri; import org.onap.aaiclient.client.graphinventory.entities.uri.HttpAwareUri; import org.onap.so.client.RestClient; import org.onap.so.client.RestProperties; import org.onap.so.client.RestPropertiesLoader; -import com.google.common.collect.ImmutableMap; public abstract class GraphInventoryClient { private RestProperties props; - protected final Map additionalHeaders; + protected final MultivaluedMap> additionalHeaders; protected GraphInventoryClient(Class propertiesClass, - Map additionalHeaders) { - + MultivaluedMap> additionalHeaders) { RestProperties props = RestPropertiesLoader.getInstance().getNewImpl(propertiesClass); this.props = props; this.additionalHeaders = additionalHeaders; @@ -70,7 +70,7 @@ public abstract class GraphInventoryClient { public abstract String getGraphDBName(); - public Map getAdditionalHeaders() { - return ImmutableMap.copyOf(this.additionalHeaders); + public MultivaluedMap> getAdditionalHeaders() { + return new MultivaluedHashMap<>(this.additionalHeaders); } } diff --git a/graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/graphinventory/GraphInventoryRestClient.java b/graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/graphinventory/GraphInventoryRestClient.java index c22f2f5f8e..6ccd1a2cab 100644 --- a/graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/graphinventory/GraphInventoryRestClient.java +++ b/graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/graphinventory/GraphInventoryRestClient.java @@ -21,10 +21,11 @@ package org.onap.aaiclient.client.graphinventory; import java.net.URI; -import java.util.Map; import java.util.Optional; import javax.ws.rs.client.ClientBuilder; +import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.Response; +import org.javatuples.Pair; import org.onap.aaiclient.client.CacheControlFeature; import org.onap.aaiclient.client.FlushCache; import org.onap.logging.filter.base.ONAPComponentsList; @@ -65,7 +66,7 @@ public abstract class GraphInventoryRestClient extends RestClientSSL { public abstract ONAPComponentsList getTargetEntity(); @Override - protected abstract void initializeHeaderMap(Map headerMap); + protected abstract void initializeHeaderMap(MultivaluedMap> headerMap); @Override protected abstract Optional addResponseExceptionMapper(); diff --git a/graph-inventory/aai-client/src/test/java/org/onap/aaiclient/client/aai/AAIDSLQueryClientTest.java b/graph-inventory/aai-client/src/test/java/org/onap/aaiclient/client/aai/AAIDSLQueryClientTest.java index 36fc1db57c..68858de9a4 100644 --- a/graph-inventory/aai-client/src/test/java/org/onap/aaiclient/client/aai/AAIDSLQueryClientTest.java +++ b/graph-inventory/aai-client/src/test/java/org/onap/aaiclient/client/aai/AAIDSLQueryClientTest.java @@ -1,7 +1,8 @@ package org.onap.aaiclient.client.aai; -import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import java.net.URISyntaxException; +import org.javatuples.Pair; import org.junit.Test; public class AAIDSLQueryClientTest { @@ -12,6 +13,6 @@ public class AAIDSLQueryClientTest { public void verifyHeadersTest() throws URISyntaxException { AAIDSLQueryClient client = new AAIDSLQueryClient(); - assertEquals("V2", client.getClient().getAdditionalHeaders().get("X-DslApiVersion")); + assertTrue(client.getClient().getAdditionalHeaders().get("ALL").contains(Pair.with("X-DslApiVersion", "V2"))); } } diff --git a/graph-inventory/aai-client/src/test/java/org/onap/aaiclient/client/aai/AAIRestClientTest.java b/graph-inventory/aai-client/src/test/java/org/onap/aaiclient/client/aai/AAIRestClientTest.java index d0f7847726..9b34095a23 100644 --- a/graph-inventory/aai-client/src/test/java/org/onap/aaiclient/client/aai/AAIRestClientTest.java +++ b/graph-inventory/aai-client/src/test/java/org/onap/aaiclient/client/aai/AAIRestClientTest.java @@ -43,8 +43,9 @@ import java.net.MalformedURLException; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; -import java.util.HashMap; +import javax.ws.rs.core.MultivaluedHashMap; import javax.ws.rs.core.Response; +import org.javatuples.Pair; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; @@ -75,7 +76,7 @@ public class AAIRestClientTest { @Test public void failPatchOnComplexObject() throws URISyntaxException { - AAIRestClient client = new AAIRestClient(props, new URI(""), new HashMap()); + AAIRestClient client = new AAIRestClient(props, new URI(""), new MultivaluedHashMap<>()); this.thrown.expect(GraphInventoryPatchDepthExceededException.class); this.thrown.expectMessage(containsString("Object exceeds allowed depth for update action")); client.patch( @@ -84,7 +85,7 @@ public class AAIRestClientTest { @Test public void verifyPatchValidation() throws URISyntaxException { - AAIRestClient client = new AAIRestClient(props, new URI(""), new HashMap()); + AAIRestClient client = new AAIRestClient(props, new URI(""), new MultivaluedHashMap<>()); AAIRestClient spy = spy(client); GraphInventoryPatchConverter patchValidatorMock = mock(GraphInventoryPatchConverter.class); doReturn(patchValidatorMock).when(spy).getPatchConverter(); @@ -97,11 +98,13 @@ public class AAIRestClientTest { @Test public void verifyAdditionalHeadersTest() throws URISyntaxException { AAIRestClient client = new AAIRestClient(new DefaultAAIPropertiesImpl(wireMockRule.port()), new URI("/test"), - ImmutableMap.of("test", "value")); + new MultivaluedHashMap>( + ImmutableMap.of("ALL", Pair.with("test", "value"), "GET", Pair.with("get test", "value")))); wireMockRule.stubFor(get(urlPathEqualTo("/test")).willReturn(aResponse().withStatus(200))); client.get(); wireMockRule.verify(getRequestedFor(urlPathEqualTo("/test")).withHeader("X-FromAppId", equalTo("MSO")) - .withHeader("X-TransactionId", matching(".*")).withHeader("test", equalTo("value"))); + .withHeader("X-TransactionId", matching(".*")).withHeader("test", equalTo("value")) + .withHeader("get test", equalTo("value"))); } @@ -145,7 +148,7 @@ public class AAIRestClientTest { } }; - RestClient client = new AAIRestClient(props, new URI("/cached"), new HashMap()); + RestClient client = new AAIRestClient(props, new URI("/cached"), new MultivaluedHashMap<>()); Response response = client.get(); @@ -199,7 +202,7 @@ public class AAIRestClientTest { }; - RestClient client = new AAIRestClient(props, new URI("/cached/1"), new HashMap()); + RestClient client = new AAIRestClient(props, new URI("/cached/1"), new MultivaluedHashMap<>()); Response response = client.get(); diff --git a/mso-api-handlers/mso-api-handler-infra/pom.xml b/mso-api-handlers/mso-api-handler-infra/pom.xml index 678de23db5..b902564900 100644 --- a/mso-api-handlers/mso-api-handler-infra/pom.xml +++ b/mso-api-handlers/mso-api-handler-infra/pom.xml @@ -254,19 +254,19 @@ - org.onap.aaf.authz - aaf-auth-client - runtime + org.onap.aaf.authz + aaf-auth-client + runtime - org.onap.aaf.authz - aaf-misc-env - runtime + org.onap.aaf.authz + aaf-misc-env + runtime - org.onap.aaf.authz - aaf-misc-rosetta - runtime + org.onap.aaf.authz + aaf-misc-rosetta + runtime javax.xml.bind diff --git a/pom.xml b/pom.xml index 797390aa6c..2cd4de3856 100644 --- a/pom.xml +++ b/pom.xml @@ -1044,40 +1044,40 @@ org.onap.aaf.authz aaf-cadi-client ${aaf.version} - - - org.onap.aaf.authz - aaf-cadi-aaf - ${aaf.version} - - - javax.servlet - servlet-api - - - log4j - log4j - - - - - org.onap.aaf.authz - aaf-auth-client - ${aaf.version} - runtime - - - org.onap.aaf.authz - aaf-misc-env - ${aaf.version} - runtime - - - org.onap.aaf.authz - aaf-misc-rosetta - ${aaf.version} - runtime - + + + org.onap.aaf.authz + aaf-cadi-aaf + ${aaf.version} + + + javax.servlet + servlet-api + + + log4j + log4j + + + + + org.onap.aaf.authz + aaf-auth-client + ${aaf.version} + runtime + + + org.onap.aaf.authz + aaf-misc-env + ${aaf.version} + runtime + + + org.onap.aaf.authz + aaf-misc-rosetta + ${aaf.version} + runtime + -- cgit 1.2.3-korg