Polishing and minor refactoring
See gh-25884
This commit is contained in:
@@ -65,11 +65,8 @@ public class MockServerHttpResponse extends AbstractServerHttpResponse {
|
||||
this.writeHandler = body -> {
|
||||
// Avoid .then() that causes data buffers to be discarded and released
|
||||
Sinks.Empty<Void> completion = Sinks.unsafe().empty();
|
||||
this.body = body
|
||||
.doOnComplete(completion::tryEmitEmpty) // Ignore error: cached + serialized
|
||||
.doOnError(completion::tryEmitError)
|
||||
.cache();
|
||||
this.body.subscribe();
|
||||
this.body = body.cache();
|
||||
this.body.subscribe(aVoid -> {}, completion::tryEmitError, completion::tryEmitEmpty); // Signals are serialized
|
||||
return completion.asMono();
|
||||
};
|
||||
}
|
||||
|
||||
@@ -83,8 +83,9 @@ public class HttpHandlerConnector implements ClientHttpConnector {
|
||||
private Mono<ClientHttpResponse> doConnect(
|
||||
HttpMethod httpMethod, URI uri, Function<? super ClientHttpRequest, Mono<Void>> requestCallback) {
|
||||
|
||||
Sinks.Empty<Void> requestWriteCompletion = Sinks.empty();
|
||||
Sinks.Empty<Void> handlerCompletion = Sinks.empty();
|
||||
// unsafe(): we're intercepting, already serialized Publisher signals
|
||||
Sinks.Empty<Void> requestWriteSink = Sinks.unsafe().empty();
|
||||
Sinks.Empty<Void> handlerSink = Sinks.unsafe().empty();
|
||||
ClientHttpResponse[] savedResponse = new ClientHttpResponse[1];
|
||||
|
||||
MockClientHttpRequest mockClientRequest = new MockClientHttpRequest(httpMethod, uri);
|
||||
@@ -96,8 +97,8 @@ public class HttpHandlerConnector implements ClientHttpConnector {
|
||||
ServerHttpResponse responseToUse = prepareResponse(mockServerResponse, mockServerRequest);
|
||||
this.handler.handle(mockServerRequest, responseToUse).subscribe(
|
||||
aVoid -> {},
|
||||
handlerCompletion::tryEmitError, // Ignore error: cached + serialized
|
||||
handlerCompletion::tryEmitEmpty);
|
||||
handlerSink::tryEmitError, // Ignore result: signals cannot compete
|
||||
handlerSink::tryEmitEmpty);
|
||||
return Mono.empty();
|
||||
});
|
||||
|
||||
@@ -110,10 +111,10 @@ public class HttpHandlerConnector implements ClientHttpConnector {
|
||||
log("Writing client request for ", httpMethod, uri);
|
||||
requestCallback.apply(mockClientRequest).subscribe(
|
||||
aVoid -> {},
|
||||
requestWriteCompletion::tryEmitError, // Ignore error: cached + serialized
|
||||
requestWriteCompletion::tryEmitEmpty);
|
||||
requestWriteSink::tryEmitError, // Ignore result: signals cannot compete
|
||||
requestWriteSink::tryEmitEmpty);
|
||||
|
||||
return Mono.when(requestWriteCompletion.asMono(), handlerCompletion.asMono())
|
||||
return Mono.when(requestWriteSink.asMono(), handlerSink.asMono())
|
||||
.onErrorMap(ex -> {
|
||||
ClientHttpResponse response = savedResponse[0];
|
||||
return response != null ? new FailureAfterResponseCompletedException(response, ex) : ex;
|
||||
|
||||
@@ -168,7 +168,6 @@ class WiretapConnector implements ClientHttpConnector {
|
||||
.doOnComplete(this::handleOnComplete) : null;
|
||||
|
||||
if (publisher == null && publisherNested == null) {
|
||||
// Ignore result: OK or not relevant
|
||||
this.content.tryEmitEmpty();
|
||||
}
|
||||
}
|
||||
@@ -206,14 +205,14 @@ class WiretapConnector implements ClientHttpConnector {
|
||||
|
||||
|
||||
private void handleOnError(Throwable ex) {
|
||||
// Ignore result: OK or not relevant
|
||||
// Ignore result: signals cannot compete
|
||||
this.content.tryEmitError(ex);
|
||||
}
|
||||
|
||||
private void handleOnComplete() {
|
||||
byte[] bytes = new byte[this.buffer.readableByteCount()];
|
||||
this.buffer.read(bytes);
|
||||
// Ignore result: OK or not relevant
|
||||
// Ignore result: signals cannot compete
|
||||
this.content.tryEmitValue(bytes);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user