Add HttpClientTransport factory support

Update `JettyClientHttpRequestFactoryBuilder` and
`JettyClientHttpConnectorBuilder` with support for create the
`HttpClientTransport` from a factory function.

Closes gh-47251
This commit is contained in:
Phillip Webb
2025-09-18 14:02:18 -07:00
parent b01dc92233
commit 255ea92a57
5 changed files with 105 additions and 7 deletions
@@ -18,12 +18,15 @@ package org.springframework.boot.http.client;
import org.eclipse.jetty.client.HttpClient;
import org.eclipse.jetty.client.HttpClientTransport;
import org.eclipse.jetty.client.transport.HttpClientTransportOverHTTP;
import org.eclipse.jetty.io.ClientConnector;
import org.junit.jupiter.api.Test;
import org.springframework.http.client.JettyClientHttpRequestFactory;
import org.springframework.test.util.ReflectionTestUtils;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Tests for {@link JettyClientHttpRequestFactoryBuilder} and
* {@link JettyHttpClientBuilder}.
@@ -62,6 +65,16 @@ class JettyClientHttpRequestFactoryBuilderTests
customizer.assertCalled();
}
@Test
void withHttpClientTransportFactory() {
JettyClientHttpRequestFactory factory = ClientHttpRequestFactoryBuilder.jetty()
.withHttpClientTransportFactory(TestHttpClientTransport::new)
.build();
assertThat(factory).extracting("httpClient")
.extracting("transport")
.isInstanceOf(TestHttpClientTransport.class);
}
@Override
protected long connectTimeout(JettyClientHttpRequestFactory requestFactory) {
return ((HttpClient) ReflectionTestUtils.getField(requestFactory, "httpClient")).getConnectTimeout();
@@ -72,4 +85,12 @@ class JettyClientHttpRequestFactoryBuilderTests
return (long) ReflectionTestUtils.getField(requestFactory, "readTimeout");
}
static class TestHttpClientTransport extends HttpClientTransportOverHTTP {
TestHttpClientTransport(ClientConnector connector) {
super(connector);
}
}
}
@@ -20,6 +20,7 @@ import java.time.Duration;
import org.eclipse.jetty.client.HttpClient;
import org.eclipse.jetty.client.HttpClientTransport;
import org.eclipse.jetty.client.transport.HttpClientTransportOverHTTP;
import org.eclipse.jetty.io.ClientConnector;
import org.junit.jupiter.api.Test;
@@ -27,6 +28,8 @@ import org.springframework.boot.http.client.JettyHttpClientBuilder;
import org.springframework.http.client.reactive.JettyClientHttpConnector;
import org.springframework.test.util.ReflectionTestUtils;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Tests for {@link JettyClientHttpConnectorBuilder} and {@link JettyHttpClientBuilder}.
*
@@ -63,6 +66,16 @@ class JettyClientHttpConnectorBuilderTests extends AbstractClientHttpConnectorBu
customizer.assertCalled();
}
@Test
void withHttpClientTransportFactory() {
JettyClientHttpConnector connector = ClientHttpConnectorBuilder.jetty()
.withHttpClientTransportFactory(TestHttpClientTransport::new)
.build();
assertThat(connector).extracting("httpClient")
.extracting("transport")
.isInstanceOf(TestHttpClientTransport.class);
}
@Override
protected long connectTimeout(JettyClientHttpConnector connector) {
return ((HttpClient) ReflectionTestUtils.getField(connector, "httpClient")).getConnectTimeout();
@@ -74,4 +87,12 @@ class JettyClientHttpConnectorBuilderTests extends AbstractClientHttpConnectorBu
return ((Duration) ReflectionTestUtils.getField(httpClient, "readTimeout")).toMillis();
}
static class TestHttpClientTransport extends HttpClientTransportOverHTTP {
TestHttpClientTransport(ClientConnector connector) {
super(connector);
}
}
}