RestconfDocumentException is a RuntimeException 14/108514/2
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 19 Oct 2023 09:31:45 +0000 (11:31 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Fri, 20 Oct 2023 12:10:45 +0000 (14:10 +0200)
Disconnect from WebApplicationException to reduce dependencies on
JAX-RS.

JIRA: NETCONF-1188
Change-Id: I6c7e7cd7c390ad2502e1aa79ed0496b37d68d315
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
restconf/restconf-common/src/main/java/org/opendaylight/restconf/common/errors/RestconfDocumentedException.java
restconf/restconf-nb/src/test/java/org/opendaylight/restconf/nb/rfc8040/databind/AbstractResourceBodyTest.java

index 3613ecf1d74226cbe71f28551f2bd6430a1badbe..686d486e1adbdd88d80d288ca103a5235f5e348a 100644 (file)
@@ -12,7 +12,6 @@ import static java.util.Objects.requireNonNull;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
-import javax.ws.rs.WebApplicationException;
 import javax.ws.rs.core.Response.Status;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
@@ -27,18 +26,15 @@ import org.opendaylight.yangtools.yang.data.api.YangNetconfErrorAware;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 
 /**
- * Unchecked exception to communicate error information, as defined in the ietf restcong draft, to be sent to the
- * client.
- *
- * <p>
- * See also <a href="https://tools.ietf.org/html/draft-bierman-netconf-restconf-02">RESTCONF</a>
+ * Unchecked exception to communicate error information, as defined
+ * <a href="https://www.rfc-editor.org/rfc/rfc8040#section-3.9">"errors" YANG Data Template</a>.
  *
  * @author Devin Avery
  * @author Thomas Pantelis
  */
-public class RestconfDocumentedException extends WebApplicationException {
+public class RestconfDocumentedException extends RuntimeException {
     @java.io.Serial
-    private static final long serialVersionUID = 2L;
+    private static final long serialVersionUID = 3L;
 
     private final List<RestconfError> errors;
     private final Status status;
@@ -164,27 +160,27 @@ public class RestconfDocumentedException extends WebApplicationException {
     }
 
     public RestconfDocumentedException(final Throwable cause, final RestconfError error) {
-        super(cause, ErrorTags.statusOf(error.getErrorTag()));
+        super(cause);
+        status = ErrorTags.statusOf(error.getErrorTag());
         errors = List.of(error);
-        status = null;
-        modelContext = null;
-    }
-
-    public RestconfDocumentedException(final Throwable cause, final List<RestconfError> errors) {
-        super(cause, ErrorTags.statusOf(errors.get(0).getErrorTag()));
-        this.errors = List.copyOf(errors);
-        status = null;
         modelContext = null;
     }
 
     public RestconfDocumentedException(final Throwable cause, final RestconfError error,
             final EffectiveModelContext modelContext) {
-        super(cause, ErrorTags.statusOf(error.getErrorTag()));
+        super(cause);
+        status = ErrorTags.statusOf(error.getErrorTag());
         errors = List.of(error);
-        status = null;
         this.modelContext = requireNonNull(modelContext);
     }
 
+    public RestconfDocumentedException(final Throwable cause, final List<RestconfError> errors) {
+        super(cause);
+        status = ErrorTags.statusOf(errors.get(0).getErrorTag());
+        this.errors = List.copyOf(errors);
+        modelContext = null;
+    }
+
     public static RestconfDocumentedException decodeAndThrow(final String message,
             final OperationFailedException cause) {
         for (final RpcError error : cause.getErrorList()) {
@@ -277,6 +273,11 @@ public class RestconfDocumentedException extends WebApplicationException {
         return errorList;
     }
 
+    @Override
+    public String getMessage() {
+        return "errors: " + errors;
+    }
+
     /**
      * Reference to {@link EffectiveModelContext} in which this exception was generated. This method will return
      * {@code null} if this exception was serialized or if the context is not available.
@@ -294,9 +295,4 @@ public class RestconfDocumentedException extends WebApplicationException {
     public Status getStatus() {
         return status;
     }
-
-    @Override
-    public String getMessage() {
-        return "errors: " + errors + (status != null ? ", status: " + status : "");
-    }
 }
index 0b812620147b9476f7a5dd1e444af06b725dce82..524da1c6f9d0e0cc0d868c14501621273f54d390 100644 (file)
@@ -95,7 +95,7 @@ abstract class AbstractResourceBodyTest extends AbstractBodyTest {
 
     static final void assertRangeViolation(final ThrowingRunnable runnable) {
         final var ex = assertThrows(RestconfDocumentedException.class, runnable);
-        assertEquals(Status.BAD_REQUEST, ex.getResponse().getStatusInfo());
+        assertEquals(Status.BAD_REQUEST, ex.getStatus());
 
         final var errors = ex.getErrors();
         assertEquals(1, errors.size());