WIP: WebClient
[facebook-errors] / src / main / java / de / juplo / facebook / errors / GraphApiException.java
index 636b3d2..27f359f 100644 (file)
@@ -10,8 +10,12 @@ import java.io.IOException;
 import java.io.InputStream;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.core.io.buffer.DataBufferUtils;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpStatus;
+import org.springframework.web.reactive.function.BodyExtractors;
+import org.springframework.web.reactive.function.client.ClientResponse;
+import reactor.core.publisher.Mono;
 
 
 
@@ -42,6 +46,20 @@ public class GraphApiException extends RuntimeException
   }
 
 
+
+  public static Mono<GraphApiException> create(ClientResponse response)
+  {
+               return DataBufferUtils.join(response.body(BodyExtractors.toDataBuffers()))
+                               .map(dataBuffer -> {
+                                       byte[] bytes = new byte[dataBuffer.readableByteCount()];
+                                       dataBuffer.read(bytes);
+                                       DataBufferUtils.release(dataBuffer);
+                                       return bytes;
+                               })
+                               .defaultIfEmpty(new byte[0])
+                               .map(bytes -> create(response.statusCode(), response.headers().asHttpHeaders(), bytes));
+  }
+
   public static GraphApiException create(
       HttpStatus status,
       HttpHeaders headers,
@@ -91,7 +109,7 @@ public class GraphApiException extends RuntimeException
       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:
@@ -210,8 +228,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;
     }
   }