X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=webapp-backend%2Fsrc%2Fmain%2Fjava%2Forg%2Foransc%2Fric%2Fportal%2Fdashboard%2Fcontroller%2FCustomResponseEntityExceptionHandler.java;h=2c432d542884a7ccec0abadb97398bc4d0e4e83d;hb=425ca107bd805dda906b62fc2b03a6f3c815b8a1;hp=b1ac2e8fdb90bfef7bc643024789603cc79a7ba5;hpb=3f812ea25d352ec33d07f5ffa4c2aa2a77e8e793;p=portal%2Fric-dashboard.git
diff --git a/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/controller/CustomResponseEntityExceptionHandler.java b/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/controller/CustomResponseEntityExceptionHandler.java
index b1ac2e8f..2c432d54 100644
--- a/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/controller/CustomResponseEntityExceptionHandler.java
+++ b/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/controller/CustomResponseEntityExceptionHandler.java
@@ -24,29 +24,19 @@ import java.lang.invoke.MethodHandles;
import org.oransc.ric.portal.dashboard.model.ErrorTransport;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
-import org.springframework.web.HttpRequestMethodNotSupportedException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.client.HttpStatusCodeException;
+import org.springframework.web.client.RestClientResponseException;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
/**
- * Catches Http status code exceptions and builds a response with code 502 and
- * some details wrapped in an ErrorTransport object. This factors out try-catch
+ * Catches certain exceptions. This controller advice factors out try-catch
* blocks in many controller methods.
*
- * Why 502? I quote:
HTTP server received an invalid response from a
- * server it consulted when acting as a proxy or gateway.
- *
- * This class and the methods are not strictly necessary, the
- * SimpleErrorController is invoked when any controller method takes an uncaught
- * exception, but this approach provides a better response to the front end and
- * doesn't signal internal server error.
- *
* Also see:
* https://www.baeldung.com/exception-handling-for-rest-with-spring
* https://www.springboottutorial.com/spring-boot-exception-handling-for-rest-services
@@ -57,45 +47,36 @@ public class CustomResponseEntityExceptionHandler extends ResponseEntityExceptio
// Superclass has "logger" that is exposed here, so use a different name
private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
- /*
- * Generates the response when a REST controller method takes an
- * HttpStatusCodeException.
+ /**
+ * Logs the error and generates a JSON response when a REST controller method
+ * takes a RestClientResponseException. This is thrown by the Http client when a
+ * remote method returns a non-2xx code. All the controller methods are proxies
+ * in that they just forward the request along to a remote system, so if that
+ * remote system fails, return 502 plus some details about the failure, rather
+ * than the generic 500 that Spring-Boot will return on an uncaught exception.
*
- * It appears that the container internally redirects to /error because the web
- * request that arrives here has URI /error, and {@link
- * org.oransc.ric.portal.dashboard.controller.SimpleErrorController} runs before
- * this.
+ * Why 502? I quote:
HTTP server received an invalid response from a
+ * server it consulted when acting as a proxy or gateway.
*
- * @param ex The exception
+ * @param ex
+ * The exception
*
- * @param request The original request
+ * @param request
+ * The original request
*
* @return A response entity with status code 502 plus some details in the body.
*/
- @ExceptionHandler(HttpStatusCodeException.class)
- public final ResponseEntity handleHttpStatusCodeException(HttpStatusCodeException ex,
- WebRequest request) {
- log.warn("handleHttpStatusCodeException: request {}, status code {}", request.getDescription(false),
- ex.getStatusCode());
- return new ResponseEntity<>(new ErrorTransport(ex.getRawStatusCode(), ex.getResponseBodyAsString(), ex),
- HttpStatus.BAD_GATEWAY);
- }
-
- /*
- * This exception also happens when Spring security denies access to a method
- * due to missing/wrong roles (granted authorities). Override the method to
- * answer permission denied, even though that may obscure a genuine developer
- * error.
- *
- * The web request that arrives here has URI /error; how to obtain the URI of
- * the original request?!?
- */
- @Override
- public final ResponseEntity