X-Git-Url: https://juplo.de/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fde%2Fjuplo%2Ffacebook%2Ferrors%2FGraphApiException.java;h=5ec30fac6f9e83d0ce4009627ae726c5fb872426;hb=d64c9cc5a367f0934567f8c3915483fe0f64af98;hp=7263c4f3791f82e600949aca6387e27e53b85cbc;hpb=bda5a9134be94075d2d8eca16dbbc1c25b87232c;p=facebook-errors diff --git a/src/main/java/de/juplo/facebook/errors/GraphApiException.java b/src/main/java/de/juplo/facebook/errors/GraphApiException.java index 7263c4f..5ec30fa 100644 --- a/src/main/java/de/juplo/facebook/errors/GraphApiException.java +++ b/src/main/java/de/juplo/facebook/errors/GraphApiException.java @@ -1,18 +1,21 @@ package de.juplo.facebook.errors; -import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; +import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.core.io.buffer.DataBuffer; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; +import org.springframework.http.ReactiveHttpInputMessage; +import org.springframework.web.reactive.function.BodyExtractor.Context; +import org.springframework.web.reactive.function.client.ClientResponse; @@ -43,17 +46,32 @@ public class GraphApiException extends RuntimeException } + + public static GraphApiException create(ClientResponse response) + { + return + response.body((ReactiveHttpInputMessage message, Context context) -> + { + DataBuffer buffer = message.getBody().blockFirst(); + InputStream is = message.getBody().blockFirst().asInputStream(); + return create(response.statusCode(), message.getHeaders(), is); + }); + } + public static GraphApiException create( HttpStatus status, HttpHeaders headers, InputStream in ) - throws - IOException, - JsonParseException, - JsonMappingException { - return create(status, headers, OBJECT_MAPPER.readValue(in, FacebookErrorMessage.class)); + try + { + return create(status, headers, OBJECT_MAPPER.readValue(in, FacebookErrorMessage.class)); + } + catch (IOException | RuntimeException e) + { + return new ErrorResponseParsingErrorException(status, headers, e); + } } public static GraphApiException create( @@ -61,12 +79,8 @@ public class GraphApiException extends RuntimeException HttpHeaders headers, byte[] message ) - throws - IOException, - JsonParseException, - JsonMappingException { - return create(status, headers, OBJECT_MAPPER.readValue(message, FacebookErrorMessage.class)); + return create(status, headers, new ByteArrayInputStream(message)); } public static GraphApiException create( @@ -91,8 +105,9 @@ public class GraphApiException extends RuntimeException case 100: return new UnsupportedGetRequestException(status, headers, error); case 102: return new UserAccessTokenRequiredException(status, headers, error); case 104: return new AccessTokenRequiredException(status, headers, error); + case 190: return new AccessTokenExpiredException(status, headers, error); // 200..299: permission errors - case 200: + case 200: return new ApplicationNotAuthorizedByUserException(status, headers, error); case 201: case 202: case 203: @@ -200,7 +215,7 @@ public class GraphApiException extends RuntimeException // 500..599: application messaging errors ? case 506: return new MultipleConcurrentPostsException(status, headers, error); // 600..699: FQL errors - case 613: return new CustomRequestLimitReachedException(status, headers, error); + case 613: return new RateLimitExceededException(status, headers, error); // 700..749: ref errors // 750..799: application integration errors // 900..949: application information errors @@ -211,8 +226,9 @@ public class GraphApiException extends RuntimeException case 2200: return new CallbackVerificationFailedException(status, headers, error); default: - LOG.info("unmapped error: {}", error); - return new UnmappedErrorException(status, headers, error); + GraphApiException e = new UnmappedErrorException(status, headers, error); + LOG.info("unmapped error: {}", e.toString()); + return e; } }