From 07c7e9ffe4992a914b8d235448e8f819a59e6053 Mon Sep 17 00:00:00 2001 From: Bill Smith Date: Thu, 5 Jul 2018 11:50:25 -0700 Subject: [PATCH] [SHIBUI-580] Added a simple POJO for transmitting errors from custom exception handlers. Added a custom exception handler for when bad things happen when parsing JSON Resolvers. Fixed a couple typos. --- .../admin/ui/controller/ErrorResponse.java | 18 ++++++++++++++++++ .../MetadataResolversController.java | 11 +++++++++-- .../MetadataResolverValidationService.java | 4 ++-- 3 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/ErrorResponse.java diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/ErrorResponse.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/ErrorResponse.java new file mode 100644 index 000000000..fa91aa3e6 --- /dev/null +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/ErrorResponse.java @@ -0,0 +1,18 @@ +package edu.internet2.tier.shibboleth.admin.ui.controller; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +/** + * @author Bill Smith (wsmith@unicon.net) + */ +@AllArgsConstructor +@Getter +@Setter +@ToString +public class ErrorResponse { + private String errorCode; + private String errorMessage; +} diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolversController.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolversController.java index c0ee64068..5b24f5788 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolversController.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolversController.java @@ -1,15 +1,16 @@ package edu.internet2.tier.shibboleth.admin.ui.controller; +import com.fasterxml.jackson.databind.exc.InvalidTypeIdException; import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataResolver; import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataResolverValidationService; -import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataResolverValidator; import edu.internet2.tier.shibboleth.admin.ui.repository.MetadataResolverRepository; - import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.http.converter.HttpMessageNotReadableException; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; @@ -19,6 +20,7 @@ import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.support.ServletUriComponentsBuilder; +import java.io.IOException; import java.net.URI; import static edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataResolverValidator.ValidationResult; @@ -34,6 +36,11 @@ public class MetadataResolversController { @Autowired MetadataResolverValidationService metadataResolverValidationService; + @ExceptionHandler({InvalidTypeIdException.class, IOException.class, HttpMessageNotReadableException.class}) + public ResponseEntity unableToParseJson(Exception ex) { + return ResponseEntity.badRequest().body(new ErrorResponse(HttpStatus.BAD_REQUEST.toString(), ex.getMessage())); + } + @GetMapping("/MetadataResolvers") @Transactional(readOnly = true) public ResponseEntity getAll() { diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/MetadataResolverValidationService.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/MetadataResolverValidationService.java index 26039b81b..4151faeb6 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/MetadataResolverValidationService.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/MetadataResolverValidationService.java @@ -8,7 +8,7 @@ /** * A facade that aggregates {@link MetadataResolverValidator}s available to call just one of them supporting the type of a given resolver. - * If no {@link MetadataResolverValidator}s are configured, conciders provided MetadataResolver as valid. + * If no {@link MetadataResolverValidator}s are configured, considers provided MetadataResolver as valid. *

* Uses chain-of-responsibility design pattern * @@ -22,7 +22,7 @@ public MetadataResolverValidationService(List> vali this.validators = validators != null ? validators : new ArrayList<>(); } - @SuppressWarnings("Uncheked") + @SuppressWarnings("Unchecked") public ValidationResult validateIfNecessary(T metadataResolver) { Optional> validator = this.validators