WIP: WebClient
[facebook-errors] / src / main / java / de / juplo / facebook / errors / GraphApiException.java
index 3f9c544..27f359f 100644 (file)
@@ -10,11 +10,10 @@ 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.http.ReactiveHttpInputMessage;
-import org.springframework.web.reactive.function.BodyExtractor;
-import org.springframework.web.reactive.function.BodyExtractor.Context;
+import org.springframework.web.reactive.function.BodyExtractors;
 import org.springframework.web.reactive.function.client.ClientResponse;
 import reactor.core.publisher.Mono;
 
@@ -48,12 +47,17 @@ public class GraphApiException extends RuntimeException
 
 
 
-  public static GraphApiException create(ClientResponse response)
+  public static Mono<GraphApiException> create(ClientResponse response)
   {
-    HttpStatus status = response.statusCode();
-    HttpHeaders headers = response.headers().asHttpHeaders();
-    Mono<String> body = response.bodyToMono(String.class);
-    return create(status , headers, body.block().getBytes());
+               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(