diff options
author | niamhcore <niamh.core@est.tech> | 2021-03-09 14:23:52 +0000 |
---|---|---|
committer | niamhcore <niamh.core@est.tech> | 2021-03-26 11:14:20 +0000 |
commit | 386658dbc8d2bf156a29537c5edb80ba574abb17 (patch) | |
tree | 5bbc4c88ca95d6220085682ae715e4e24fb65da3 | |
parent | be5cd5b36e092d1fb0a34d2a7007da9a5c7a2378 (diff) |
Improve error reporting for invalid cps path query
Issue-ID: CPS-276
Signed-off-by: niamhcore <niamh.core@est.tech>
Change-Id: I0e0abbaff32c936c67fc1092dc8385a0bc5ae49e
3 files changed, 13 insertions, 7 deletions
diff --git a/cps-rest/src/main/java/org/onap/cps/rest/exceptions/CpsRestExceptionHandler.java b/cps-rest/src/main/java/org/onap/cps/rest/exceptions/CpsRestExceptionHandler.java index 2599dc4f01..6e851519a7 100644 --- a/cps-rest/src/main/java/org/onap/cps/rest/exceptions/CpsRestExceptionHandler.java +++ b/cps-rest/src/main/java/org/onap/cps/rest/exceptions/CpsRestExceptionHandler.java @@ -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)); } diff --git a/cps-rest/src/test/groovy/org/onap/cps/rest/exceptions/CpsRestExceptionHandlerSpec.groovy b/cps-rest/src/test/groovy/org/onap/cps/rest/exceptions/CpsRestExceptionHandlerSpec.groovy index bb9199e6a6..f9ada9a213 100644 --- a/cps-rest/src/test/groovy/org/onap/cps/rest/exceptions/CpsRestExceptionHandlerSpec.groovy +++ b/cps-rest/src/test/groovy/org/onap/cps/rest/exceptions/CpsRestExceptionHandlerSpec.groovy @@ -35,6 +35,7 @@ import org.onap.cps.api.CpsModuleService import org.onap.cps.api.CpsQueryService 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 @@ -147,7 +148,8 @@ class CpsRestExceptionHandlerSpec extends Specification { 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 diff --git a/cps-ri/src/main/java/org/onap/cps/spi/query/CpsPathQuery.java b/cps-ri/src/main/java/org/onap/cps/spi/query/CpsPathQuery.java index e85414cdc9..54a6a96c4e 100644 --- a/cps-ri/src/main/java/org/onap/cps/spi/query/CpsPathQuery.java +++ b/cps-ri/src/main/java/org/onap/cps/spi/query/CpsPathQuery.java @@ -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)); } } |