From 702cc4855fdf07c3c2aad5d90cb98d5ab8b84384 Mon Sep 17 00:00:00 2001 From: Kai Moritz Date: Thu, 21 Nov 2019 14:47:29 +0100 Subject: [PATCH 01/16] WIP: TMP - WebClient --- ...ExchangeFilterFunctionIntegrationTest.java | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java b/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java index 408ec48..b148d23 100644 --- a/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java +++ b/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java @@ -103,25 +103,43 @@ public class GraphApiExchangeFilterFunctionIntegrationTest .filter((request, next) -> next.exchange(request).flatMap(response -> { List headerValues = response.headers().header("Foo"); - return headerValues.isEmpty() ? Mono.error( - new Exception("Response does not contain Foo header")) : + return headerValues.isEmpty() ? Mono.error(GraphApiException.create(response)) : Mono.just(response); })) .build(); server .enqueue(new MockResponse() - .setResponseCode(400) + .setResponseCode(200) .setHeader("Content-Type", "text/plain") .setBody("Hello Spring!")); - Mono result = webClient.get() + Mono result; + + result = webClient.get() .uri("/greeting?name=Spring") .retrieve() .bodyToMono(String.class); StepVerifier.create(result) .expectError(Exception.class) + .verify(Duration.ofSeconds(90)); + + server + .enqueue(new MockResponse() + .setResponseCode(200) + .setHeader("Content-Type", "text/plain") + .setHeader("Foo", "Bar") + .setBody("Hello Spring!")); + + result = webClient.get() + .uri("/greeting?name=Spring") + .retrieve() + .bodyToMono(String.class); + + StepVerifier.create(result) + .expectNext("Hello Spring!") + .expectComplete() .verify(Duration.ofSeconds(3)); } } -- 2.20.1 From 54dcb2aa2eaef71f9eb2971e1e8db7d333366239 Mon Sep 17 00:00:00 2001 From: Kai Moritz Date: Thu, 21 Nov 2019 14:47:37 +0100 Subject: [PATCH 02/16] WIP: WebClient --- .../de/juplo/facebook/errors/GraphApiException.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/de/juplo/facebook/errors/GraphApiException.java b/src/main/java/de/juplo/facebook/errors/GraphApiException.java index 5ec30fa..b82a05b 100644 --- a/src/main/java/de/juplo/facebook/errors/GraphApiException.java +++ b/src/main/java/de/juplo/facebook/errors/GraphApiException.java @@ -50,12 +50,12 @@ 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); - }); + response + .body((ReactiveHttpInputMessage message, Context context) -> + message + .getBody() + .map(buffer -> buffer.asInputStream())) + .flatMap(is -> create(response.statusCode(), message.getHeaders(), is)); } public static GraphApiException create( -- 2.20.1 From 14d0788aed0305a814fc87bc33f3f17771dc6858 Mon Sep 17 00:00:00 2001 From: Kai Moritz Date: Thu, 21 Nov 2019 14:57:25 +0100 Subject: [PATCH 03/16] WIP: WebClient --- .../juplo/facebook/errors/GraphApiException.java | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/main/java/de/juplo/facebook/errors/GraphApiException.java b/src/main/java/de/juplo/facebook/errors/GraphApiException.java index b82a05b..2e56e62 100644 --- a/src/main/java/de/juplo/facebook/errors/GraphApiException.java +++ b/src/main/java/de/juplo/facebook/errors/GraphApiException.java @@ -10,12 +10,10 @@ 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; +import reactor.core.publisher.Mono; @@ -49,13 +47,11 @@ public class GraphApiException extends RuntimeException public static GraphApiException create(ClientResponse response) { - return + Mono body = response - .body((ReactiveHttpInputMessage message, Context context) -> - message - .getBody() - .map(buffer -> buffer.asInputStream())) - .flatMap(is -> create(response.statusCode(), message.getHeaders(), is)); + .bodyToMono(String.class); + Mono e = body + .map(str -> create(response.statusCode(), null, str.getBytes())); } public static GraphApiException create( -- 2.20.1 From b1a46d53733d1847b175fad2d8259371d4c6380f Mon Sep 17 00:00:00 2001 From: Kai Moritz Date: Thu, 21 Nov 2019 15:21:18 +0100 Subject: [PATCH 04/16] WIP: WebClient --- .../de/juplo/facebook/errors/GraphApiException.java | 12 +++++++----- ...raphApiExchangeFilterFunctionIntegrationTest.java | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/main/java/de/juplo/facebook/errors/GraphApiException.java b/src/main/java/de/juplo/facebook/errors/GraphApiException.java index 2e56e62..3f9c544 100644 --- a/src/main/java/de/juplo/facebook/errors/GraphApiException.java +++ b/src/main/java/de/juplo/facebook/errors/GraphApiException.java @@ -12,6 +12,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; 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.client.ClientResponse; import reactor.core.publisher.Mono; @@ -47,11 +50,10 @@ public class GraphApiException extends RuntimeException public static GraphApiException create(ClientResponse response) { - Mono body = - response - .bodyToMono(String.class); - Mono e = body - .map(str -> create(response.statusCode(), null, str.getBytes())); + HttpStatus status = response.statusCode(); + HttpHeaders headers = response.headers().asHttpHeaders(); + Mono body = response.bodyToMono(String.class); + return create(status , headers, body.block().getBytes()); } public static GraphApiException create( diff --git a/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java b/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java index b148d23..c468590 100644 --- a/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java +++ b/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java @@ -123,7 +123,7 @@ public class GraphApiExchangeFilterFunctionIntegrationTest StepVerifier.create(result) .expectError(Exception.class) - .verify(Duration.ofSeconds(90)); + .verify(Duration.ofSeconds(3)); server .enqueue(new MockResponse() -- 2.20.1 From 856a32e22b7a0e383c0ea2cf8ad3885ac9f08e36 Mon Sep 17 00:00:00 2001 From: Kai Moritz Date: Thu, 21 Nov 2019 15:28:19 +0100 Subject: [PATCH 05/16] WIP: WebClient --- .../java/de/juplo/facebook/errors/GraphApiException.java | 8 +++++--- .../facebook/errors/GraphApiExchangeFilterFunction.java | 2 +- .../GraphApiExchangeFilterFunctionIntegrationTest.java | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/main/java/de/juplo/facebook/errors/GraphApiException.java b/src/main/java/de/juplo/facebook/errors/GraphApiException.java index 3f9c544..3ebc64f 100644 --- a/src/main/java/de/juplo/facebook/errors/GraphApiException.java +++ b/src/main/java/de/juplo/facebook/errors/GraphApiException.java @@ -48,12 +48,14 @@ public class GraphApiException extends RuntimeException - public static GraphApiException create(ClientResponse response) + public static Mono create(ClientResponse response) { HttpStatus status = response.statusCode(); HttpHeaders headers = response.headers().asHttpHeaders(); - Mono body = response.bodyToMono(String.class); - return create(status , headers, body.block().getBytes()); + return + response + .bodyToMono(InputStream.class) + .map(is -> create(status , headers, is)); } public static GraphApiException create( diff --git a/src/main/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunction.java b/src/main/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunction.java index 53bdd0b..6642e38 100644 --- a/src/main/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunction.java +++ b/src/main/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunction.java @@ -35,7 +35,7 @@ public class GraphApiExchangeFilterFunction implements ExchangeFilterFunction { return HttpStatus.Series.CLIENT_ERROR.equals(response.statusCode().series()) - ? Mono.error(GraphApiException.create(response)) + ? Mono.error(GraphApiException.create(response).block()) : Mono.just(response); }); } diff --git a/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java b/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java index c468590..b90e057 100644 --- a/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java +++ b/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java @@ -103,7 +103,7 @@ public class GraphApiExchangeFilterFunctionIntegrationTest .filter((request, next) -> next.exchange(request).flatMap(response -> { List headerValues = response.headers().header("Foo"); - return headerValues.isEmpty() ? Mono.error(GraphApiException.create(response)) : + return headerValues.isEmpty() ? Mono.error(GraphApiException.create(response).block()) : Mono.just(response); })) .build(); -- 2.20.1 From 904813dd6f8362f2d7aae87bad164108b3a42004 Mon Sep 17 00:00:00 2001 From: Kai Moritz Date: Thu, 21 Nov 2019 15:31:39 +0100 Subject: [PATCH 06/16] WIP: WebClient --- .../de/juplo/facebook/errors/GraphApiException.java | 12 +++++------- .../errors/GraphApiExchangeFilterFunction.java | 2 +- ...raphApiExchangeFilterFunctionIntegrationTest.java | 2 +- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/main/java/de/juplo/facebook/errors/GraphApiException.java b/src/main/java/de/juplo/facebook/errors/GraphApiException.java index 3ebc64f..a696f6e 100644 --- a/src/main/java/de/juplo/facebook/errors/GraphApiException.java +++ b/src/main/java/de/juplo/facebook/errors/GraphApiException.java @@ -8,15 +8,12 @@ import com.fasterxml.jackson.databind.SerializationFeature; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; +import java.util.function.Supplier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; 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.client.ClientResponse; -import reactor.core.publisher.Mono; @@ -48,14 +45,15 @@ public class GraphApiException extends RuntimeException - public static Mono create(ClientResponse response) + public static Supplier create(ClientResponse response) { HttpStatus status = response.statusCode(); HttpHeaders headers = response.headers().asHttpHeaders(); return - response + () -> response .bodyToMono(InputStream.class) - .map(is -> create(status , headers, is)); + .map(is -> create(status , headers, is)) + .block(); } public static GraphApiException create( diff --git a/src/main/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunction.java b/src/main/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunction.java index 6642e38..53bdd0b 100644 --- a/src/main/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunction.java +++ b/src/main/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunction.java @@ -35,7 +35,7 @@ public class GraphApiExchangeFilterFunction implements ExchangeFilterFunction { return HttpStatus.Series.CLIENT_ERROR.equals(response.statusCode().series()) - ? Mono.error(GraphApiException.create(response).block()) + ? Mono.error(GraphApiException.create(response)) : Mono.just(response); }); } diff --git a/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java b/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java index b90e057..c468590 100644 --- a/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java +++ b/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java @@ -103,7 +103,7 @@ public class GraphApiExchangeFilterFunctionIntegrationTest .filter((request, next) -> next.exchange(request).flatMap(response -> { List headerValues = response.headers().header("Foo"); - return headerValues.isEmpty() ? Mono.error(GraphApiException.create(response).block()) : + return headerValues.isEmpty() ? Mono.error(GraphApiException.create(response)) : Mono.just(response); })) .build(); -- 2.20.1 From 93621868c248e425d959b92f9fdfd02a02554983 Mon Sep 17 00:00:00 2001 From: Kai Moritz Date: Thu, 21 Nov 2019 16:29:10 +0100 Subject: [PATCH 07/16] WIP: WebClient --- .../facebook/errors/GraphApiException.java | 22 +++++++++++-------- .../GraphApiExchangeFilterFunction.java | 2 +- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/main/java/de/juplo/facebook/errors/GraphApiException.java b/src/main/java/de/juplo/facebook/errors/GraphApiException.java index a696f6e..27f359f 100644 --- a/src/main/java/de/juplo/facebook/errors/GraphApiException.java +++ b/src/main/java/de/juplo/facebook/errors/GraphApiException.java @@ -8,12 +8,14 @@ import com.fasterxml.jackson.databind.SerializationFeature; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; -import java.util.function.Supplier; 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; @@ -45,15 +47,17 @@ public class GraphApiException extends RuntimeException - public static Supplier create(ClientResponse response) + public static Mono create(ClientResponse response) { - HttpStatus status = response.statusCode(); - HttpHeaders headers = response.headers().asHttpHeaders(); - return - () -> response - .bodyToMono(InputStream.class) - .map(is -> create(status , headers, is)) - .block(); + 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( diff --git a/src/main/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunction.java b/src/main/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunction.java index 53bdd0b..6642e38 100644 --- a/src/main/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunction.java +++ b/src/main/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunction.java @@ -35,7 +35,7 @@ public class GraphApiExchangeFilterFunction implements ExchangeFilterFunction { return HttpStatus.Series.CLIENT_ERROR.equals(response.statusCode().series()) - ? Mono.error(GraphApiException.create(response)) + ? Mono.error(GraphApiException.create(response).block()) : Mono.just(response); }); } -- 2.20.1 From f2c25e56b087b1b8221f5a0afdb06ab77aedda26 Mon Sep 17 00:00:00 2001 From: Kai Moritz Date: Thu, 21 Nov 2019 16:31:18 +0100 Subject: [PATCH 08/16] WIP: WebClient --- .../errors/GraphApiExchangeFilterFunctionIntegrationTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java b/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java index c468590..b90e057 100644 --- a/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java +++ b/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java @@ -103,7 +103,7 @@ public class GraphApiExchangeFilterFunctionIntegrationTest .filter((request, next) -> next.exchange(request).flatMap(response -> { List headerValues = response.headers().header("Foo"); - return headerValues.isEmpty() ? Mono.error(GraphApiException.create(response)) : + return headerValues.isEmpty() ? Mono.error(GraphApiException.create(response).block()) : Mono.just(response); })) .build(); -- 2.20.1 From 9182948a757827d7d8eeff3dac68cfd3d228706c Mon Sep 17 00:00:00 2001 From: Kai Moritz Date: Thu, 21 Nov 2019 16:55:29 +0100 Subject: [PATCH 09/16] WIP: WebClient --- .../de/juplo/facebook/errors/GraphApiException.java | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/main/java/de/juplo/facebook/errors/GraphApiException.java b/src/main/java/de/juplo/facebook/errors/GraphApiException.java index 27f359f..ce3836c 100644 --- a/src/main/java/de/juplo/facebook/errors/GraphApiException.java +++ b/src/main/java/de/juplo/facebook/errors/GraphApiException.java @@ -49,15 +49,10 @@ public class GraphApiException extends RuntimeException public static Mono 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)); + return + response + .createException() + .map(we -> create(response.statusCode(), response.headers().asHttpHeaders(), we.getResponseBodyAsByteArray())); } public static GraphApiException create( -- 2.20.1 From 2b59b561e9f491ce7a41b8002e221e0a7bac8848 Mon Sep 17 00:00:00 2001 From: Kai Moritz Date: Thu, 21 Nov 2019 17:12:18 +0100 Subject: [PATCH 10/16] WIP: WebClient --- .../GraphApiExchangeFilterFunctionIntegrationTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java b/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java index b90e057..4e07259 100644 --- a/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java +++ b/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java @@ -14,7 +14,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpStatus; import org.springframework.http.client.reactive.JettyClientHttpConnector; -import org.springframework.web.reactive.function.client.ExchangeFilterFunction; import org.springframework.web.reactive.function.client.WebClient; import reactor.core.publisher.Mono; import reactor.test.StepVerifier; @@ -42,7 +41,6 @@ public class GraphApiExchangeFilterFunctionIntegrationTest .builder() .clientConnector(new JettyClientHttpConnector()) .baseUrl(server.url("/").toString()) - .filter(GraphApiExchangeFilterFunction.INSTANCE) .build(); } @@ -76,6 +74,7 @@ public class GraphApiExchangeFilterFunctionIntegrationTest .get() .uri("/egal") .retrieve() + .onStatus(status -> status.is4xxClientError(), response -> GraphApiException.create(response)) .bodyToMono(String.class); StepVerifier @@ -110,7 +109,7 @@ public class GraphApiExchangeFilterFunctionIntegrationTest server .enqueue(new MockResponse() - .setResponseCode(200) + .setResponseCode(400) .setHeader("Content-Type", "text/plain") .setBody("Hello Spring!")); @@ -119,6 +118,7 @@ public class GraphApiExchangeFilterFunctionIntegrationTest result = webClient.get() .uri("/greeting?name=Spring") .retrieve() + .onStatus(status -> status.is4xxClientError(), response -> GraphApiException.create(response)) .bodyToMono(String.class); StepVerifier.create(result) -- 2.20.1 From 15f9e41fc87c2cc44058af0b2822d96baf599c35 Mon Sep 17 00:00:00 2001 From: Kai Moritz Date: Thu, 21 Nov 2019 20:30:51 +0100 Subject: [PATCH 11/16] WIP: WebClient --- ...ExchangeFilterFunctionIntegrationTest.java | 36 +++++++++++-------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java b/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java index 4e07259..306f044 100644 --- a/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java +++ b/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java @@ -3,7 +3,6 @@ package de.juplo.facebook.errors; import de.juplo.facebook.errors.GraphApiException.Type; import java.time.Duration; -import java.util.List; import okhttp3.mockwebserver.MockResponse; import okhttp3.mockwebserver.MockWebServer; import org.junit.After; @@ -14,6 +13,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpStatus; import org.springframework.http.client.reactive.JettyClientHttpConnector; +import org.springframework.web.reactive.function.client.ExchangeFilterFunction; import org.springframework.web.reactive.function.client.WebClient; import reactor.core.publisher.Mono; import reactor.test.StepVerifier; @@ -94,19 +94,6 @@ public class GraphApiExchangeFilterFunctionIntegrationTest @Test public void testTest() { - WebClient webClient = - WebClient - .builder() - .clientConnector(new JettyClientHttpConnector()) - .baseUrl(server.url("/").toString()) - .filter((request, next) -> next.exchange(request).flatMap(response -> - { - List headerValues = response.headers().header("Foo"); - return headerValues.isEmpty() ? Mono.error(GraphApiException.create(response).block()) : - Mono.just(response); - })) - .build(); - server .enqueue(new MockResponse() .setResponseCode(400) @@ -135,6 +122,7 @@ public class GraphApiExchangeFilterFunctionIntegrationTest result = webClient.get() .uri("/greeting?name=Spring") .retrieve() + .onStatus(status -> status.is4xxClientError(), response -> GraphApiException.create(response)) .bodyToMono(String.class); StepVerifier.create(result) @@ -142,4 +130,24 @@ public class GraphApiExchangeFilterFunctionIntegrationTest .expectComplete() .verify(Duration.ofSeconds(3)); } + + public static ExchangeFilterFunction errorHandlingFilter() + { + return ExchangeFilterFunction.ofResponseProcessor(clientResponse -> + { + if (clientResponse.statusCode() != null && (clientResponse.statusCode() + .is5xxServerError() || clientResponse.statusCode().is4xxClientError())) + { + return clientResponse.bodyToMono(String.class) + .flatMap(errorBody -> + { + return Mono.error(new Exception(errorBody)); + }); + } + else + { + return Mono.just(clientResponse); + } + }); + } } -- 2.20.1 From 2ae7a1699b006ff5dc15fe4a985ba4dc5a208c01 Mon Sep 17 00:00:00 2001 From: Kai Moritz Date: Thu, 21 Nov 2019 20:34:38 +0100 Subject: [PATCH 12/16] =?utf8?q?WIP:=20WebClient=20-=20DIE=20L=C3=96SUNG?= =?utf8?q?=20--=20Guckst=20du=20hier:=20https://stackoverflow.com/a/489848?= =?utf8?q?52/247276?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Die spannende Frage ist noch: was macht der anders...? --- ...piExchangeFilterFunctionIntegrationTest.java | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java b/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java index 306f044..8d21cc5 100644 --- a/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java +++ b/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java @@ -11,6 +11,7 @@ import org.junit.Before; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.client.reactive.JettyClientHttpConnector; import org.springframework.web.reactive.function.client.ExchangeFilterFunction; @@ -41,6 +42,7 @@ public class GraphApiExchangeFilterFunctionIntegrationTest .builder() .clientConnector(new JettyClientHttpConnector()) .baseUrl(server.url("/").toString()) + .filter(errorHandlingFilter()) .build(); } @@ -74,7 +76,6 @@ public class GraphApiExchangeFilterFunctionIntegrationTest .get() .uri("/egal") .retrieve() - .onStatus(status -> status.is4xxClientError(), response -> GraphApiException.create(response)) .bodyToMono(String.class); StepVerifier @@ -105,7 +106,6 @@ public class GraphApiExchangeFilterFunctionIntegrationTest result = webClient.get() .uri("/greeting?name=Spring") .retrieve() - .onStatus(status -> status.is4xxClientError(), response -> GraphApiException.create(response)) .bodyToMono(String.class); StepVerifier.create(result) @@ -122,7 +122,6 @@ public class GraphApiExchangeFilterFunctionIntegrationTest result = webClient.get() .uri("/greeting?name=Spring") .retrieve() - .onStatus(status -> status.is4xxClientError(), response -> GraphApiException.create(response)) .bodyToMono(String.class); StepVerifier.create(result) @@ -133,20 +132,20 @@ public class GraphApiExchangeFilterFunctionIntegrationTest public static ExchangeFilterFunction errorHandlingFilter() { - return ExchangeFilterFunction.ofResponseProcessor(clientResponse -> + return ExchangeFilterFunction.ofResponseProcessor(response -> { - if (clientResponse.statusCode() != null && (clientResponse.statusCode() - .is5xxServerError() || clientResponse.statusCode().is4xxClientError())) + if (response.statusCode() != null && (response.statusCode() + .is5xxServerError() || response.statusCode().is4xxClientError())) { - return clientResponse.bodyToMono(String.class) + return response.bodyToMono(String.class) .flatMap(errorBody -> { - return Mono.error(new Exception(errorBody)); + return Mono.error(GraphApiException.create(response.statusCode(), response.headers().asHttpHeaders(), errorBody.getBytes())); }); } else { - return Mono.just(clientResponse); + return Mono.just(response); } }); } -- 2.20.1 From 275e05949310906ca62356d76dccda522d93ab7e Mon Sep 17 00:00:00 2001 From: Kai Moritz Date: Thu, 21 Nov 2019 20:42:52 +0100 Subject: [PATCH 13/16] WIP: WebClient -- ExchangeFilterFunction.ofResponseProcessor() ersetzt --- .../errors/GraphApiExchangeFilterFunctionIntegrationTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java b/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java index 8d21cc5..6304665 100644 --- a/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java +++ b/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java @@ -132,7 +132,7 @@ public class GraphApiExchangeFilterFunctionIntegrationTest public static ExchangeFilterFunction errorHandlingFilter() { - return ExchangeFilterFunction.ofResponseProcessor(response -> + return (request, next) -> next.exchange(request).flatMap(response -> { if (response.statusCode() != null && (response.statusCode() .is5xxServerError() || response.statusCode().is4xxClientError())) -- 2.20.1 From 9a19a543217345145934e913b113c8e50f899ffd Mon Sep 17 00:00:00 2001 From: Kai Moritz Date: Thu, 21 Nov 2019 20:56:19 +0100 Subject: [PATCH 14/16] =?utf8?q?WIP:=20WebClient=20--=20Methode=20benutzt,?= =?utf8?q?=20anstatt=20Funktion=20zu=20=C3=BCbergeben?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- ...GraphApiExchangeFilterFunctionIntegrationTest.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java b/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java index 6304665..a9ba58c 100644 --- a/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java +++ b/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java @@ -11,10 +11,11 @@ import org.junit.Before; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.client.reactive.JettyClientHttpConnector; -import org.springframework.web.reactive.function.client.ExchangeFilterFunction; +import org.springframework.web.reactive.function.client.ClientRequest; +import org.springframework.web.reactive.function.client.ClientResponse; +import org.springframework.web.reactive.function.client.ExchangeFunction; import org.springframework.web.reactive.function.client.WebClient; import reactor.core.publisher.Mono; import reactor.test.StepVerifier; @@ -42,7 +43,7 @@ public class GraphApiExchangeFilterFunctionIntegrationTest .builder() .clientConnector(new JettyClientHttpConnector()) .baseUrl(server.url("/").toString()) - .filter(errorHandlingFilter()) + .filter(this::errorHandlingFilter) .build(); } @@ -130,9 +131,9 @@ public class GraphApiExchangeFilterFunctionIntegrationTest .verify(Duration.ofSeconds(3)); } - public static ExchangeFilterFunction errorHandlingFilter() + public Mono errorHandlingFilter(ClientRequest request, ExchangeFunction next) { - return (request, next) -> next.exchange(request).flatMap(response -> + return next.exchange(request).flatMap(response -> { if (response.statusCode() != null && (response.statusCode() .is5xxServerError() || response.statusCode().is4xxClientError())) -- 2.20.1 From 70a37345037a4ac678c8047cd8cb54727635e5f5 Mon Sep 17 00:00:00 2001 From: Kai Moritz Date: Thu, 21 Nov 2019 21:00:42 +0100 Subject: [PATCH 15/16] WIP: WebClient -- Syntax angeglichen --- ...ExchangeFilterFunctionIntegrationTest.java | 25 ++++++++----------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java b/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java index a9ba58c..27795f9 100644 --- a/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java +++ b/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java @@ -133,21 +133,18 @@ public class GraphApiExchangeFilterFunctionIntegrationTest public Mono errorHandlingFilter(ClientRequest request, ExchangeFunction next) { - return next.exchange(request).flatMap(response -> - { - if (response.statusCode() != null && (response.statusCode() - .is5xxServerError() || response.statusCode().is4xxClientError())) - { - return response.bodyToMono(String.class) - .flatMap(errorBody -> + return + next + .exchange(request) + .flatMap(response -> { - return Mono.error(GraphApiException.create(response.statusCode(), response.headers().asHttpHeaders(), errorBody.getBytes())); + return + HttpStatus.Series.CLIENT_ERROR.equals(response.statusCode().series()) + ? response.bodyToMono(String.class).flatMap(errorBody -> + { + return Mono.error(GraphApiException.create(response.statusCode(), response.headers().asHttpHeaders(), errorBody.getBytes())); + }) + : Mono.just(response); }); - } - else - { - return Mono.just(response); - } - }); } } -- 2.20.1 From d870be7a05e5de616bb3c551d3270d4b2d1c9530 Mon Sep 17 00:00:00 2001 From: Kai Moritz Date: Thu, 21 Nov 2019 21:02:47 +0100 Subject: [PATCH 16/16] WIP: WebClient -- Syntax vereinfacht --- .../GraphApiExchangeFilterFunctionIntegrationTest.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java b/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java index 27795f9..8614735 100644 --- a/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java +++ b/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java @@ -140,10 +140,12 @@ public class GraphApiExchangeFilterFunctionIntegrationTest { return HttpStatus.Series.CLIENT_ERROR.equals(response.statusCode().series()) - ? response.bodyToMono(String.class).flatMap(errorBody -> - { - return Mono.error(GraphApiException.create(response.statusCode(), response.headers().asHttpHeaders(), errorBody.getBytes())); - }) + ? response + .bodyToMono(String.class) + .flatMap(errorBody -> Mono.error(GraphApiException.create( + response.statusCode(), + response.headers().asHttpHeaders(), + errorBody.getBytes()))) : Mono.just(response); }); } -- 2.20.1