X-Git-Url: https://juplo.de/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fde%2Fjuplo%2Ffacebook%2Ferrors%2FGraphApiExchangeFilterFunction.java;h=34ca5a71ef8d23cffd86f5ef442dc99d0dcfce1b;hb=2ee955aa31aac3dff18457f032fce4ed15049cd2;hp=6642e38b1b7740d85ee6922494df12c061f67c52;hpb=93621868c248e425d959b92f9fdfd02a02554983;p=facebook-errors diff --git a/src/main/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunction.java b/src/main/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunction.java index 6642e38..34ca5a7 100644 --- a/src/main/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunction.java +++ b/src/main/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunction.java @@ -1,13 +1,12 @@ package de.juplo.facebook.errors; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.http.HttpStatus; import org.springframework.web.reactive.function.client.ClientRequest; import org.springframework.web.reactive.function.client.ClientResponse; import org.springframework.web.reactive.function.client.ExchangeFilterFunction; import org.springframework.web.reactive.function.client.ExchangeFunction; +import org.springframework.web.reactive.function.client.WebClientResponseException; import reactor.core.publisher.Mono; @@ -17,25 +16,33 @@ import reactor.core.publisher.Mono; */ public class GraphApiExchangeFilterFunction implements ExchangeFilterFunction { - private static final Logger LOG = - LoggerFactory.getLogger(GraphApiExchangeFilterFunction.class); - - public static GraphApiExchangeFilterFunction INSTANCE = - new GraphApiExchangeFilterFunction(); - - @Override public Mono filter(ClientRequest request, ExchangeFunction next) { return next .exchange(request) - .doOnError(e -> LOG.debug("ERROR: {}", e)) .flatMap(response -> { return HttpStatus.Series.CLIENT_ERROR.equals(response.statusCode().series()) - ? Mono.error(GraphApiException.create(response).block()) + ? response + .bodyToMono(String.class) + .map(errorBody -> GraphApiException.create( + response.statusCode(), + response.headers().asHttpHeaders(), + errorBody.getBytes())) + .map(e -> + e.getClass().equals(ErrorResponseParsingErrorException.class) + ? WebClientResponseException + .create( + e.getStatus().value(), + e.getStatus().getReasonPhrase(), + e.getHeaders(), + null, + null) + : e) + .flatMap(e -> Mono.error(e)) : Mono.just(response); }); }