Merge "Async MSO error format: handle more cases"
[vid.git] / vid-app-common / src / main / java / org / onap / vid / mso / MsoUtil.java
index 626816f..8de534a 100644 (file)
 
 package org.onap.vid.mso;
 
+import static org.apache.commons.lang3.StringUtils.firstNonBlank;
+import static org.apache.commons.lang3.StringUtils.isEmpty;
 import static org.onap.vid.utils.KotlinUtilsKt.JACKSON_OBJECT_MAPPER;
 
-import com.fasterxml.jackson.core.JsonParseException;
 import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonNode;
 import io.joshworks.restclient.http.HttpResponse;
 import java.io.IOException;
-import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.exception.ExceptionUtils;
-import org.onap.vid.exceptions.GenericUncheckedException;
 
 public class MsoUtil {
 
@@ -76,22 +76,31 @@ public class MsoUtil {
     }
 
     public static String formatExceptionAdditionalInfo(int statusCode, String msoResponse) {
-        String errorMsg = "Http Code:" + statusCode;
-        if (!StringUtils.isEmpty(msoResponse)) {
-            String filteredJson;
-            try {
-                filteredJson = StringUtils.defaultIfEmpty(
-                        JACKSON_OBJECT_MAPPER.readTree(msoResponse).path("serviceException").toString().replaceAll("[\\{\\}]","") ,
-                        msoResponse
-                );
-            } catch (JsonParseException e) {
-                filteredJson = msoResponse;
-            } catch (IOException e) {
-                throw new GenericUncheckedException(e);
-            }
+        final String errorMsg = "Http Code:" + statusCode;
+
+        if (isEmpty(msoResponse)) {
+            return errorMsg;
+        }
+
+        try {
+            JsonNode jsonNode = JACKSON_OBJECT_MAPPER.readTree(msoResponse);
 
-            errorMsg = errorMsg + ", " + filteredJson;
+            return errorMsg + ", " + firstNonBlank(
+                removeBraces(jsonNode.get("serviceException")),
+                removeBraces(jsonNode.path("requestError").get("serviceException")),
+                msoResponse
+            );
+
+        } catch (Exception e) {
+            return errorMsg + ", " + msoResponse;
         }
-        return errorMsg;
+    }
+
+    private static String removeBraces(JsonNode jsonNode) {
+        if (jsonNode == null || jsonNode.isMissingNode()) {
+            return null;
+        }
+
+        return jsonNode.toString().replaceAll("[\\{\\}]", "");
     }
 }