From a307dad921f18c0065eebe53261582e2803fa470 Mon Sep 17 00:00:00 2001 From: nscavell Date: Wed, 23 Jan 2013 09:20:25 -0500 Subject: [PATCH] Add exception to specify bad input/data for a request/operation --- .../api/exceptions/InvalidDataException.java | 17 +++++++++++++++++ .../management/core/spi/AnnotatedOperation.java | 5 +++++ .../gatein/management/rest/RestController.java | 8 ++++++++ 3 files changed, 30 insertions(+) create mode 100644 api/src/main/java/org/gatein/management/api/exceptions/InvalidDataException.java diff --git a/api/src/main/java/org/gatein/management/api/exceptions/InvalidDataException.java b/api/src/main/java/org/gatein/management/api/exceptions/InvalidDataException.java new file mode 100644 index 00000000..6e731ee7 --- /dev/null +++ b/api/src/main/java/org/gatein/management/api/exceptions/InvalidDataException.java @@ -0,0 +1,17 @@ +package org.gatein.management.api.exceptions; + +/** + * @author Nick Scavelli + */ +public class InvalidDataException extends ManagementException +{ + public InvalidDataException(final String message) + { + super(message); + } + + public InvalidDataException(final String message, final Throwable cause) + { + super(message, cause); + } +} diff --git a/core/src/main/java/org/gatein/management/core/spi/AnnotatedOperation.java b/core/src/main/java/org/gatein/management/core/spi/AnnotatedOperation.java index 59300c89..716a9630 100644 --- a/core/src/main/java/org/gatein/management/core/spi/AnnotatedOperation.java +++ b/core/src/main/java/org/gatein/management/core/spi/AnnotatedOperation.java @@ -35,6 +35,7 @@ import org.gatein.management.api.annotations.MappedAttribute; import org.gatein.management.api.annotations.MappedPath; import org.gatein.management.api.binding.Marshaller; +import org.gatein.management.api.exceptions.InvalidDataException; import org.gatein.management.api.exceptions.NotAuthorizedException; import org.gatein.management.api.exceptions.OperationException; import org.gatein.management.api.exceptions.ResourceNotFoundException; @@ -213,6 +214,10 @@ else if (e.getCause() instanceof OperationException) { throw (OperationException) e.getCause(); } + else if (e.getCause() instanceof InvalidDataException) + { + throw (InvalidDataException) e.getCause(); + } throw new RuntimeException("Could not invoke method " + this.method + " on object " + instance, e); } } diff --git a/rest/src/main/java/org/gatein/management/rest/RestController.java b/rest/src/main/java/org/gatein/management/rest/RestController.java index 3c5ef3b9..c56c3b2d 100644 --- a/rest/src/main/java/org/gatein/management/rest/RestController.java +++ b/rest/src/main/java/org/gatein/management/rest/RestController.java @@ -28,6 +28,7 @@ import org.gatein.management.api.PathAddress; import org.gatein.management.api.controller.ManagedResponse; import org.gatein.management.api.controller.ManagementController; +import org.gatein.management.api.exceptions.InvalidDataException; import org.gatein.management.api.exceptions.NotAuthorizedException; import org.gatein.management.api.exceptions.OperationException; import org.gatein.management.api.exceptions.ResourceNotFoundException; @@ -442,6 +443,13 @@ private Response executeRequest(UriInfo uriInfo, HttpManagedRequest request) return failure(e.getMessage(), operationName, Status.INTERNAL_SERVER_ERROR, contentType); } } + catch (InvalidDataException e) + { + if (log.isDebugEnabled()) { + log.error("Bad request for address " + address + " and operation " + operationName, e); + } + return failure(e.getMessage(), operationName, Status.BAD_REQUEST, contentType); + } catch (Exception e) { String message = "Error processing operation: " + operationName + ", address: " + address + ", content-type: " + contentType;