Skip to content

Commit 2e086bd

Browse files
committed
Refine HttpServiceGroupConfigurer API
Closes gh-34926
1 parent 1ea8a91 commit 2e086bd

File tree

5 files changed

+56
-53
lines changed

5 files changed

+56
-53
lines changed

spring-web/src/main/java/org/springframework/web/service/registry/HttpServiceGroupConfigurer.java

Lines changed: 40 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@
1616

1717
package org.springframework.web.service.registry;
1818

19-
import java.util.function.BiConsumer;
20-
import java.util.function.Consumer;
2119
import java.util.function.Predicate;
2220

2321
import org.springframework.core.Ordered;
@@ -66,29 +64,54 @@ interface Groups<CB> {
6664
Groups<CB> filter(Predicate<HttpServiceGroup> predicate);
6765

6866
/**
69-
* Configure the client for the selected groups.
70-
* This is called once for each selected group.
67+
* Configure the client of each {@link #filter(Predicate) filtered} group.
7168
*/
72-
void configureClient(Consumer<CB> clientConfigurer);
69+
void forEachClient(ForClient<CB> configurer);
7370

7471
/**
75-
* Variant of {@link #configureClient(Consumer)} with access to the
76-
* group being configured.
72+
* Configure the {@code HttpServiceProxyFactory} of each
73+
* {@link #filter(Predicate) filtered} group.
7774
*/
78-
void configureClient(BiConsumer<HttpServiceGroup, CB> clientConfigurer);
75+
void forEachProxyFactory(ForProxyFactory configurer);
7976

8077
/**
81-
* Configure the {@link HttpServiceProxyFactory} for the selected groups.
82-
* This is called once for each selected group.
78+
* Configure the client and the {@code HttpServiceProxyFactory} of each
79+
* {@link #filter(Predicate) filtered} group.
8380
*/
84-
void configureProxyFactory(BiConsumer<HttpServiceGroup, HttpServiceProxyFactory.Builder> proxyFactoryConfigurer);
81+
void forEachGroup(ForGroup<CB> groupConfigurer);
82+
}
8583

86-
/**
87-
* Configure the client and {@link HttpServiceProxyFactory} for the selected groups.
88-
* This is called once for each selected group.
89-
*/
90-
void configure(BiConsumer<HttpServiceGroup, CB> clientConfigurer,
91-
BiConsumer<HttpServiceGroup, HttpServiceProxyFactory.Builder> proxyFactoryConfigurer);
84+
85+
/**
86+
* Callback to configure the client for a group.
87+
* @param <CB> the type of client builder, i.e. {@code RestClient} or {@code WebClient} builder.
88+
*/
89+
@FunctionalInterface
90+
interface ForClient<CB> {
91+
92+
void configureClient(HttpServiceGroup group, CB clientBuilder);
93+
}
94+
95+
96+
/**
97+
* Callback to configure the {@code HttpServiceProxyFactory} for a group.
98+
*/
99+
@FunctionalInterface
100+
interface ForProxyFactory {
101+
102+
void configureProxyFactory(HttpServiceGroup group, HttpServiceProxyFactory.Builder factoryBuilder);
103+
}
104+
105+
106+
/**
107+
* Callback to configure the client and {@code HttpServiceProxyFactory} for a group.
108+
* @param <CB> the type of client builder, i.e. {@code RestClient} or {@code WebClient} builder.
109+
*/
110+
@FunctionalInterface
111+
interface ForGroup<CB> {
112+
113+
void configureGroup(HttpServiceGroup group,
114+
CB clientBuilder, HttpServiceProxyFactory.Builder factoryBuilder);
92115
}
93116

94117
}

spring-web/src/main/java/org/springframework/web/service/registry/HttpServiceProxyRegistryFactoryBean.java

Lines changed: 13 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@
2222
import java.util.List;
2323
import java.util.Map;
2424
import java.util.Set;
25-
import java.util.function.BiConsumer;
26-
import java.util.function.Consumer;
2725
import java.util.function.Predicate;
2826
import java.util.stream.Collectors;
2927

@@ -166,7 +164,7 @@ private static final class ProxyHttpServiceGroup implements HttpServiceGroup {
166164

167165
private final Object clientBuilder;
168166

169-
private BiConsumer<HttpServiceGroup, HttpServiceProxyFactory.Builder> proxyFactoryConfigurer = (group, builder) -> {};
167+
private final HttpServiceProxyFactory.Builder proxyFactoryBuilder = HttpServiceProxyFactory.builder();
170168

171169
ProxyHttpServiceGroup(HttpServiceGroup group) {
172170
this.declaredGroup = group;
@@ -196,20 +194,13 @@ public ClientType clientType() {
196194
}
197195

198196
@SuppressWarnings("unchecked")
199-
public <CB> void apply(
200-
BiConsumer<HttpServiceGroup, CB> clientConfigurer,
201-
BiConsumer<HttpServiceGroup, HttpServiceProxyFactory.Builder> proxyFactoryConfigurer) {
202-
203-
clientConfigurer.accept(this, (CB) this.clientBuilder);
204-
this.proxyFactoryConfigurer = this.proxyFactoryConfigurer.andThen(proxyFactoryConfigurer);
197+
public <CB> void applyConfigurer(HttpServiceGroupConfigurer.ForGroup<CB> configurer) {
198+
configurer.configureGroup(this, (CB) this.clientBuilder, this.proxyFactoryBuilder);
205199
}
206200

207201
public Map<Class<?>, Object> createProxies() {
208202
Map<Class<?>, Object> map = new LinkedHashMap<>(httpServiceTypes().size());
209-
HttpExchangeAdapter exchangeAdapter = initExchangeAdapter();
210-
HttpServiceProxyFactory.Builder proxyFactoryBuilder = HttpServiceProxyFactory.builderFor(exchangeAdapter);
211-
this.proxyFactoryConfigurer.accept(this, proxyFactoryBuilder);
212-
HttpServiceProxyFactory factory = proxyFactoryBuilder.build();
203+
HttpServiceProxyFactory factory = this.proxyFactoryBuilder.exchangeAdapter(initExchangeAdapter()).build();
213204
httpServiceTypes().forEach(type -> map.put(type, factory.createClient(type)));
214205
return map;
215206
}
@@ -256,32 +247,21 @@ public HttpServiceGroupConfigurer.Groups<CB> filter(Predicate<HttpServiceGroup>
256247
}
257248

258249
@Override
259-
public void configureClient(Consumer<CB> clientConfigurer) {
260-
configureClient((group, builder) -> clientConfigurer.accept(builder));
261-
}
262-
263-
@Override
264-
public void configureClient(BiConsumer<HttpServiceGroup, CB> clientConfigurer) {
265-
configure(clientConfigurer, (group, builder) -> {});
250+
public void forEachClient(HttpServiceGroupConfigurer.ForClient<CB> configurer) {
251+
forEachGroup((group, clientBuilder, factoryBuilder) ->
252+
configurer.configureClient(group, clientBuilder));
266253
}
267254

268255
@Override
269-
public void configureProxyFactory(
270-
BiConsumer<HttpServiceGroup, HttpServiceProxyFactory.Builder> proxyFactoryConfigurer) {
271-
272-
configure((group, builder) -> {}, proxyFactoryConfigurer);
256+
public void forEachProxyFactory(HttpServiceGroupConfigurer.ForProxyFactory configurer) {
257+
forEachGroup((group, clientBuilder, factoryBuilder) ->
258+
configurer.configureProxyFactory(group, factoryBuilder));
273259
}
274260

275261
@Override
276-
public void configure(
277-
BiConsumer<HttpServiceGroup, CB> clientConfigurer,
278-
BiConsumer<HttpServiceGroup, HttpServiceProxyFactory.Builder> proxyFactoryConfigurer) {
279-
280-
this.groups.stream().filter(this.filter)
281-
.forEach(group -> group.apply(clientConfigurer, proxyFactoryConfigurer));
282-
283-
// Reset filter
284-
this.filter = this.defaultFilter;
262+
public void forEachGroup(HttpServiceGroupConfigurer.ForGroup<CB> configurer) {
263+
this.groups.stream().filter(this.filter).forEach(group -> group.applyConfigurer(configurer));
264+
this.filter = this.defaultFilter; // reset the filter (terminal method)
285265
}
286266
}
287267

spring-web/src/test/java/org/springframework/web/client/support/RestClientProxyRegistryIntegrationTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ private static class ClientConfig {
138138
@Bean
139139
public RestClientHttpServiceGroupConfigurer groupConfigurer() {
140140
return groups -> groups.filterByName("echo", "greeting")
141-
.configureClient((group, builder) -> builder.baseUrl("http://localhost:9090"));
141+
.forEachClient((group, builder) -> builder.baseUrl("http://localhost:9090"));
142142
}
143143
}
144144

spring-web/src/test/java/org/springframework/web/service/registry/HttpServiceProxyRegistryFactoryBeanTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ private static class TestConfigurer implements RestClientHttpServiceGroupConfigu
9292
@Override
9393
public void configureGroups(Groups<RestClient.Builder> groups) {
9494
filters.forEach(filter -> groups.filter(filter)
95-
.configureClient((group, builder) -> invocations.add(filter, group.name())));
95+
.forEachClient((group, builder) -> invocations.add(filter, group.name())));
9696
}
9797
}
9898

spring-webflux/src/test/java/org/springframework/web/reactive/function/client/support/WebClientProxyRegistryIntegrationTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ private static class BaseEchoConfig {
119119
@Bean
120120
public WebClientHttpServiceGroupConfigurer groupConfigurer() {
121121
return groups -> groups.filterByName("echo", "greeting")
122-
.configureClient((group, builder) -> builder.baseUrl("http://localhost:9090"));
122+
.forEachClient((group, builder) -> builder.baseUrl("http://localhost:9090"));
123123
}
124124
}
125125

0 commit comments

Comments
 (0)