package com.sequenceiq.periscope.rest.controller; import java.text.ParseException; import java.util.NoSuchElementException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.AccessDeniedException; import org.springframework.web.bind.annotation.ExceptionHandler; import com.sequenceiq.periscope.log.MDCBuilder; import com.sequenceiq.periscope.rest.json.ExceptionMessageJson; import com.sequenceiq.periscope.rest.json.IdExceptionMessageJson; import com.sequenceiq.periscope.service.NotFoundException; import com.sequenceiq.periscope.service.security.TlsConfigurationException; //@ControllerAdvice public class ExceptionController { private static final Logger LOGGER = LoggerFactory.getLogger(ExceptionController.class); @ExceptionHandler(IllegalArgumentException.class) public ResponseEntity<ExceptionMessageJson> handleIllegalArgException(IllegalArgumentException e) { MDCBuilder.buildMdcContext(); LOGGER.error("Unexpected illegal argument exception", e); return createExceptionMessage(e.getMessage()); } @ExceptionHandler({ NoSuchElementException.class, NotFoundException.class }) public ResponseEntity<ExceptionMessageJson> handleNotFoundExceptions(Exception e) { MDCBuilder.buildMdcContext(); LOGGER.error("Not found", e); String message = e.getMessage(); return createExceptionMessage(message == null ? "Not found" : message, HttpStatus.NOT_FOUND); } @ExceptionHandler(ParseException.class) public ResponseEntity<ExceptionMessageJson> handleCronExpressionException(ParseException e) { MDCBuilder.buildMdcContext(); return createExceptionMessage(e.getMessage(), HttpStatus.BAD_REQUEST); } @ExceptionHandler(AccessDeniedException.class) public ResponseEntity<ExceptionMessageJson> handleNoScalingGroupException(AccessDeniedException e) { MDCBuilder.buildMdcContext(); return createExceptionMessage(e.getMessage(), HttpStatus.FORBIDDEN); } @ExceptionHandler(TlsConfigurationException.class) public ResponseEntity<ExceptionMessageJson> handleTlsConfigurationException(TlsConfigurationException e) { MDCBuilder.buildMdcContext(); return createExceptionMessage(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); } public static ResponseEntity<ExceptionMessageJson> createExceptionMessage(String message) { return createExceptionMessage(message, HttpStatus.BAD_REQUEST); } public static ResponseEntity<ExceptionMessageJson> createExceptionMessage(String message, HttpStatus statusCode) { return new ResponseEntity<>(new ExceptionMessageJson(message), statusCode); } public static ResponseEntity<IdExceptionMessageJson> createIdExceptionMessage(long id, String message, HttpStatus statusCode) { return new ResponseEntity<>(new IdExceptionMessageJson(id, message), statusCode); } }