Wrap exceptions in WebClient
This commit makes sure that exceptions emitted by WebClient are wrapped by WebClientExceptions: - Exceptions emitted by the ClientHttpConnector are wrapped in a new WebClientRequestException. - Exceptions emitted after a response is received are wrapped in a WebClientResponseException Closes gh-23842
This commit is contained in:
@@ -40,7 +40,6 @@ import org.springframework.http.MediaType;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.http.client.reactive.ReactorClientHttpConnector;
|
||||
import org.springframework.http.client.reactive.ReactorResourceFactory;
|
||||
import org.springframework.web.reactive.function.UnsupportedMediaTypeException;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.junit.jupiter.api.TestInstance.Lifecycle.PER_CLASS;
|
||||
@@ -127,7 +126,7 @@ class WebClientDataBufferAllocatingTests extends AbstractDataBufferAllocatingTes
|
||||
.retrieve()
|
||||
.bodyToMono(new ParameterizedTypeReference<Map<String, String>>() {});
|
||||
|
||||
StepVerifier.create(mono).expectError(UnsupportedMediaTypeException.class).verify(Duration.ofSeconds(3));
|
||||
StepVerifier.create(mono).expectError(WebClientResponseException.class).verify(Duration.ofSeconds(3));
|
||||
assertThat(this.server.getRequestCount()).isEqualTo(1);
|
||||
}
|
||||
|
||||
|
||||
@@ -1013,7 +1013,12 @@ class WebClientIntegrationTests {
|
||||
Mono<ClientResponse> responseMono = WebClient.builder().build().get().uri(uri).exchange();
|
||||
|
||||
StepVerifier.create(responseMono)
|
||||
.expectErrorMessage("URI is not absolute: " + uri)
|
||||
.expectErrorSatisfies(throwable -> {
|
||||
assertThat(throwable).isInstanceOf(WebClientRequestException.class);
|
||||
WebClientRequestException ex = (WebClientRequestException) throwable;
|
||||
assertThat(ex.getMethod()).isEqualTo(HttpMethod.GET);
|
||||
assertThat(ex.getUri()).isEqualTo(URI.create(uri));
|
||||
})
|
||||
.verify(Duration.ofSeconds(5));
|
||||
}
|
||||
|
||||
@@ -1126,6 +1131,25 @@ class WebClientIntegrationTests {
|
||||
expectRequestCount(1);
|
||||
}
|
||||
|
||||
@ParameterizedWebClientTest
|
||||
void invalidDomain(ClientHttpConnector connector) {
|
||||
startServer(connector);
|
||||
|
||||
String url = "http://example.invalid";
|
||||
Mono<ClientResponse> result = this.webClient.get().
|
||||
uri(url)
|
||||
.exchange();
|
||||
|
||||
StepVerifier.create(result)
|
||||
.expectErrorSatisfies(throwable -> {
|
||||
assertThat(throwable).isInstanceOf(WebClientRequestException.class);
|
||||
WebClientRequestException ex = (WebClientRequestException) throwable;
|
||||
assertThat(ex.getMethod()).isEqualTo(HttpMethod.GET);
|
||||
assertThat(ex.getUri()).isEqualTo(URI.create(url));
|
||||
})
|
||||
.verify();
|
||||
}
|
||||
|
||||
|
||||
private void prepareResponse(Consumer<MockResponse> consumer) {
|
||||
MockResponse response = new MockResponse();
|
||||
|
||||
Reference in New Issue
Block a user