Replaced deprecated functionality
This commit is contained in:
parent
0b4e653eda
commit
10e8a7acbc
|
@ -97,6 +97,10 @@ public class TestAsyncClient extends CloseableHttpAsyncClient {
|
||||||
return client.execute(target, requestProducer, responseConsumer, pushHandlerFactory, context, callback);
|
return client.execute(target, requestProducer, responseConsumer, pushHandlerFactory, context, callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated Do not use.
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
@Override
|
@Override
|
||||||
public void register(final String hostname,
|
public void register(final String hostname,
|
||||||
final String uriPattern,
|
final String uriPattern,
|
||||||
|
|
|
@ -108,9 +108,9 @@ public class TestServerBootstrap {
|
||||||
.build());
|
.build());
|
||||||
for (final HandlerEntry<HttpRequestHandler> entry: handlerList) {
|
for (final HandlerEntry<HttpRequestHandler> entry: handlerList) {
|
||||||
if (entry.hostname != null) {
|
if (entry.hostname != null) {
|
||||||
server.registerHandlerVirtual(entry.hostname, entry.uriPattern, entry.handler);
|
server.register(entry.hostname, entry.uriPattern, entry.handler);
|
||||||
} else {
|
} else {
|
||||||
server.registerHandler(entry.uriPattern, entry.handler);
|
server.register(entry.uriPattern, entry.handler);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return new TestServer(
|
return new TestServer(
|
||||||
|
|
|
@ -70,6 +70,11 @@ abstract class AbstractHttpAsyncClientBase extends CloseableHttpAsyncClient {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated Use {@link org.apache.hc.core5.http.impl.routing.RequestRouter}
|
||||||
|
* at the construction time
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
@Override
|
@Override
|
||||||
public void register(final String hostname, final String uriPattern, final Supplier<AsyncPushConsumer> supplier) {
|
public void register(final String hostname, final String uriPattern, final Supplier<AsyncPushConsumer> supplier) {
|
||||||
pushConsumerRegistry.register(hostname, uriPattern, supplier);
|
pushConsumerRegistry.register(hostname, uriPattern, supplier);
|
||||||
|
|
|
@ -34,25 +34,25 @@ import java.util.concurrent.ConcurrentMap;
|
||||||
import org.apache.hc.core5.function.Supplier;
|
import org.apache.hc.core5.function.Supplier;
|
||||||
import org.apache.hc.core5.http.HttpRequest;
|
import org.apache.hc.core5.http.HttpRequest;
|
||||||
import org.apache.hc.core5.http.nio.AsyncPushConsumer;
|
import org.apache.hc.core5.http.nio.AsyncPushConsumer;
|
||||||
import org.apache.hc.core5.http.protocol.UriPatternMatcher;
|
|
||||||
import org.apache.hc.core5.net.URIAuthority;
|
import org.apache.hc.core5.net.URIAuthority;
|
||||||
import org.apache.hc.core5.util.Args;
|
import org.apache.hc.core5.util.Args;
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
class AsyncPushConsumerRegistry {
|
class AsyncPushConsumerRegistry {
|
||||||
|
|
||||||
private final UriPatternMatcher<Supplier<AsyncPushConsumer>> primary;
|
private final org.apache.hc.core5.http.protocol.UriPatternMatcher<Supplier<AsyncPushConsumer>> primary;
|
||||||
private final ConcurrentMap<String, UriPatternMatcher<Supplier<AsyncPushConsumer>>> hostMap;
|
private final ConcurrentMap<String, org.apache.hc.core5.http.protocol.UriPatternMatcher<Supplier<AsyncPushConsumer>>> hostMap;
|
||||||
|
|
||||||
public AsyncPushConsumerRegistry() {
|
public AsyncPushConsumerRegistry() {
|
||||||
this.primary = new UriPatternMatcher<>();
|
this.primary = new org.apache.hc.core5.http.protocol.UriPatternMatcher<>();
|
||||||
this.hostMap = new ConcurrentHashMap<>();
|
this.hostMap = new ConcurrentHashMap<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
private UriPatternMatcher<Supplier<AsyncPushConsumer>> getPatternMatcher(final String hostname) {
|
private org.apache.hc.core5.http.protocol.UriPatternMatcher<Supplier<AsyncPushConsumer>> getPatternMatcher(final String hostname) {
|
||||||
if (hostname == null) {
|
if (hostname == null) {
|
||||||
return primary;
|
return primary;
|
||||||
}
|
}
|
||||||
final UriPatternMatcher<Supplier<AsyncPushConsumer>> hostMatcher = hostMap.get(hostname);
|
final org.apache.hc.core5.http.protocol.UriPatternMatcher<Supplier<AsyncPushConsumer>> hostMatcher = hostMap.get(hostname);
|
||||||
if (hostMatcher != null) {
|
if (hostMatcher != null) {
|
||||||
return hostMatcher;
|
return hostMatcher;
|
||||||
}
|
}
|
||||||
|
@ -63,7 +63,7 @@ class AsyncPushConsumerRegistry {
|
||||||
Args.notNull(request, "Request");
|
Args.notNull(request, "Request");
|
||||||
final URIAuthority authority = request.getAuthority();
|
final URIAuthority authority = request.getAuthority();
|
||||||
final String key = authority != null ? authority.getHostName().toLowerCase(Locale.ROOT) : null;
|
final String key = authority != null ? authority.getHostName().toLowerCase(Locale.ROOT) : null;
|
||||||
final UriPatternMatcher<Supplier<AsyncPushConsumer>> patternMatcher = getPatternMatcher(key);
|
final org.apache.hc.core5.http.protocol.UriPatternMatcher<Supplier<AsyncPushConsumer>> patternMatcher = getPatternMatcher(key);
|
||||||
if (patternMatcher == null) {
|
if (patternMatcher == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -83,9 +83,9 @@ class AsyncPushConsumerRegistry {
|
||||||
primary.register(uriPattern, supplier);
|
primary.register(uriPattern, supplier);
|
||||||
} else {
|
} else {
|
||||||
final String key = hostname.toLowerCase(Locale.ROOT);
|
final String key = hostname.toLowerCase(Locale.ROOT);
|
||||||
UriPatternMatcher<Supplier<AsyncPushConsumer>> matcher = hostMap.get(key);
|
org.apache.hc.core5.http.protocol.UriPatternMatcher<Supplier<AsyncPushConsumer>> matcher = hostMap.get(key);
|
||||||
if (matcher == null) {
|
if (matcher == null) {
|
||||||
final UriPatternMatcher<Supplier<AsyncPushConsumer>> newMatcher = new UriPatternMatcher<>();
|
final org.apache.hc.core5.http.protocol.UriPatternMatcher<Supplier<AsyncPushConsumer>> newMatcher = new org.apache.hc.core5.http.protocol.UriPatternMatcher<>();
|
||||||
matcher = hostMap.putIfAbsent(key, newMatcher);
|
matcher = hostMap.putIfAbsent(key, newMatcher);
|
||||||
if (matcher == null) {
|
if (matcher == null) {
|
||||||
matcher = newMatcher;
|
matcher = newMatcher;
|
||||||
|
|
|
@ -129,8 +129,18 @@ public abstract class CloseableHttpAsyncClient implements HttpAsyncClient, Modal
|
||||||
return execute(request, null, callback);
|
return execute(request, null, callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated Use {@link org.apache.hc.core5.http.impl.routing.RequestRouter}
|
||||||
|
* at the construction time
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
public abstract void register(String hostname, String uriPattern, Supplier<AsyncPushConsumer> supplier);
|
public abstract void register(String hostname, String uriPattern, Supplier<AsyncPushConsumer> supplier);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated Use {@link org.apache.hc.core5.http.impl.routing.RequestRouter}
|
||||||
|
* at the construction time
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
public final void register(final String uriPattern, final Supplier<AsyncPushConsumer> supplier) {
|
public final void register(final String uriPattern, final Supplier<AsyncPushConsumer> supplier) {
|
||||||
register(null, uriPattern, supplier);
|
register(null, uriPattern, supplier);
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,8 +37,12 @@ import org.apache.hc.client5.http.impl.nio.PoolingAsyncClientConnectionManagerBu
|
||||||
import org.apache.hc.client5.http.nio.AsyncClientConnectionManager;
|
import org.apache.hc.client5.http.nio.AsyncClientConnectionManager;
|
||||||
import org.apache.hc.client5.http.ssl.DefaultClientTlsStrategy;
|
import org.apache.hc.client5.http.ssl.DefaultClientTlsStrategy;
|
||||||
import org.apache.hc.core5.concurrent.DefaultThreadFactory;
|
import org.apache.hc.core5.concurrent.DefaultThreadFactory;
|
||||||
|
import org.apache.hc.core5.function.Supplier;
|
||||||
import org.apache.hc.core5.http.config.CharCodingConfig;
|
import org.apache.hc.core5.http.config.CharCodingConfig;
|
||||||
import org.apache.hc.core5.http.config.Http1Config;
|
import org.apache.hc.core5.http.config.Http1Config;
|
||||||
|
import org.apache.hc.core5.http.impl.routing.RequestRouter;
|
||||||
|
import org.apache.hc.core5.http.nio.AsyncPushConsumer;
|
||||||
|
import org.apache.hc.core5.http.nio.HandlerFactory;
|
||||||
import org.apache.hc.core5.http.nio.ssl.TlsStrategy;
|
import org.apache.hc.core5.http.nio.ssl.TlsStrategy;
|
||||||
import org.apache.hc.core5.http.protocol.DefaultHttpProcessor;
|
import org.apache.hc.core5.http.protocol.DefaultHttpProcessor;
|
||||||
import org.apache.hc.core5.http.protocol.HttpProcessor;
|
import org.apache.hc.core5.http.protocol.HttpProcessor;
|
||||||
|
@ -333,4 +337,16 @@ public final class HttpAsyncClients {
|
||||||
return createHttp2Minimal(H2Config.DEFAULT);
|
return createHttp2Minimal(H2Config.DEFAULT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates {@link HandlerFactory} backed by a push {@link RequestRouter}.
|
||||||
|
*
|
||||||
|
* @since 5.4
|
||||||
|
*/
|
||||||
|
public static HandlerFactory<AsyncPushConsumer> pushRouter(final RequestRouter<Supplier<AsyncPushConsumer>> requestRouter) {
|
||||||
|
return (request, context) -> {
|
||||||
|
final Supplier<AsyncPushConsumer> supplier = requestRouter.resolve(request, context);
|
||||||
|
return supplier != null ? supplier.get() : null;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -101,7 +101,7 @@ public class BasicDomainHandler implements CommonCookieAttributeHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
static boolean domainMatch(final String domain, final String host) {
|
static boolean domainMatch(final String domain, final String host) {
|
||||||
if (InetAddressUtils.isIPv4Address(host) || InetAddressUtils.isIPv6Address(host)) {
|
if (InetAddressUtils.isIPv4(host) || InetAddressUtils.isIPv6(host)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
final String normalizedDomain = domain.startsWith(".") ? domain.substring(1) : domain;
|
final String normalizedDomain = domain.startsWith(".") ? domain.substring(1) : domain;
|
||||||
|
|
|
@ -273,14 +273,14 @@ public final class DefaultHostnameVerifier implements HttpClientHostnameVerifier
|
||||||
}
|
}
|
||||||
|
|
||||||
static HostNameType determineHostFormat(final String host) {
|
static HostNameType determineHostFormat(final String host) {
|
||||||
if (InetAddressUtils.isIPv4Address(host)) {
|
if (InetAddressUtils.isIPv4(host)) {
|
||||||
return HostNameType.IPv4;
|
return HostNameType.IPv4;
|
||||||
}
|
}
|
||||||
String s = host;
|
String s = host;
|
||||||
if (s.startsWith("[") && s.endsWith("]")) {
|
if (s.startsWith("[") && s.endsWith("]")) {
|
||||||
s = host.substring(1, host.length() - 1);
|
s = host.substring(1, host.length() - 1);
|
||||||
}
|
}
|
||||||
if (InetAddressUtils.isIPv6Address(s)) {
|
if (InetAddressUtils.isIPv6(s)) {
|
||||||
return HostNameType.IPv6;
|
return HostNameType.IPv6;
|
||||||
}
|
}
|
||||||
return HostNameType.DNS;
|
return HostNameType.DNS;
|
||||||
|
|
|
@ -37,12 +37,15 @@ import org.apache.hc.client5.http.config.TlsConfig;
|
||||||
import org.apache.hc.client5.http.impl.async.CloseableHttpAsyncClient;
|
import org.apache.hc.client5.http.impl.async.CloseableHttpAsyncClient;
|
||||||
import org.apache.hc.client5.http.impl.async.HttpAsyncClients;
|
import org.apache.hc.client5.http.impl.async.HttpAsyncClients;
|
||||||
import org.apache.hc.client5.http.impl.nio.PoolingAsyncClientConnectionManagerBuilder;
|
import org.apache.hc.client5.http.impl.nio.PoolingAsyncClientConnectionManagerBuilder;
|
||||||
|
import org.apache.hc.core5.function.Supplier;
|
||||||
import org.apache.hc.core5.http.ContentType;
|
import org.apache.hc.core5.http.ContentType;
|
||||||
import org.apache.hc.core5.http.HttpException;
|
import org.apache.hc.core5.http.HttpException;
|
||||||
import org.apache.hc.core5.http.HttpRequest;
|
import org.apache.hc.core5.http.HttpRequest;
|
||||||
import org.apache.hc.core5.http.HttpResponse;
|
import org.apache.hc.core5.http.HttpResponse;
|
||||||
|
import org.apache.hc.core5.http.impl.routing.RequestRouter;
|
||||||
import org.apache.hc.core5.http.message.BasicHttpRequest;
|
import org.apache.hc.core5.http.message.BasicHttpRequest;
|
||||||
import org.apache.hc.core5.http.message.StatusLine;
|
import org.apache.hc.core5.http.message.StatusLine;
|
||||||
|
import org.apache.hc.core5.http.nio.AsyncPushConsumer;
|
||||||
import org.apache.hc.core5.http.nio.support.BasicRequestProducer;
|
import org.apache.hc.core5.http.nio.support.BasicRequestProducer;
|
||||||
import org.apache.hc.core5.http.support.BasicRequestBuilder;
|
import org.apache.hc.core5.http.support.BasicRequestBuilder;
|
||||||
import org.apache.hc.core5.http2.HttpVersionPolicy;
|
import org.apache.hc.core5.http2.HttpVersionPolicy;
|
||||||
|
@ -69,39 +72,44 @@ public class AsyncClientH2ServerPush {
|
||||||
|
|
||||||
client.start();
|
client.start();
|
||||||
|
|
||||||
client.register("*", () -> new AbstractBinPushConsumer() {
|
final RequestRouter<Supplier<AsyncPushConsumer>> pushRequestRouter = RequestRouter.<Supplier<AsyncPushConsumer>>builder()
|
||||||
|
// Route all requests to the local authority
|
||||||
|
.resolveAuthority(RequestRouter.LOCAL_AUTHORITY_RESOLVER)
|
||||||
|
// Use the same route for all requests
|
||||||
|
.addRoute(RequestRouter.LOCAL_AUTHORITY, "*", () -> new AbstractBinPushConsumer() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void start(
|
protected void start(
|
||||||
final HttpRequest promise,
|
final HttpRequest promise,
|
||||||
final HttpResponse response,
|
final HttpResponse response,
|
||||||
final ContentType contentType) throws HttpException, IOException {
|
final ContentType contentType) throws HttpException, IOException {
|
||||||
System.out.println(promise.getPath() + " (push)->" + new StatusLine(response));
|
System.out.println(promise.getPath() + " (push)->" + new StatusLine(response));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected int capacityIncrement() {
|
protected int capacityIncrement() {
|
||||||
return Integer.MAX_VALUE;
|
return Integer.MAX_VALUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void data(final ByteBuffer data, final boolean endOfStream) throws IOException {
|
protected void data(final ByteBuffer data, final boolean endOfStream) throws IOException {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void completed() {
|
protected void completed() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void failed(final Exception cause) {
|
public void failed(final Exception cause) {
|
||||||
System.out.println("(push)->" + cause);
|
System.out.println("(push)->" + cause);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void releaseResources() {
|
public void releaseResources() {
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
})
|
||||||
|
.build();
|
||||||
|
|
||||||
final BasicHttpRequest request = BasicRequestBuilder.get("https://nghttp2.org/httpbin/").build();
|
final BasicHttpRequest request = BasicRequestBuilder.get("https://nghttp2.org/httpbin/").build();
|
||||||
|
|
||||||
|
@ -140,7 +148,10 @@ public class AsyncClientH2ServerPush {
|
||||||
public void releaseResources() {
|
public void releaseResources() {
|
||||||
}
|
}
|
||||||
|
|
||||||
}, null);
|
},
|
||||||
|
HttpAsyncClients.pushRouter(pushRequestRouter),
|
||||||
|
null,
|
||||||
|
null);
|
||||||
future.get();
|
future.get();
|
||||||
|
|
||||||
System.out.println("Shutting down");
|
System.out.println("Shutting down");
|
||||||
|
|
Loading…
Reference in New Issue