Skip putting non-primitive values from CBS config into PRH app environment 83/90283/1
authorgrabinsk <maciej.grabinski@nokia.com>
Fri, 21 Jun 2019 07:10:03 +0000 (09:10 +0200)
committergrabinsk <maciej.grabinski@nokia.com>
Fri, 21 Jun 2019 07:10:03 +0000 (09:10 +0200)
Non-primitive properties are currently not used by app and cause serialization failure on 'actuator/env' endpoint.
The serialization issue is caused by fact, that swagger enforces switch to jackson and there are no proper gson's JsonObject serializers registered.

Change-Id: Id5cfb743282aeec7db88434f06815ae5cc9057a6
Issue-ID: DCAEGEN2-1544
Signed-off-by: grabinsk <maciej.grabinski@nokia.com>
prh-app-server/src/main/java/org/onap/dcaegen2/services/bootstrap/CbsJsonToPropertyMapConverter.java
prh-app-server/src/test/java/org/onap/dcaegen2/services/bootstrap/CbsJsonToPropertyMapConverterTest.java

index bf4077b..79bf465 100644 (file)
 
 package org.onap.dcaegen2.services.bootstrap;
 
-import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;
 import com.google.gson.JsonPrimitive;
 
 import java.util.Map;
-import java.util.stream.Collectors;
+
+import static java.util.stream.Collectors.toMap;
 
 class CbsJsonToPropertyMapConverter {
 
@@ -34,8 +34,9 @@ class CbsJsonToPropertyMapConverter {
     Map<String, Object> convertToMap(JsonObject jsonObject) {
         verifyExpectedCbsJsonFormat(jsonObject);
         JsonObject config = jsonObject.getAsJsonObject(CBS_CONFIG_ROOT_PROPERTY);
-        return config.entrySet().stream().collect(
-                Collectors.toMap(Map.Entry::getKey, entry -> unpack(entry.getValue())));
+        return config.entrySet().stream()
+                .filter(entry -> entry.getValue().isJsonPrimitive())
+                .collect(toMap(Map.Entry::getKey, entry -> unpack(entry.getValue().getAsJsonPrimitive())));
     }
 
     private static void verifyExpectedCbsJsonFormat(JsonObject jsonObject) {
@@ -45,20 +46,17 @@ class CbsJsonToPropertyMapConverter {
         }
     }
 
-    private Object unpack(JsonElement value) {
-        if (value.isJsonPrimitive()) {
-            JsonPrimitive primitiveValue = value.getAsJsonPrimitive();
-            if (primitiveValue.isString()) {
-                return primitiveValue.getAsString();
-            }
-            if (primitiveValue.isBoolean()) {
-                return primitiveValue.getAsBoolean();
-            }
-            if (primitiveValue.isNumber()) {
-                return primitiveValue.getAsLong();
-            }
+    private Object unpack(JsonPrimitive value) {
+        if (value.isString()) {
+            return value.getAsString();
+        }
+        if (value.isBoolean()) {
+            return value.getAsBoolean();
+        }
+        if (value.isNumber()) {
+            return value.getAsLong();
         }
-        return value;
+        throw new IllegalArgumentException("Unexpected JsonPrimitive type found in configuration form CBS: " + value);
     }
 
 }
index da9a000..55e1b01 100644 (file)
@@ -22,7 +22,6 @@ package org.onap.dcaegen2.services.bootstrap;
 
 import com.google.gson.JsonObject;
 import com.google.gson.JsonParser;
-import org.assertj.core.api.Condition;
 import org.junit.jupiter.api.Test;
 
 import java.util.Map;
@@ -38,6 +37,7 @@ class CbsJsonToPropertyMapConverterTest {
             "    \"someStringProp\": \"foo\",\n" +
             "    \"someNumericalProp\": 123,\n" +
             "    \"someBooleanProp\": true,\n" +
+            "    \"someArrayProp\": [],\n" +
             "    \"someObjectProp\": {\n" +
             "      \"bar\": \"baz\"\n" +
             "    }\n" +
@@ -58,10 +58,11 @@ class CbsJsonToPropertyMapConverterTest {
     }
 
     @Test
-    void shouldLeaveComplexPropertiesAsJsonTypes() {
+    void shouldSkipComplexProperties() {
         Map<String, Object> map = cbsJsonToPropertyMapConverter.convertToMap(SOME_JSON_FROM_CBS);
 
-        assertThat(map).hasEntrySatisfying("someObjectProp", hasClass(JsonObject.class));
+        assertThat(map).doesNotContainKeys("someObjectProp");
+        assertThat(map).doesNotContainKeys("someArrayProp");
     }
 
     @Test
@@ -76,11 +77,4 @@ class CbsJsonToPropertyMapConverterTest {
         return new JsonParser().parse(jsonString).getAsJsonObject();
     }
 
-    private static Condition<Object> hasClass(Class clazz) {
-        return new Condition<Object>(clazz.getCanonicalName()){
-            public boolean matches(Object value) {
-                return value.getClass().equals(clazz);
-            }
-        };
-    }
 }
\ No newline at end of file