Improve error reporting for invalid cps path query 59/118959/1
authorniamhcore <niamh.core@est.tech>
Tue, 9 Mar 2021 14:23:52 +0000 (14:23 +0000)
committerniamhcore <niamh.core@est.tech>
Tue, 9 Mar 2021 14:23:52 +0000 (14:23 +0000)
Issue-ID: CPS-276
Signed-off-by: niamhcore <niamh.core@est.tech>
Change-Id: I0e0abbaff32c936c67fc1092dc8385a0bc5ae49e

cps-rest/src/main/java/org/onap/cps/rest/exceptions/CpsRestExceptionHandler.java
cps-rest/src/test/groovy/org/onap/cps/rest/exceptions/CpsRestExceptionHandlerSpec.groovy
cps-ri/src/main/java/org/onap/cps/spi/query/CpsPathQuery.java

index 2599dc4..6e85151 100644 (file)
@@ -23,9 +23,11 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.exception.ExceptionUtils;
 import org.onap.cps.rest.controller.AdminRestController;
 import org.onap.cps.rest.controller.DataRestController;
+import org.onap.cps.rest.controller.QueryRestController;
 import org.onap.cps.rest.model.ErrorMessage;
 import org.onap.cps.spi.exceptions.CpsAdminException;
 import org.onap.cps.spi.exceptions.CpsException;
+import org.onap.cps.spi.exceptions.CpsPathException;
 import org.onap.cps.spi.exceptions.DataInUseException;
 import org.onap.cps.spi.exceptions.DataNodeNotFoundException;
 import org.onap.cps.spi.exceptions.DataValidationException;
@@ -37,7 +39,8 @@ import org.springframework.web.bind.annotation.ExceptionHandler;
 import org.springframework.web.bind.annotation.RestControllerAdvice;
 
 @Slf4j
-@RestControllerAdvice(assignableTypes = {AdminRestController.class, DataRestController.class})
+@RestControllerAdvice(assignableTypes = {AdminRestController.class, DataRestController.class,
+    QueryRestController.class})
 public class CpsRestExceptionHandler {
 
     private CpsRestExceptionHandler() {
@@ -54,7 +57,8 @@ public class CpsRestExceptionHandler {
         return buildErrorResponse(HttpStatus.INTERNAL_SERVER_ERROR, exception);
     }
 
-    @ExceptionHandler({ModelValidationException.class, DataValidationException.class, CpsAdminException.class})
+    @ExceptionHandler({ModelValidationException.class, DataValidationException.class, CpsAdminException.class,
+        CpsPathException.class})
     public static ResponseEntity<Object> handleBadRequestExceptions(final CpsException exception) {
         return buildErrorResponse(HttpStatus.BAD_REQUEST, exception.getMessage(), extractDetails(exception));
     }
index 5ddc9d9..89b6b89 100644 (file)
@@ -30,6 +30,7 @@ import org.onap.cps.api.CpsQueryService
 import org.onap.cps.rest.controller.RestControllerSpecification
 import org.onap.cps.spi.exceptions.AnchorAlreadyDefinedException
 import org.onap.cps.spi.exceptions.CpsException
+import org.onap.cps.spi.exceptions.CpsPathException
 import org.onap.cps.spi.exceptions.DataInUseException
 import org.onap.cps.spi.exceptions.DataValidationException
 import org.onap.cps.spi.exceptions.ModelValidationException
@@ -148,7 +149,8 @@ class CpsRestExceptionHandlerSpec extends RestControllerSpecification {
 
         where: 'the following exceptions are thrown'
             exceptionThrown << [new ModelValidationException(errorMessage, errorDetails, null),
-                                new DataValidationException(errorMessage, errorDetails, null)]
+                                new DataValidationException(errorMessage, errorDetails, null),
+                                new CpsPathException(errorMessage,errorDetails)]
     }
 
     @Unroll
index e85414c..54a6a96 100644 (file)
@@ -59,7 +59,7 @@ public class CpsPathQuery {
             cpsPathQuery.setCpsPathQueryType(CpsPathQueryType.XPATH_LEAF_VALUE);
             cpsPathQuery.setXpathPrefix(matcher.group(1));
             cpsPathQuery.setLeafName(matcher.group(2));
-            cpsPathQuery.setLeafValue(convertLeafValueToCorrectType(matcher.group(3)));
+            cpsPathQuery.setLeafValue(convertLeafValueToCorrectType(matcher.group(3), cpsPath));
             return cpsPathQuery;
         }
         matcher = QUERY_CPS_PATH_ENDS_WITH_PATTERN.matcher(cpsPath);
@@ -69,10 +69,10 @@ public class CpsPathQuery {
             return cpsPathQuery;
         }
         throw new CpsPathException("Invalid cps path.",
-            String.format("Cannot interpret or parse cps path %s.", cpsPath));
+            String.format("Cannot interpret or parse cps path '%s'.", cpsPath));
     }
 
-    private static Object convertLeafValueToCorrectType(final String leafValueString) {
+    private static Object convertLeafValueToCorrectType(final String leafValueString, final String cpsPath) {
         final Matcher stringValueWithQuotesMatcher = LEAF_STRING_VALUE_PATTERN.matcher(leafValueString);
         if (stringValueWithQuotesMatcher.matches()) {
             return stringValueWithQuotesMatcher.group(1);
@@ -82,6 +82,6 @@ public class CpsPathQuery {
             return Integer.valueOf(leafValueString);
         }
         throw new CpsPathException("Unsupported leaf value.",
-            String.format("Unsupported leaf value %s in cps path.", leafValueString));
+            String.format("Unsupported leaf value '%s' in cps path '%s'.", leafValueString, cpsPath));
     }
 }