]> juplo.de Git - facebook-errors/commitdiff
The exception stores the HttpStatus and HttpHeaders of the failed request
authorKai Moritz <kai@juplo.de>
Mon, 9 Jul 2018 19:00:42 +0000 (21:00 +0200)
committerKai Moritz <kai@juplo.de>
Mon, 9 Jul 2018 19:00:42 +0000 (21:00 +0200)
22 files changed:
src/main/java/de/juplo/facebook/errors/AccessTokenRequiredException.java
src/main/java/de/juplo/facebook/errors/AccountRequestLimitReachedException.java
src/main/java/de/juplo/facebook/errors/ApplicationRequestLimitReachedException.java
src/main/java/de/juplo/facebook/errors/AuthorizationMissingException.java
src/main/java/de/juplo/facebook/errors/CallbackVerificationFailedException.java
src/main/java/de/juplo/facebook/errors/CustomRequestLimitReachedException.java
src/main/java/de/juplo/facebook/errors/DeprecatedException.java
src/main/java/de/juplo/facebook/errors/GraphApiErrorHandler.java
src/main/java/de/juplo/facebook/errors/GraphApiException.java
src/main/java/de/juplo/facebook/errors/GraphMethodException.java
src/main/java/de/juplo/facebook/errors/LinkPostFailureException.java
src/main/java/de/juplo/facebook/errors/MultipleConcurrentPostsException.java
src/main/java/de/juplo/facebook/errors/OAuth2GraphApiErrorHandler.java
src/main/java/de/juplo/facebook/errors/OAuthException.java
src/main/java/de/juplo/facebook/errors/PageMigratedException.java
src/main/java/de/juplo/facebook/errors/PageRequestLimitReachedException.java
src/main/java/de/juplo/facebook/errors/TemporaryRateLimitExceededException.java
src/main/java/de/juplo/facebook/errors/UnexpectedErrorException.java
src/main/java/de/juplo/facebook/errors/UnknownErrorException.java
src/main/java/de/juplo/facebook/errors/UnmappedErrorException.java
src/main/java/de/juplo/facebook/errors/UnsupportedGetRequestException.java
src/main/java/de/juplo/facebook/errors/UserAccessTokenRequiredException.java

index 5b540966b0b39b396f1b8e9501a0785c0f768ec9..980e2dc7e09e0588b54e5ba5e1b0ae77cc64ffcc 100644 (file)
@@ -1,6 +1,11 @@
 package de.juplo.facebook.errors;
 
 
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+
+
+
 
 /**
  * 104: An access token is required to request this resource.
@@ -8,8 +13,12 @@ package de.juplo.facebook.errors;
  */
 public class AccessTokenRequiredException extends OAuthException
 {
-  protected AccessTokenRequiredException(FacebookErrorMessage error)
+  protected AccessTokenRequiredException(
+      HttpStatus status,
+      HttpHeaders headers,
+      FacebookErrorMessage error
+      )
   {
-    super(error);
+    super(status, headers, error);
   }
 }
index ab0af950d664f1c32800e817af431322c3d18432..d21ed94dc8404609ccebd857e82872634a3f2a45 100644 (file)
@@ -1,6 +1,11 @@
 package de.juplo.facebook.errors;
 
 
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+
+
+
 
 /**
  * 17: Account request limit reached.
@@ -9,8 +14,12 @@ package de.juplo.facebook.errors;
  */
 public class AccountRequestLimitReachedException extends OAuthException
 {
-  protected AccountRequestLimitReachedException(FacebookErrorMessage error)
+  protected AccountRequestLimitReachedException(
+      HttpStatus status,
+      HttpHeaders headers,
+      FacebookErrorMessage error
+      )
   {
-    super(error);
+    super(status, headers, error);
   }
 }
index 6a2196ca5eddcd7599c7b583c0486c0ce9594f94..1b52f27924be3a0ead07a12af1f6c82dc33c3934 100644 (file)
@@ -1,6 +1,11 @@
 package de.juplo.facebook.errors;
 
 
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+
+
+
 
 /**
  * 4: (#4) Application request limit reached.
@@ -8,8 +13,12 @@ package de.juplo.facebook.errors;
  */
 public class ApplicationRequestLimitReachedException extends OAuthException
 {
-  protected ApplicationRequestLimitReachedException(FacebookErrorMessage error)
+  protected ApplicationRequestLimitReachedException(
+      HttpStatus status,
+      HttpHeaders headers,
+      FacebookErrorMessage error
+      )
   {
-    super(error);
+    super(status, headers, error);
   }
 }
index 440684c235c3392cc20deb072e5062e1a41321f6..d6f94fd8abccc16031f58744ea088e1b083854ac 100644 (file)
@@ -1,6 +1,11 @@
 package de.juplo.facebook.errors;
 
 
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+
+
+
 
 /**
  * 10: Authorization declined / not granted
@@ -10,8 +15,12 @@ package de.juplo.facebook.errors;
  */
 public class AuthorizationMissingException extends OAuthException
 {
-  protected AuthorizationMissingException(FacebookErrorMessage error)
+  protected AuthorizationMissingException(
+      HttpStatus status,
+      HttpHeaders headers,
+      FacebookErrorMessage error
+      )
   {
-    super(error);
+    super(status, headers, error);
   }
 }
index 27ef93651965e2c8ae80ad5bff5d33c495ec5bba..ede94d4bd09327340652cebcd4af7d1917541d00 100644 (file)
@@ -1,14 +1,23 @@
 package de.juplo.facebook.errors;
 
 
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+
+
+
 /**
  * 2200: Callback verification failed.
  * @author Kai Moritz
  */
 public class CallbackVerificationFailedException extends OAuthException
 {
-  protected CallbackVerificationFailedException(FacebookErrorMessage error)
+  protected CallbackVerificationFailedException(
+      HttpStatus status,
+      HttpHeaders headers,
+      FacebookErrorMessage error
+      )
   {
-    super(error);
+    super(status, headers, error);
   }
 }
index 7beaea2c1653c9f86cd7c5fa411e635f094aa2ba..be3caa20b9c05f01ce8784b25febdce527ade2ae 100644 (file)
@@ -1,6 +1,11 @@
 package de.juplo.facebook.errors;
 
 
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+
+
+
 
 /**
  * 613: Calls to stream have exceeded the rate of 600 calls per 600 seconds.
@@ -12,8 +17,12 @@ package de.juplo.facebook.errors;
  */
 public class CustomRequestLimitReachedException extends OAuthException
 {
-  protected CustomRequestLimitReachedException(FacebookErrorMessage error)
+  protected CustomRequestLimitReachedException(
+      HttpStatus status,
+      HttpHeaders headers,
+      FacebookErrorMessage error
+      )
   {
-    super(error);
+    super(status, headers, error);
   }
 }
index 8274cb66b827eaaff070c0d89c9bb79cb094c6a7..8438e27a91ee6f981d7b8ba3ab05f51d30da9b22 100644 (file)
@@ -1,6 +1,11 @@
 package de.juplo.facebook.errors;
 
 
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+
+
+
 
 /**
  * 12: XYZ field is deprecated for versions vZ.Z and higher
@@ -9,8 +14,12 @@ package de.juplo.facebook.errors;
  */
 public class DeprecatedException extends OAuthException
 {
-  protected DeprecatedException(FacebookErrorMessage error)
+  protected DeprecatedException(
+      HttpStatus status,
+      HttpHeaders headers,
+      FacebookErrorMessage error
+      )
   {
-    super(error);
+    super(status, headers, error);
   }
 }
index fe2932c40795f098ffff5264581f205b8edb3414..265f1455c8a87c428b31f93ba5e115209aa79e1d 100644 (file)
@@ -80,7 +80,7 @@ public class GraphApiErrorHandler implements ResponseErrorHandler
 
     try
     {
-      error = GraphApiException.create(body);
+      error = GraphApiException.create(response.getStatusCode(), response.getHeaders(), body);
       if (LOG.isInfoEnabled())
         LOG.info("error-response: {}", new String(body, Charset.forName("UTF-8")));
     }
index 53bbbe6dc29fb6c46893d06d6ca613ceb7b84b35..7263c4f3791f82e600949aca6387e27e53b85cbc 100644 (file)
@@ -11,6 +11,8 @@ import java.io.IOException;
 import java.io.InputStream;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
 
 
 
@@ -27,7 +29,9 @@ public class GraphApiException extends RuntimeException
   final static Logger LOG = LoggerFactory.getLogger(GraphApiException.class);
   final static ObjectMapper OBJECT_MAPPER;
 
-  private final FacebookErrorMessage error;
+  public final HttpStatus status;
+  public final HttpHeaders headers;
+  public final FacebookErrorMessage error;
 
 
   static
@@ -39,42 +43,54 @@ public class GraphApiException extends RuntimeException
   }
 
 
-  public static GraphApiException create(InputStream in)
+  public static GraphApiException create(
+      HttpStatus status,
+      HttpHeaders headers,
+      InputStream in
+      )
       throws
         IOException,
         JsonParseException,
         JsonMappingException
   {
-    return create(OBJECT_MAPPER.readValue(in, FacebookErrorMessage.class));
+    return create(status, headers, OBJECT_MAPPER.readValue(in, FacebookErrorMessage.class));
   }
 
-  public static GraphApiException create(byte[] message)
+  public static GraphApiException create(
+      HttpStatus status,
+      HttpHeaders headers,
+      byte[] message
+      )
       throws
         IOException,
         JsonParseException,
         JsonMappingException
   {
-    return create(OBJECT_MAPPER.readValue(message, FacebookErrorMessage.class));
+    return create(status, headers, OBJECT_MAPPER.readValue(message, FacebookErrorMessage.class));
   }
 
-  public static GraphApiException create(FacebookErrorMessage error)
+  public static GraphApiException create(
+      HttpStatus status,
+      HttpHeaders headers,
+      FacebookErrorMessage error
+      )
   {
     // see: http://fbdevwiki.com/wiki/Error_codes
     switch(error.code)
     {
       // 1..99: general errors
-      case 1:     return new UnknownErrorException(error);
-      case 2:     return new UnexpectedErrorException(error);
-      case 4:     return new ApplicationRequestLimitReachedException(error);
-      case 10:    return new AuthorizationMissingException(error);
-      case 12:    return new DeprecatedException(error);
-      case 17:    return new AccountRequestLimitReachedException(error);
-      case 21:    return new PageMigratedException(error);
-      case 32:    return new PageRequestLimitReachedException(error);
+      case 1:     return new UnknownErrorException(status, headers, error);
+      case 2:     return new UnexpectedErrorException(status, headers, error);
+      case 4:     return new ApplicationRequestLimitReachedException(status, headers, error);
+      case 10:    return new AuthorizationMissingException(status, headers, error);
+      case 12:    return new DeprecatedException(status, headers, error);
+      case 17:    return new AccountRequestLimitReachedException(status, headers, error);
+      case 21:    return new PageMigratedException(status, headers, error);
+      case 32:    return new PageRequestLimitReachedException(status, headers, error);
       // 100..199: graph method errors
-      case 100:   return new UnsupportedGetRequestException(error);
-      case 102:   return new UserAccessTokenRequiredException(error);
-      case 104:   return new AccessTokenRequiredException(error);
+      case 100:   return new UnsupportedGetRequestException(status, headers, error);
+      case 102:   return new UserAccessTokenRequiredException(status, headers, error);
+      case 104:   return new AccessTokenRequiredException(status, headers, error);
       // 200..299: permission errors
       case 200:
       case 201:
@@ -175,39 +191,55 @@ public class GraphApiException extends RuntimeException
       case 296:
       case 297:
       case 298:
-      case 299:   return new AuthorizationMissingException(error);
+      case 299:   return new AuthorizationMissingException(status, headers, error);
       // 200..299: permission errors
       // 300..399: data editing errors ?
-      case 341:   return new TemporaryRateLimitExceededException(error);
+      case 341:   return new TemporaryRateLimitExceededException(status, headers, error);
       // 400..449: authentication error
       // 450..499: session errors
       // 500..599: application messaging errors ?
-      case 506:   return new MultipleConcurrentPostsException(error);
+      case 506:   return new MultipleConcurrentPostsException(status, headers, error);
       // 600..699: FQL errors
-      case 613:   return new CustomRequestLimitReachedException(error);
+      case 613:   return new CustomRequestLimitReachedException(status, headers, error);
       // 700..749: ref errors
       // 750..799: application integration errors
       // 900..949: application information errors
       // 950..999: batch api errors
       // 1000..1099: event api errors
       // 1100..1199: live-message errors
-      case 1609005: return new LinkPostFailureException(error);
-      case 2200:  return new CallbackVerificationFailedException(error);
+      case 1609005: return new LinkPostFailureException(status, headers, error);
+      case 2200:  return new CallbackVerificationFailedException(status, headers, error);
 
       default:
         LOG.info("unmapped error: {}", error);
-        return new UnmappedErrorException(error);
+        return new UnmappedErrorException(status, headers, error);
     }
   }
 
 
-  protected GraphApiException(FacebookErrorMessage error)
+  protected GraphApiException(
+      HttpStatus status,
+      HttpHeaders headers,
+      FacebookErrorMessage error
+      )
   {
     super(error.message);
+    this.status = status;
+    this.headers = headers;
     this.error = error;
   }
 
 
+  public HttpStatus getStatus()
+  {
+    return status;
+  }
+
+  public HttpHeaders getHeaders()
+  {
+    return headers;
+  }
+
   public Type getType()
   {
     return error.type == null ? null : Type.valueOf(error.type);
index afe83cbcbc17ac16d87ec41266b5fd782389ed3e..42dc23f156b81589313d5542941fe89fad87d2e4 100644 (file)
@@ -1,6 +1,11 @@
 package de.juplo.facebook.errors;
 
 
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+
+
+
 
 /**
  * Baseclass for exceptions of type {@code GraphMethodException}.
@@ -8,8 +13,12 @@ package de.juplo.facebook.errors;
  */
 public abstract class GraphMethodException extends GraphApiException
 {
-  GraphMethodException(FacebookErrorMessage error)
+  GraphMethodException(
+      HttpStatus status,
+      HttpHeaders headers,
+      FacebookErrorMessage error
+      )
   {
-    super(error);
+    super(status, headers, error);
   }
 }
index 71698614233b6dfc3da679302a9eb6b005f41bba..0039a538b88f08cb4a0f171d970aa4544472f2d1 100644 (file)
@@ -1,6 +1,11 @@
 package de.juplo.facebook.errors;
 
 
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+
+
+
 
 /**
  * 1609005: Failure while posting link (data could not be read from link)
@@ -9,8 +14,12 @@ package de.juplo.facebook.errors;
  */
 public class LinkPostFailureException extends OAuthException
 {
-  protected LinkPostFailureException(FacebookErrorMessage error)
+  protected LinkPostFailureException(
+      HttpStatus status,
+      HttpHeaders headers,
+      FacebookErrorMessage error
+      )
   {
-    super(error);
+    super(status, headers, error);
   }
 }
index b99bed7da8af13f44018029d855cea50317925f6..8fd50b07e903612ba2a72ef6e35492fed2938d3a 100644 (file)
@@ -1,6 +1,11 @@
 package de.juplo.facebook.errors;
 
 
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+
+
+
 
 /**
  * 506: Multiple concurrent posts
@@ -9,8 +14,12 @@ package de.juplo.facebook.errors;
  */
 public class MultipleConcurrentPostsException extends OAuthException
 {
-  protected MultipleConcurrentPostsException(FacebookErrorMessage error)
+  protected MultipleConcurrentPostsException(
+      HttpStatus status,
+      HttpHeaders headers,
+      FacebookErrorMessage error
+      )
   {
-    super(error);
+    super(status, headers, error);
   }
 }
index a0b5e453aa4bb7228cdd330928329292547e71c8..9158987c240f583c3ea4b795538f9e25c11021c9 100644 (file)
@@ -7,7 +7,6 @@ import org.springframework.http.HttpStatus;
 import org.springframework.http.client.ClientHttpResponse;
 import org.springframework.http.converter.HttpMessageConverter;
 import org.springframework.security.oauth2.client.http.OAuth2ErrorHandler;
-import org.springframework.web.client.ResponseErrorHandler;
 
 
 
index 4153dbc3d15b1c43d405b3447e11d45ab6832a4a..ca672bc06541d6a47eb595a5f899fd7783b40c1c 100644 (file)
@@ -1,6 +1,11 @@
 package de.juplo.facebook.errors;
 
 
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+
+
+
 
 /**
  * Baseclass for exceptions of type {@code OAuthException}.
@@ -8,8 +13,12 @@ package de.juplo.facebook.errors;
  */
 public class OAuthException extends GraphApiException
 {
-  protected OAuthException(FacebookErrorMessage error)
+  protected OAuthException(
+      HttpStatus status,
+      HttpHeaders headers,
+      FacebookErrorMessage error
+      )
   {
-    super(error);
+    super(status, headers, error);
   }
 }
index c339d83cda3eddb7acdca334d8b75205006f038d..3c7ee01cfdca9f5320be6284ffaf32876bcf6147 100644 (file)
@@ -3,6 +3,8 @@ package de.juplo.facebook.errors;
 
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
 
 
 
@@ -18,9 +20,13 @@ public class PageMigratedException extends OAuthException
   private final Long oldId, newId;
 
 
-  protected PageMigratedException(FacebookErrorMessage error)
+  protected PageMigratedException(
+      HttpStatus status,
+      HttpHeaders headers,
+      FacebookErrorMessage error
+      )
   {
-    super(error);
+    super(status, headers, error);
     Matcher matcher = pattern.matcher(error.message);
     if (!matcher.find())
     {
index e4ee19166d37fc770b97bac14eb91e8b09e273f4..23c2bcab9c41f7a3bee6a69ba411ad9249531d73 100644 (file)
@@ -1,6 +1,11 @@
 package de.juplo.facebook.errors;
 
 
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+
+
+
 
 /**
  * 32: Account request limit reached.
@@ -9,8 +14,12 @@ package de.juplo.facebook.errors;
  */
 public class PageRequestLimitReachedException extends OAuthException
 {
-  protected PageRequestLimitReachedException(FacebookErrorMessage error)
+  protected PageRequestLimitReachedException(
+      HttpStatus status,
+      HttpHeaders headers,
+      FacebookErrorMessage error
+      )
   {
-    super(error);
+    super(status, headers, error);
   }
 }
index 0eba6172ac0d6d441eabe3ece9cd66467dedf8d8..e87d5b72df5175155538ad241e915bf377a89980 100644 (file)
@@ -1,6 +1,11 @@
 package de.juplo.facebook.errors;
 
 
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+
+
+
 
 /**
  * 341: Temporary rate-limit excession because of server-failure or throtteling
@@ -9,8 +14,12 @@ package de.juplo.facebook.errors;
  */
 public class TemporaryRateLimitExceededException extends OAuthException
 {
-  protected TemporaryRateLimitExceededException(FacebookErrorMessage error)
+  protected TemporaryRateLimitExceededException(
+      HttpStatus status,
+      HttpHeaders headers,
+      FacebookErrorMessage error
+      )
   {
-    super(error);
+    super(status, headers, error);
   }
 }
index 72c071b4b156922e648cdd232de4059b330648bf..2278e576ccaf16e56b629990c904219033386579 100644 (file)
@@ -1,6 +1,11 @@
 package de.juplo.facebook.errors;
 
 
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+
+
+
 
 /**
  * 2: An unexpected error has occurred.
@@ -8,8 +13,12 @@ package de.juplo.facebook.errors;
  */
 public class UnexpectedErrorException extends OAuthException
 {
-  protected UnexpectedErrorException(FacebookErrorMessage error)
+  protected UnexpectedErrorException(
+      HttpStatus status,
+      HttpHeaders headers,
+      FacebookErrorMessage error
+      )
   {
-    super(error);
+    super(status, headers, error);
   }
 }
index 7f5e8ff919679644de26c4cbaf048f32387cf926..4115f7bf3f0b2c5d5e2d905e74d8f5e78867965b 100644 (file)
@@ -1,6 +1,11 @@
 package de.juplo.facebook.errors;
 
 
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+
+
+
 
 /**
  * 1: An unknown error has occurred.
@@ -8,8 +13,12 @@ package de.juplo.facebook.errors;
  */
 public class UnknownErrorException extends OAuthException
 {
-  protected UnknownErrorException(FacebookErrorMessage error)
+  protected UnknownErrorException(
+      HttpStatus status,
+      HttpHeaders headers,
+      FacebookErrorMessage error
+      )
   {
-    super(error);
+    super(status, headers, error);
   }
 }
index 839de09be0ab8b59880bcb0baa112c57f41895a5..997f53f13c1018b8ecc41183802d178bc863b98f 100644 (file)
@@ -1,6 +1,11 @@
 package de.juplo.facebook.errors;
 
 
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+
+
+
 
 /**
  * Marker class for error-messages, that are not mapped yet.
@@ -11,8 +16,12 @@ package de.juplo.facebook.errors;
  */
 public class UnmappedErrorException extends GraphApiException
 {
-  protected  UnmappedErrorException(FacebookErrorMessage error)
+  protected  UnmappedErrorException(
+      HttpStatus status,
+      HttpHeaders headers,
+      FacebookErrorMessage error
+      )
   {
-    super(error);
+    super(status, headers, error);
   }
 }
index 4a5a9b8ec4708218e8853231930b81f169956132..74f82f8fee513dba6913eddaba208ac0fc74a511 100644 (file)
@@ -1,6 +1,11 @@
 package de.juplo.facebook.errors;
 
 
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+
+
+
 
 /**
  * 100: Unsupported get request.
@@ -8,8 +13,12 @@ package de.juplo.facebook.errors;
  */
 public class UnsupportedGetRequestException extends GraphMethodException
 {
-  protected UnsupportedGetRequestException(FacebookErrorMessage error)
+  protected UnsupportedGetRequestException(
+      HttpStatus status,
+      HttpHeaders headers,
+      FacebookErrorMessage error
+      )
   {
-    super(error);
+    super(status, headers, error);
   }
 }
index cb91950a51e5f2467bdceb9dfe22549c8e0dd1df..0d3a90966ebe2b4c9963cb6bb0819276a7d39ddf 100644 (file)
@@ -1,6 +1,11 @@
 package de.juplo.facebook.errors;
 
 
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+
+
+
 
 /**
  * A user access token is required to request this resource.
@@ -8,8 +13,12 @@ package de.juplo.facebook.errors;
  */
 public class UserAccessTokenRequiredException extends OAuthException
 {
-  public UserAccessTokenRequiredException(FacebookErrorMessage error)
+  public UserAccessTokenRequiredException(
+      HttpStatus status,
+      HttpHeaders headers,
+      FacebookErrorMessage error
+      )
   {
-    super(error);
+    super(status, headers, error);
   }
 }