From 80a8297a4b84eb33a0f77e9a56283e3c8fb5f929 Mon Sep 17 00:00:00 2001 From: Michal Banka Date: Mon, 14 Sep 2020 23:04:37 +0200 Subject: Fix bug throwing exception when first event is collected - Problem: When running app from jar (e.g. in docker env) ClassLoader badly interprete classpath as root of app jar, while resources are located in jar under BOOT-INF/classes/ in Spring Boot apps. - Solution: Moved file from resources to etc directory so ClassLoader isn't needed. Filepath of api_version_description.json which previously was badly resolved now is configured in collector.properties. Change-Id: I690394cc59e16c95f5902045efc3fdaf13bf9112 Signed-off-by: Michal Banka Issue-ID: DCAEGEN2-2426 --- .../java/org/onap/dcae/ApplicationSettings.java | 4 +++ .../java/org/onap/dcae/common/HeaderUtils.java | 40 +++++++++------------- .../org/onap/dcae/restapi/VesRestController.java | 2 +- src/main/resources/api_version_config.json | 7 ---- .../java/org/onap/dcae/common/JsonDataLoader.java | 10 +++--- .../onap/dcae/restapi/VesRestControllerTest.java | 4 +-- 6 files changed, 29 insertions(+), 38 deletions(-) delete mode 100644 src/main/resources/api_version_config.json (limited to 'src') diff --git a/src/main/java/org/onap/dcae/ApplicationSettings.java b/src/main/java/org/onap/dcae/ApplicationSettings.java index 7d5c7db2..9462a380 100644 --- a/src/main/java/org/onap/dcae/ApplicationSettings.java +++ b/src/main/java/org/onap/dcae/ApplicationSettings.java @@ -196,6 +196,10 @@ public class ApplicationSettings { return eventTransformations; } + public String getApiVersionDescriptionFilepath() { + return properties.getString("collector.description.api.version.location", "etc/api_version_description.json"); + } + private void loadPropertiesFromFile() { try { properties.load(configurationFileLocation); diff --git a/src/main/java/org/onap/dcae/common/HeaderUtils.java b/src/main/java/org/onap/dcae/common/HeaderUtils.java index c046fb4c..81277d07 100644 --- a/src/main/java/org/onap/dcae/common/HeaderUtils.java +++ b/src/main/java/org/onap/dcae/common/HeaderUtils.java @@ -3,7 +3,7 @@ * PROJECT * ================================================================================ * Copyright (C) 2019 VMware, Inc. All rights reserved. - * Copyright (C) 2019 Nokia. All rights reserved.s + * Copyright (C) 2019-2020 Nokia. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,39 +23,33 @@ package org.onap.dcae.common; import java.util.Collections; import java.util.Map; -import java.util.Objects; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import org.springframework.http.HttpHeaders; import org.springframework.stereotype.Component; /** - * @author nil + * A class with methods used in HTTP header management. */ @Component public class HeaderUtils { - public String getApiVerFilePath(String fileName) { - return Objects.requireNonNull(ClassLoader.getSystemClassLoader().getResource(fileName)) - .getPath(); - } + public String getRestApiIdentify(String uri) { + return isBatchRequest(uri) ? "eventListener_eventBatch" : "eventListener"; + } - public String getRestApiIdentify(String uri) { - return isBatchRequest(uri) ? "eventListener_eventBatch" : "eventListener"; - } + public Map extractHeaders(HttpServletRequest request) { + return Collections.list(request.getHeaderNames()).stream() + .collect(Collectors.toMap(h -> h, request::getHeader)); + } - public Map extractHeaders(HttpServletRequest request) { - return Collections.list(request.getHeaderNames()).stream() - .collect(Collectors.toMap(h -> h, request::getHeader)); - } + public HttpHeaders fillHeaders(Map headers) { + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.setAll(headers); + return httpHeaders; + } - public HttpHeaders fillHeaders(Map headers) { - HttpHeaders httpHeaders = new HttpHeaders(); - httpHeaders.setAll(headers); - return httpHeaders; - } - - private boolean isBatchRequest(String request) { - return request.contains("eventBatch"); - } + private boolean isBatchRequest(String request) { + return request.contains("eventBatch"); + } } diff --git a/src/main/java/org/onap/dcae/restapi/VesRestController.java b/src/main/java/org/onap/dcae/restapi/VesRestController.java index de0392e6..0a5930f6 100644 --- a/src/main/java/org/onap/dcae/restapi/VesRestController.java +++ b/src/main/java/org/onap/dcae/restapi/VesRestController.java @@ -137,7 +137,7 @@ public class VesRestController { private CustomHeaderUtils createHeaderUtils(String version, HttpServletRequest request) { return new CustomHeaderUtils(version.toLowerCase().replace("v", ""), headerUtils.extractHeaders(request), - headerUtils.getApiVerFilePath("api_version_config.json"), + settings.getApiVersionDescriptionFilepath(), headerUtils.getRestApiIdentify(request.getRequestURI())); } diff --git a/src/main/resources/api_version_config.json b/src/main/resources/api_version_config.json deleted file mode 100644 index 23f585f9..00000000 --- a/src/main/resources/api_version_config.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "apiVersion": - { - "eventListener": ["4.7.2","5.4.1","7.0.1"], - "eventListener_eventBatch": ["4.7.2","5.4.1","7.0.1"] - } -} diff --git a/src/test/java/org/onap/dcae/common/JsonDataLoader.java b/src/test/java/org/onap/dcae/common/JsonDataLoader.java index 2ea59aa0..8c2fdd6d 100644 --- a/src/test/java/org/onap/dcae/common/JsonDataLoader.java +++ b/src/test/java/org/onap/dcae/common/JsonDataLoader.java @@ -20,7 +20,9 @@ package org.onap.dcae.common; import java.io.IOException; +import java.net.URL; import java.nio.file.Files; +import java.nio.file.Path; import java.nio.file.Paths; /** @@ -35,15 +37,15 @@ public final class JsonDataLoader { } /** - * This method is validating given event using schema adn throws exception if event is not valid + * This method is validating given event using schema and throws exception when event is invalid * * @param path to file that will be loaded * @return contend of the file located under path, given in parameters, as string * @throws IOException when file under given path was not found */ public static String loadContent(String path) throws IOException { - return new String( - Files.readAllBytes(Paths.get(JsonDataLoader.class.getResource(path).getPath())) - ); + URL resource = JsonDataLoader.class.getResource(path); + Path resourcePath = Paths.get(resource.getPath()); + return new String(Files.readAllBytes(resourcePath)); } } diff --git a/src/test/java/org/onap/dcae/restapi/VesRestControllerTest.java b/src/test/java/org/onap/dcae/restapi/VesRestControllerTest.java index 0a03c1a4..ce7e09d3 100644 --- a/src/test/java/org/onap/dcae/restapi/VesRestControllerTest.java +++ b/src/test/java/org/onap/dcae/restapi/VesRestControllerTest.java @@ -315,9 +315,7 @@ public class VesRestControllerTest { private void configureHeadersForEventListener() { when(headerUtils.getRestApiIdentify(anyString())).thenReturn("eventListener"); - when(headerUtils.getApiVerFilePath(anyString())).thenReturn( - this.getClass().getResource("/api_version_config.json").getPath() - ); + when(applicationSettings.getApiVersionDescriptionFilepath()).thenReturn("etc/api_version_description.json"); } private void verifyThatTransformedEventWasSend(DMaaPEventPublisher eventPublisher, String eventBeforeTransformation) { -- cgit 1.2.3-korg