Skip to content

Commit 4db1eb1

Browse files
committed
Polish
1 parent 44786ff commit 4db1eb1

File tree

5 files changed

+37
-36
lines changed

5 files changed

+37
-36
lines changed

spring-test/src/main/java/org/springframework/test/web/reactive/server/AbstractMockServerSpec.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,19 +35,19 @@
3535
abstract class AbstractMockServerSpec<B extends WebTestClient.MockServerSpec<B>>
3636
implements WebTestClient.MockServerSpec<B> {
3737

38-
private final ExchangeMutatorWebFilter exchangeMutatorFilter = new ExchangeMutatorWebFilter();
38+
private final ExchangeMutatingWebFilter exchangeMutatingWebFilter = new ExchangeMutatingWebFilter();
3939

4040
private final List<WebFilter> filters = new ArrayList<>(4);
4141

4242

4343
AbstractMockServerSpec() {
44-
this.filters.add(this.exchangeMutatorFilter);
44+
this.filters.add(this.exchangeMutatingWebFilter);
4545
}
4646

4747

4848
@Override
4949
public <T extends B> T exchangeMutator(UnaryOperator<ServerWebExchange> mutator) {
50-
this.exchangeMutatorFilter.register(mutator);
50+
this.exchangeMutatingWebFilter.registerGlobalMutator(mutator);
5151
return self();
5252
}
5353

@@ -67,7 +67,7 @@ private <T extends B> T self() {
6767
public WebTestClient.Builder configureClient() {
6868
WebHttpHandlerBuilder builder = initHttpHandlerBuilder();
6969
filtersInReverse().forEach(builder::prependFilter);
70-
return new DefaultWebTestClientBuilder(builder.build(), this.exchangeMutatorFilter);
70+
return new DefaultWebTestClientBuilder(builder.build(), this.exchangeMutatingWebFilter);
7171
}
7272

7373
/**

spring-test/src/main/java/org/springframework/test/web/reactive/server/DefaultWebTestClient.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -69,28 +69,28 @@ class DefaultWebTestClient implements WebTestClient {
6969

7070
private final WiretapConnector wiretapConnector;
7171

72-
private final ExchangeMutatorWebFilter exchangeMutatorWebFilter;
72+
private final ExchangeMutatingWebFilter exchangeMutatingWebFilter;
7373

7474
private final Duration timeout;
7575

7676
private final AtomicLong requestIndex = new AtomicLong();
7777

7878

7979
DefaultWebTestClient(WebClient.Builder webClientBuilder, ClientHttpConnector connector,
80-
ExchangeMutatorWebFilter webFilter, Duration timeout) {
80+
ExchangeMutatingWebFilter exchangeMutatingWebFilter, Duration timeout) {
8181

8282
Assert.notNull(webClientBuilder, "WebClient.Builder is required");
8383

8484
this.wiretapConnector = new WiretapConnector(connector);
8585
this.webClient = webClientBuilder.clientConnector(this.wiretapConnector).build();
86-
this.exchangeMutatorWebFilter = webFilter;
86+
this.exchangeMutatingWebFilter = exchangeMutatingWebFilter;
8787
this.timeout = (timeout != null ? timeout : Duration.ofSeconds(5));
8888
}
8989

9090
private DefaultWebTestClient(DefaultWebTestClient webTestClient, ExchangeFilterFunction filter) {
9191
this.webClient = webTestClient.webClient.filter(filter);
9292
this.wiretapConnector = webTestClient.wiretapConnector;
93-
this.exchangeMutatorWebFilter = webTestClient.exchangeMutatorWebFilter;
93+
this.exchangeMutatingWebFilter = webTestClient.exchangeMutatingWebFilter;
9494
this.timeout = webTestClient.timeout;
9595
}
9696

@@ -150,13 +150,13 @@ public WebTestClient filter(ExchangeFilterFunction filter) {
150150
@Override
151151
public WebTestClient exchangeMutator(UnaryOperator<ServerWebExchange> mutator) {
152152

153-
Assert.notNull(this.exchangeMutatorWebFilter,
153+
Assert.notNull(this.exchangeMutatingWebFilter,
154154
"This option is applicable only for tests without an actual running server");
155155

156156
return filter((request, next) -> {
157157
String requestId = request.headers().getFirst(WiretapConnector.REQUEST_ID_HEADER_NAME);
158158
Assert.notNull(requestId, "No request-id header");
159-
this.exchangeMutatorWebFilter.register(requestId, mutator);
159+
this.exchangeMutatingWebFilter.registerPerRequestMutator(requestId, mutator);
160160
return next.exchange(request);
161161
});
162162
}

spring-test/src/main/java/org/springframework/test/web/reactive/server/DefaultWebTestClientBuilder.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class DefaultWebTestClientBuilder implements WebTestClient.Builder {
3737

3838
private final ClientHttpConnector connector;
3939

40-
private final ExchangeMutatorWebFilter exchangeMutatorFilter;
40+
private final ExchangeMutatingWebFilter exchangeMutatingWebFilter;
4141

4242
private Duration responseTimeout;
4343

@@ -48,12 +48,12 @@ class DefaultWebTestClientBuilder implements WebTestClient.Builder {
4848

4949
DefaultWebTestClientBuilder(ClientHttpConnector connector) {
5050
this.connector = connector;
51-
this.exchangeMutatorFilter = null;
51+
this.exchangeMutatingWebFilter = null;
5252
}
5353

54-
DefaultWebTestClientBuilder(HttpHandler httpHandler, ExchangeMutatorWebFilter exchangeMutatorFilter) {
54+
DefaultWebTestClientBuilder(HttpHandler httpHandler, ExchangeMutatingWebFilter exchangeMutatingWebFilter) {
5555
this.connector = new HttpHandlerConnector(httpHandler);
56-
this.exchangeMutatorFilter = exchangeMutatorFilter;
56+
this.exchangeMutatingWebFilter = exchangeMutatingWebFilter;
5757
}
5858

5959

@@ -96,7 +96,7 @@ public WebTestClient.Builder responseTimeout(Duration timeout) {
9696
@Override
9797
public WebTestClient build() {
9898
return new DefaultWebTestClient(this.webClientBuilder, this.connector,
99-
this.exchangeMutatorFilter, this.responseTimeout);
99+
this.exchangeMutatingWebFilter, this.responseTimeout);
100100
}
101101

102102
}

spring-test/src/main/java/org/springframework/test/web/reactive/server/ExchangeMutatorWebFilter.java renamed to spring-test/src/main/java/org/springframework/test/web/reactive/server/ExchangeMutatingWebFilter.java

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,18 @@
2929
import org.springframework.web.server.WebFilterChain;
3030

3131
/**
32-
* WebFilter that applies global and request-specific transformation on
32+
* WebFilter for applying global and per-request transformations to a
3333
* {@link ServerWebExchange}.
3434
*
3535
* @author Rossen Stoyanchev
3636
* @since 5.0
3737
*/
38-
class ExchangeMutatorWebFilter implements WebFilter {
38+
class ExchangeMutatingWebFilter implements WebFilter {
3939

40-
private volatile Function<ServerWebExchange, ServerWebExchange> globalMutator;
40+
private static final Function<ServerWebExchange, ServerWebExchange> NO_OP_MUTATOR = e -> e;
41+
42+
43+
private volatile Function<ServerWebExchange, ServerWebExchange> globalMutator = NO_OP_MUTATOR;
4144

4245
private final Map<String, Function<ServerWebExchange, ServerWebExchange>> perRequestMutators =
4346
new ConcurrentHashMap<>(4);
@@ -47,36 +50,33 @@ class ExchangeMutatorWebFilter implements WebFilter {
4750
* Register a global transformation function to apply to all requests.
4851
* @param mutator the transformation function
4952
*/
50-
public void register(UnaryOperator<ServerWebExchange> mutator) {
53+
public void registerGlobalMutator(UnaryOperator<ServerWebExchange> mutator) {
5154
Assert.notNull(mutator, "'mutator' is required");
52-
this.globalMutator = this.globalMutator != null ? this.globalMutator.andThen(mutator) : mutator;
55+
this.globalMutator = this.globalMutator.andThen(mutator);
5356
}
5457

5558
/**
5659
* Register a per-request transformation function.
5760
* @param requestId the "request-id" header value identifying the request
5861
* @param mutator the transformation function
5962
*/
60-
public void register(String requestId, UnaryOperator<ServerWebExchange> mutator) {
63+
public void registerPerRequestMutator(String requestId, UnaryOperator<ServerWebExchange> mutator) {
6164
this.perRequestMutators.compute(requestId,
6265
(s, value) -> value != null ? value.andThen(mutator) : mutator);
6366
}
6467

6568

6669
@Override
6770
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
68-
69-
if (this.globalMutator != null) {
70-
exchange = this.globalMutator.apply(exchange);
71-
}
72-
73-
String requestId = WiretapConnector.getRequestId(exchange.getRequest().getHeaders());
74-
Function<ServerWebExchange, ServerWebExchange> mutator = this.perRequestMutators.remove(requestId);
75-
if (mutator != null) {
76-
exchange = mutator.apply(exchange);
77-
}
78-
71+
exchange = this.globalMutator.apply(exchange);
72+
exchange = getMutatorFor(exchange).apply(exchange);
7973
return chain.filter(exchange);
8074
}
8175

76+
private Function<ServerWebExchange, ServerWebExchange> getMutatorFor(ServerWebExchange exchange) {
77+
String id = WiretapConnector.getRequestId(exchange.getRequest().getHeaders());
78+
Function<ServerWebExchange, ServerWebExchange> mutator = this.perRequestMutators.remove(id);
79+
return mutator != null ? mutator : NO_OP_MUTATOR;
80+
}
81+
8282
}

spring-webflux/src/main/java/org/springframework/web/reactive/function/client/WebClient.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -375,22 +375,23 @@ interface RequestHeadersSpec<S extends RequestHeadersSpec<S>> {
375375
* Exchange the request for a {@code ClientResponse} with full access
376376
* to the response status and headers before extracting the body.
377377
*
378-
* <p>Use {@link Mono#then(Function)} or {@link Mono#flatMap(Function)}
379-
* to compose further on the response:
378+
* <p>Use {@link Mono#flatMap(Function)} or
379+
* {@link Mono#flatMapMany(Function)} to compose further on the response:
380380
*
381381
* <pre>
382382
* Mono&lt;Pojo&gt; mono = client.get().uri("/")
383383
* .accept(MediaType.APPLICATION_JSON)
384384
* .exchange()
385-
* .then(response -> response.bodyToMono(Pojo.class));
385+
* .flatMap(response -> response.bodyToMono(Pojo.class));
386386
*
387387
* Flux&lt;Pojo&gt; flux = client.get().uri("/")
388388
* .accept(MediaType.APPLICATION_STREAM_JSON)
389389
* .exchange()
390-
* .then(response -> response.bodyToFlux(Pojo.class));
390+
* .flatMapMany(response -> response.bodyToFlux(Pojo.class));
391391
* </pre>
392392
*
393393
* @return a {@code Mono} with the response
394+
* @see #retrieve()
394395
*/
395396
Mono<ClientResponse> exchange();
396397

0 commit comments

Comments
 (0)