diff --git a/src/main/java/eu/enmeshed/ConnectorErrorDecoder.java b/src/main/java/eu/enmeshed/ConnectorErrorDecoder.java index 833adce..3663dd8 100644 --- a/src/main/java/eu/enmeshed/ConnectorErrorDecoder.java +++ b/src/main/java/eu/enmeshed/ConnectorErrorDecoder.java @@ -4,6 +4,18 @@ import eu.enmeshed.exceptions.PeerDeletionException; import eu.enmeshed.exceptions.WrongRelationshipStatusException; import feign.FeignException; +import feign.FeignException.BadRequest; +import feign.FeignException.Conflict; +import feign.FeignException.FeignClientException; +import feign.FeignException.Forbidden; +import feign.FeignException.Gone; +import feign.FeignException.MethodNotAllowed; +import feign.FeignException.NotAcceptable; +import feign.FeignException.NotFound; +import feign.FeignException.TooManyRequests; +import feign.FeignException.Unauthorized; +import feign.FeignException.UnprocessableEntity; +import feign.FeignException.UnsupportedMediaType; import feign.Request; import feign.Response; import feign.RetryableException; @@ -33,17 +45,32 @@ public FeignException decode(String methodKey, Response response) { String responseBody = new String(responseBodyBytes); ConnectorError connectorError = objectMapper.convertValue(objectMapper.readTree(responseBody).get("error"), ConnectorError.class); - FeignException feignException = FeignException.errorStatus(methodKey, response); + var request = response.request(); + var headers = response.headers(); + var message = connectorError.message(); if (connectorError.isRelationshipStatusWrong()) { - return new WrongRelationshipStatusException(connectorError.message(), feignException.request(), responseBodyBytes, feignException.responseHeaders()); + return new WrongRelationshipStatusException(message, request, responseBodyBytes, headers); } if (connectorError.hasPeerDeletionError()) { - return new PeerDeletionException(connectorError.message(), feignException.request(), responseBodyBytes, feignException.responseHeaders()); + return new PeerDeletionException(message, request, responseBodyBytes, headers); } - return feignException; + return switch (responseStatus) { + case 400 -> new BadRequest(message, request, responseBodyBytes, headers); + case 401 -> new Unauthorized(message, request, responseBodyBytes, headers); + case 403 -> new Forbidden(message, request, responseBodyBytes, headers); + case 404 -> new NotFound(message, request, responseBodyBytes, headers); + case 405 -> new MethodNotAllowed(message, request, responseBodyBytes, headers); + case 406 -> new NotAcceptable(message, request, responseBodyBytes, headers); + case 409 -> new Conflict(message, request, responseBodyBytes, headers); + case 410 -> new Gone(message, request, responseBodyBytes, headers); + case 415 -> new UnsupportedMediaType(message, request, responseBodyBytes, headers); + case 429 -> new TooManyRequests(message, request, responseBodyBytes, headers); + case 422 -> new UnprocessableEntity(message, request, responseBodyBytes, headers); + default -> new FeignClientException(responseStatus, message, request, responseBodyBytes, headers); + }; } catch (IOException e) { log.error("Failed to parse error response body", e); return new RetryableException( diff --git a/src/main/java/eu/enmeshed/model/ObjectReference.java b/src/main/java/eu/enmeshed/model/ObjectReference.java new file mode 100644 index 0000000..f12ec1c --- /dev/null +++ b/src/main/java/eu/enmeshed/model/ObjectReference.java @@ -0,0 +1,18 @@ +package eu.enmeshed.model; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.experimental.SuperBuilder; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +@SuperBuilder +public class ObjectReference { + + private String truncated; + private String url; +} diff --git a/src/main/java/eu/enmeshed/model/file/ConnectorFile.java b/src/main/java/eu/enmeshed/model/file/ConnectorFile.java index 7e687c9..6fe727b 100644 --- a/src/main/java/eu/enmeshed/model/file/ConnectorFile.java +++ b/src/main/java/eu/enmeshed/model/file/ConnectorFile.java @@ -1,6 +1,7 @@ package eu.enmeshed.model.file; import com.fasterxml.jackson.annotation.JsonProperty; +import eu.enmeshed.model.ObjectReference; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; @@ -29,5 +30,6 @@ public class ConnectorFile { private boolean own; private String truncatedReference; + private ObjectReference reference; private String secretKey; } diff --git a/src/main/java/eu/enmeshed/model/relationshipTemplates/RelationshipTemplate.java b/src/main/java/eu/enmeshed/model/relationshipTemplates/RelationshipTemplate.java index eca9491..b285b38 100644 --- a/src/main/java/eu/enmeshed/model/relationshipTemplates/RelationshipTemplate.java +++ b/src/main/java/eu/enmeshed/model/relationshipTemplates/RelationshipTemplate.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import eu.enmeshed.model.ContentWrapper; +import eu.enmeshed.model.ObjectReference; import eu.enmeshed.model.event.WebhookData; import java.time.ZonedDateTime; import lombok.AllArgsConstructor; @@ -36,4 +37,6 @@ public class RelationshipTemplate extends ContentWrapper