package org.onap.cps.ncmp.rest.exceptions;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
+import org.onap.cps.ncmp.api.impl.exception.DmiRequestException;
+import org.onap.cps.ncmp.api.impl.exception.HttpClientRequestException;
+import org.onap.cps.ncmp.api.impl.exception.InvalidDatastoreException;
import org.onap.cps.ncmp.api.impl.exception.NcmpException;
+import org.onap.cps.ncmp.api.impl.exception.ServerNcmpException;
import org.onap.cps.ncmp.rest.controller.NetworkCmProxyController;
+import org.onap.cps.ncmp.rest.controller.NetworkCmProxyInventoryController;
+import org.onap.cps.ncmp.rest.model.DmiErrorMessage;
+import org.onap.cps.ncmp.rest.model.DmiErrorMessageDmiresponse;
import org.onap.cps.ncmp.rest.model.ErrorMessage;
+import org.onap.cps.spi.exceptions.AlreadyDefinedException;
+import org.onap.cps.spi.exceptions.AlreadyDefinedExceptionBatch;
import org.onap.cps.spi.exceptions.CpsException;
+import org.onap.cps.spi.exceptions.DataNodeNotFoundException;
+import org.onap.cps.spi.exceptions.DataValidationException;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
+import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
* Exception handler with error message return.
*/
@Slf4j
-@RestControllerAdvice(assignableTypes = {NetworkCmProxyController.class})
+@RestControllerAdvice(assignableTypes = {NetworkCmProxyController.class, NetworkCmProxyInventoryController.class})
+@NoArgsConstructor(access = AccessLevel.PACKAGE)
public class NetworkCmProxyRestExceptionHandler {
private static final String CHECK_LOGS_FOR_DETAILS = "Check logs for details.";
*/
@ExceptionHandler
public static ResponseEntity<Object> handleInternalServerErrorExceptions(
- final Exception exception) {
+ final Exception exception) {
return buildErrorResponse(HttpStatus.INTERNAL_SERVER_ERROR, exception);
}
- @ExceptionHandler({CpsException.class})
- public static ResponseEntity<Object> handleAnyOtherCpsExceptions(final CpsException exception) {
+ @ExceptionHandler({CpsException.class, ServerNcmpException.class})
+ public static ResponseEntity<Object> handleAnyOtherCpsExceptions(final Exception exception) {
return buildErrorResponse(HttpStatus.INTERNAL_SERVER_ERROR, exception);
}
- @ExceptionHandler({NcmpException.class})
- public static ResponseEntity<Object> handleNcmpExceptions(final NcmpException exception) {
- return buildErrorResponse(HttpStatus.INTERNAL_SERVER_ERROR, exception);
+ @ExceptionHandler({HttpClientRequestException.class})
+ public static ResponseEntity<Object> handleClientRequestExceptions(
+ final HttpClientRequestException httpClientRequestException) {
+ return wrapDmiErrorResponse(HttpStatus.BAD_GATEWAY, httpClientRequestException);
+ }
+
+ @ExceptionHandler({DmiRequestException.class, DataValidationException.class,
+ HttpMessageNotReadableException.class, InvalidTopicException.class, InvalidDatastoreException.class})
+ public static ResponseEntity<Object> handleDmiRequestExceptions(final Exception exception) {
+ return buildErrorResponse(HttpStatus.BAD_REQUEST, exception);
+ }
+
+ @ExceptionHandler({AlreadyDefinedException.class, AlreadyDefinedExceptionBatch.class })
+ public static ResponseEntity<Object> handleAlreadyDefinedExceptions(final Exception exception) {
+ return buildErrorResponse(HttpStatus.CONFLICT, exception);
+ }
+
+ @ExceptionHandler({DataNodeNotFoundException.class})
+ public static ResponseEntity<Object> handleNotFoundExceptions(final CpsException exception) {
+ return buildErrorResponse(HttpStatus.NOT_FOUND, exception);
}
private static ResponseEntity<Object> buildErrorResponse(final HttpStatus status, final Exception exception) {
} else {
errorMessage.setDetails(CHECK_LOGS_FOR_DETAILS);
}
- errorMessage.setDetails(exception instanceof CpsException ? ((CpsException) exception).getDetails() :
- CHECK_LOGS_FOR_DETAILS);
+ errorMessage.setDetails(
+ exception instanceof CpsException ? ((CpsException) exception).getDetails() : CHECK_LOGS_FOR_DETAILS);
return new ResponseEntity<>(errorMessage, status);
}
+
+ private static ResponseEntity<Object> wrapDmiErrorResponse(
+ final HttpStatus httpStatus,
+ final HttpClientRequestException httpClientRequestException) {
+ final var dmiErrorMessage = new DmiErrorMessage();
+ final var dmiErrorResponse = new DmiErrorMessageDmiresponse();
+ dmiErrorResponse.setHttpCode(httpClientRequestException.getHttpStatus());
+ dmiErrorResponse.setBody(httpClientRequestException.getDetails());
+ dmiErrorMessage.setMessage(httpClientRequestException.getMessage());
+ dmiErrorMessage.setDmiResponse(dmiErrorResponse);
+ return new ResponseEntity<>(dmiErrorMessage, httpStatus);
+ }
}