Refine HttpServiceGroupConfigurer API
Build and Deploy Snapshot / Build and Deploy Snapshot (push) Has been cancelled
Details
Deploy Docs / Dispatch docs deployment (push) Has been cancelled
Details
Build and Deploy Snapshot / Verify (push) Has been cancelled
Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:17], map[id:ubuntu-latest name:Linux]) (push) Has been cancelled
Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:21], map[id:ubuntu-latest name:Linux]) (push) Has been cancelled
Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:23], map[id:ubuntu-latest name:Linux]) (push) Has been cancelled
Details
Update Antora UI Spring / Update on Supported Branches (6.1.x) (push) Has been cancelled
Details
Update Antora UI Spring / Update on docs-build (push) Has been cancelled
Details
Build and Deploy Snapshot / Build and Deploy Snapshot (push) Has been cancelled
Details
Deploy Docs / Dispatch docs deployment (push) Has been cancelled
Details
Build and Deploy Snapshot / Verify (push) Has been cancelled
Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:false version:17], map[id:ubuntu-latest name:Linux]) (push) Has been cancelled
Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:21], map[id:ubuntu-latest name:Linux]) (push) Has been cancelled
Details
CI / ${{ matrix.os.name}} | Java ${{ matrix.java.version}} (map[toolchain:true version:23], map[id:ubuntu-latest name:Linux]) (push) Has been cancelled
Details
Update Antora UI Spring / Update on Supported Branches (6.1.x) (push) Has been cancelled
Details
Update Antora UI Spring / Update on docs-build (push) Has been cancelled
Details
Closes gh-34926
This commit is contained in:
parent
1ea8a91b85
commit
2e086bd727
|
|
@ -16,8 +16,6 @@
|
|||
|
||||
package org.springframework.web.service.registry;
|
||||
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
import org.springframework.core.Ordered;
|
||||
|
|
@ -66,29 +64,54 @@ public interface HttpServiceGroupConfigurer<CB> extends Ordered {
|
|||
Groups<CB> filter(Predicate<HttpServiceGroup> predicate);
|
||||
|
||||
/**
|
||||
* Configure the client for the selected groups.
|
||||
* This is called once for each selected group.
|
||||
* Configure the client of each {@link #filter(Predicate) filtered} group.
|
||||
*/
|
||||
void configureClient(Consumer<CB> clientConfigurer);
|
||||
void forEachClient(ForClient<CB> configurer);
|
||||
|
||||
/**
|
||||
* Variant of {@link #configureClient(Consumer)} with access to the
|
||||
* group being configured.
|
||||
* Configure the {@code HttpServiceProxyFactory} of each
|
||||
* {@link #filter(Predicate) filtered} group.
|
||||
*/
|
||||
void configureClient(BiConsumer<HttpServiceGroup, CB> clientConfigurer);
|
||||
void forEachProxyFactory(ForProxyFactory configurer);
|
||||
|
||||
/**
|
||||
* Configure the {@link HttpServiceProxyFactory} for the selected groups.
|
||||
* This is called once for each selected group.
|
||||
* Configure the client and the {@code HttpServiceProxyFactory} of each
|
||||
* {@link #filter(Predicate) filtered} group.
|
||||
*/
|
||||
void configureProxyFactory(BiConsumer<HttpServiceGroup, HttpServiceProxyFactory.Builder> proxyFactoryConfigurer);
|
||||
void forEachGroup(ForGroup<CB> groupConfigurer);
|
||||
}
|
||||
|
||||
/**
|
||||
* Configure the client and {@link HttpServiceProxyFactory} for the selected groups.
|
||||
* This is called once for each selected group.
|
||||
*/
|
||||
void configure(BiConsumer<HttpServiceGroup, CB> clientConfigurer,
|
||||
BiConsumer<HttpServiceGroup, HttpServiceProxyFactory.Builder> proxyFactoryConfigurer);
|
||||
|
||||
/**
|
||||
* Callback to configure the client for a group.
|
||||
* @param <CB> the type of client builder, i.e. {@code RestClient} or {@code WebClient} builder.
|
||||
*/
|
||||
@FunctionalInterface
|
||||
interface ForClient<CB> {
|
||||
|
||||
void configureClient(HttpServiceGroup group, CB clientBuilder);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Callback to configure the {@code HttpServiceProxyFactory} for a group.
|
||||
*/
|
||||
@FunctionalInterface
|
||||
interface ForProxyFactory {
|
||||
|
||||
void configureProxyFactory(HttpServiceGroup group, HttpServiceProxyFactory.Builder factoryBuilder);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Callback to configure the client and {@code HttpServiceProxyFactory} for a group.
|
||||
* @param <CB> the type of client builder, i.e. {@code RestClient} or {@code WebClient} builder.
|
||||
*/
|
||||
@FunctionalInterface
|
||||
interface ForGroup<CB> {
|
||||
|
||||
void configureGroup(HttpServiceGroup group,
|
||||
CB clientBuilder, HttpServiceProxyFactory.Builder factoryBuilder);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,8 +22,6 @@ import java.util.LinkedHashMap;
|
|||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
|
@ -166,7 +164,7 @@ public final class HttpServiceProxyRegistryFactoryBean
|
|||
|
||||
private final Object clientBuilder;
|
||||
|
||||
private BiConsumer<HttpServiceGroup, HttpServiceProxyFactory.Builder> proxyFactoryConfigurer = (group, builder) -> {};
|
||||
private final HttpServiceProxyFactory.Builder proxyFactoryBuilder = HttpServiceProxyFactory.builder();
|
||||
|
||||
ProxyHttpServiceGroup(HttpServiceGroup group) {
|
||||
this.declaredGroup = group;
|
||||
|
|
@ -196,20 +194,13 @@ public final class HttpServiceProxyRegistryFactoryBean
|
|||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public <CB> void apply(
|
||||
BiConsumer<HttpServiceGroup, CB> clientConfigurer,
|
||||
BiConsumer<HttpServiceGroup, HttpServiceProxyFactory.Builder> proxyFactoryConfigurer) {
|
||||
|
||||
clientConfigurer.accept(this, (CB) this.clientBuilder);
|
||||
this.proxyFactoryConfigurer = this.proxyFactoryConfigurer.andThen(proxyFactoryConfigurer);
|
||||
public <CB> void applyConfigurer(HttpServiceGroupConfigurer.ForGroup<CB> configurer) {
|
||||
configurer.configureGroup(this, (CB) this.clientBuilder, this.proxyFactoryBuilder);
|
||||
}
|
||||
|
||||
public Map<Class<?>, Object> createProxies() {
|
||||
Map<Class<?>, Object> map = new LinkedHashMap<>(httpServiceTypes().size());
|
||||
HttpExchangeAdapter exchangeAdapter = initExchangeAdapter();
|
||||
HttpServiceProxyFactory.Builder proxyFactoryBuilder = HttpServiceProxyFactory.builderFor(exchangeAdapter);
|
||||
this.proxyFactoryConfigurer.accept(this, proxyFactoryBuilder);
|
||||
HttpServiceProxyFactory factory = proxyFactoryBuilder.build();
|
||||
HttpServiceProxyFactory factory = this.proxyFactoryBuilder.exchangeAdapter(initExchangeAdapter()).build();
|
||||
httpServiceTypes().forEach(type -> map.put(type, factory.createClient(type)));
|
||||
return map;
|
||||
}
|
||||
|
|
@ -256,32 +247,21 @@ public final class HttpServiceProxyRegistryFactoryBean
|
|||
}
|
||||
|
||||
@Override
|
||||
public void configureClient(Consumer<CB> clientConfigurer) {
|
||||
configureClient((group, builder) -> clientConfigurer.accept(builder));
|
||||
public void forEachClient(HttpServiceGroupConfigurer.ForClient<CB> configurer) {
|
||||
forEachGroup((group, clientBuilder, factoryBuilder) ->
|
||||
configurer.configureClient(group, clientBuilder));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void configureClient(BiConsumer<HttpServiceGroup, CB> clientConfigurer) {
|
||||
configure(clientConfigurer, (group, builder) -> {});
|
||||
public void forEachProxyFactory(HttpServiceGroupConfigurer.ForProxyFactory configurer) {
|
||||
forEachGroup((group, clientBuilder, factoryBuilder) ->
|
||||
configurer.configureProxyFactory(group, factoryBuilder));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void configureProxyFactory(
|
||||
BiConsumer<HttpServiceGroup, HttpServiceProxyFactory.Builder> proxyFactoryConfigurer) {
|
||||
|
||||
configure((group, builder) -> {}, proxyFactoryConfigurer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void configure(
|
||||
BiConsumer<HttpServiceGroup, CB> clientConfigurer,
|
||||
BiConsumer<HttpServiceGroup, HttpServiceProxyFactory.Builder> proxyFactoryConfigurer) {
|
||||
|
||||
this.groups.stream().filter(this.filter)
|
||||
.forEach(group -> group.apply(clientConfigurer, proxyFactoryConfigurer));
|
||||
|
||||
// Reset filter
|
||||
this.filter = this.defaultFilter;
|
||||
public void forEachGroup(HttpServiceGroupConfigurer.ForGroup<CB> configurer) {
|
||||
this.groups.stream().filter(this.filter).forEach(group -> group.applyConfigurer(configurer));
|
||||
this.filter = this.defaultFilter; // reset the filter (terminal method)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -138,7 +138,7 @@ public class RestClientProxyRegistryIntegrationTests {
|
|||
@Bean
|
||||
public RestClientHttpServiceGroupConfigurer groupConfigurer() {
|
||||
return groups -> groups.filterByName("echo", "greeting")
|
||||
.configureClient((group, builder) -> builder.baseUrl("http://localhost:9090"));
|
||||
.forEachClient((group, builder) -> builder.baseUrl("http://localhost:9090"));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -92,7 +92,7 @@ public class HttpServiceProxyRegistryFactoryBeanTests {
|
|||
@Override
|
||||
public void configureGroups(Groups<RestClient.Builder> groups) {
|
||||
filters.forEach(filter -> groups.filter(filter)
|
||||
.configureClient((group, builder) -> invocations.add(filter, group.name())));
|
||||
.forEachClient((group, builder) -> invocations.add(filter, group.name())));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -119,7 +119,7 @@ public class WebClientProxyRegistryIntegrationTests {
|
|||
@Bean
|
||||
public WebClientHttpServiceGroupConfigurer groupConfigurer() {
|
||||
return groups -> groups.filterByName("echo", "greeting")
|
||||
.configureClient((group, builder) -> builder.baseUrl("http://localhost:9090"));
|
||||
.forEachClient((group, builder) -> builder.baseUrl("http://localhost:9090"));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue