aboutsummaryrefslogtreecommitdiffstats
path: root/services/src/main/java/org/onap/ccsdk/apps/services/RestExceptionHandler.java
diff options
context:
space:
mode:
Diffstat (limited to 'services/src/main/java/org/onap/ccsdk/apps/services/RestExceptionHandler.java')
-rw-r--r--services/src/main/java/org/onap/ccsdk/apps/services/RestExceptionHandler.java131
1 files changed, 131 insertions, 0 deletions
diff --git a/services/src/main/java/org/onap/ccsdk/apps/services/RestExceptionHandler.java b/services/src/main/java/org/onap/ccsdk/apps/services/RestExceptionHandler.java
new file mode 100644
index 00000000..c517f402
--- /dev/null
+++ b/services/src/main/java/org/onap/ccsdk/apps/services/RestExceptionHandler.java
@@ -0,0 +1,131 @@
+package org.onap.ccsdk.apps.services;
+
+import org.jvnet.hk2.annotations.Service;
+import org.springframework.beans.ConversionNotSupportedException;
+import org.springframework.beans.TypeMismatchException;
+import org.springframework.core.Ordered;
+import org.springframework.core.annotation.Order;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.http.converter.HttpMessageNotReadableException;
+import org.springframework.http.converter.HttpMessageNotWritableException;
+import org.springframework.validation.BindException;
+import org.springframework.web.HttpMediaTypeNotAcceptableException;
+import org.springframework.web.HttpMediaTypeNotSupportedException;
+import org.springframework.web.HttpRequestMethodNotSupportedException;
+import org.springframework.web.bind.MethodArgumentNotValidException;
+import org.springframework.web.bind.MissingPathVariableException;
+import org.springframework.web.bind.MissingServletRequestParameterException;
+import org.springframework.web.bind.ServletRequestBindingException;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+import org.springframework.web.context.request.WebRequest;
+import org.springframework.web.context.request.async.AsyncRequestTimeoutException;
+import org.springframework.web.multipart.support.MissingServletRequestPartException;
+import org.springframework.web.servlet.NoHandlerFoundException;
+import org.springframework.web.servlet.config.annotation.EnableWebMvc;
+import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
+
+import javax.servlet.http.HttpServletRequest;
+
+@Order(Ordered.HIGHEST_PRECEDENCE)
+@RestControllerAdvice
+public class RestExceptionHandler extends ResponseEntityExceptionHandler {
+
+ @Override
+ protected ResponseEntity<Object> handleHttpRequestMethodNotSupported(HttpRequestMethodNotSupportedException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
+ return createResponseEntity(new RestProtocolError("bad-method", "Method not supported", ex), status);
+ }
+
+ @Override
+ protected ResponseEntity<Object> handleHttpMediaTypeNotSupported(HttpMediaTypeNotSupportedException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
+ return createResponseEntity(new RestProtocolError("bad-media-type", "Media type not supported", ex), status);
+ }
+
+ @Override
+ protected ResponseEntity<Object> handleHttpMediaTypeNotAcceptable(HttpMediaTypeNotAcceptableException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
+ return createResponseEntity(new RestProtocolError("bad-media-type", "Media type not acceptable", ex), status);
+ }
+
+ @Override
+ protected ResponseEntity<Object> handleMissingPathVariable(MissingPathVariableException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
+ return createResponseEntity(new RestApplicationError("missing-path", "Missing path variable", ex), status);
+ }
+
+ @Override
+ protected ResponseEntity<Object> handleMissingServletRequestParameter(MissingServletRequestParameterException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
+ return createResponseEntity(new RestProtocolError("missing-param", "Missing servlet request parameter", ex), status);
+ }
+
+ @Override
+ protected ResponseEntity<Object> handleServletRequestBindingException(ServletRequestBindingException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
+ return createResponseEntity(new RestApplicationError("request-binding", "Servlet binding exception", ex), status);
+ }
+
+ @Override
+ protected ResponseEntity<Object> handleConversionNotSupported(ConversionNotSupportedException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
+ return createResponseEntity(new RestApplicationError("conversion", "Conversion not supported", ex), status);
+ }
+
+ @Override
+ protected ResponseEntity<Object> handleTypeMismatch(TypeMismatchException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
+ return createResponseEntity(new RestProtocolError("type-mismatch", "Type mismatch", ex), status);
+ }
+
+ @Override
+ protected ResponseEntity<Object> handleHttpMessageNotReadable(HttpMessageNotReadableException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
+ return createResponseEntity(new RestProtocolError("bad-message", "HTTP message not readable", ex), status);
+ }
+
+ @Override
+ protected ResponseEntity<Object> handleHttpMessageNotWritable(HttpMessageNotWritableException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
+ return createResponseEntity(new RestProtocolError("bad-message", "HTTP message not writable", ex), status);
+ }
+
+ @Override
+ protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
+ return createResponseEntity(new RestProtocolError("bad-message", "Method argument not valid", ex), status);
+ }
+
+ @Override
+ protected ResponseEntity<Object> handleMissingServletRequestPart(MissingServletRequestPartException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
+ return createResponseEntity(new RestProtocolError("bad-message", "Missing servlet request part", ex), status);
+ }
+
+ @Override
+ protected ResponseEntity<Object> handleBindException(BindException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
+ return createResponseEntity(new RestApplicationError("binding-error", "Missing servlet request part", ex), status);
+ }
+
+ @Override
+ protected ResponseEntity<Object> handleNoHandlerFoundException(NoHandlerFoundException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
+ return createResponseEntity(new RestApplicationError("binding-error", "No handler found", ex), status);
+ }
+
+ @Override
+ protected ResponseEntity<Object> handleAsyncRequestTimeoutException(AsyncRequestTimeoutException ex, HttpHeaders headers, HttpStatus status, WebRequest webRequest) {
+ return createResponseEntity(new RestApplicationError("timeout", "Async request timeout", ex), status);
+ }
+
+ @Override
+ protected ResponseEntity<Object> handleExceptionInternal(Exception ex, Object body, HttpHeaders headers, HttpStatus status, WebRequest request) {
+ return createResponseEntity(new RestApplicationError("internal-error", "Internal error", ex), status);
+ }
+
+ @ExceptionHandler({RestException.class})
+ protected ResponseEntity<Object> handleRestException(RestException ex, HttpServletRequest request) {
+ RestError error = ex.getRestError();
+ if (request != null) {
+ error.setErrorPath(request.getServletPath());
+ }
+ return createResponseEntity(error,HttpStatus.valueOf(ex.getStatus()));
+ }
+
+ private ResponseEntity<Object> createResponseEntity(RestError restError, HttpStatus status) {
+
+ return new ResponseEntity<>(new RestErrors(restError), status);
+ }
+}