diff --git a/jetty-websocket/jetty-websocket-client/src/main/java/module-info.java b/jetty-websocket/jetty-websocket-client/src/main/java/module-info.java index 558c1770146..e414e1fd7b0 100644 --- a/jetty-websocket/jetty-websocket-client/src/main/java/module-info.java +++ b/jetty-websocket/jetty-websocket-client/src/main/java/module-info.java @@ -27,7 +27,4 @@ module org.eclipse.jetty.websocket.jetty.client requires org.eclipse.jetty.websocket.jetty.api; requires org.eclipse.jetty.websocket.core; requires org.eclipse.jetty.websocket.jetty.common; - - // Only required if using XmlBasedHttpClientProvider. - requires static org.eclipse.jetty.xml; } diff --git a/jetty-websocket/jetty-websocket-client/src/test/java/org/eclipse/jetty/websocket/client/HttpClientInitTest.java b/jetty-websocket/jetty-websocket-client/src/test/java/org/eclipse/jetty/websocket/client/HttpClientInitTest.java index 14b609e982f..221f582a3ec 100644 --- a/jetty-websocket/jetty-websocket-client/src/test/java/org/eclipse/jetty/websocket/client/HttpClientInitTest.java +++ b/jetty-websocket/jetty-websocket-client/src/test/java/org/eclipse/jetty/websocket/client/HttpClientInitTest.java @@ -46,7 +46,7 @@ public class HttpClientInitTest assertThat("Executor exists", executor, notNullValue()); assertThat("Executor instanceof", executor, instanceOf(QueuedThreadPool.class)); QueuedThreadPool threadPool = (QueuedThreadPool)executor; - assertThat("QueuedThreadPool.name", threadPool.getName(), startsWith("Jetty-WebSocketClient@")); + assertThat("QueuedThreadPool.name", threadPool.getName(), startsWith("WebSocketClient@")); } finally { diff --git a/jetty-websocket/websocket-core/src/main/java/module-info.java b/jetty-websocket/websocket-core/src/main/java/module-info.java index 93358f5eb3a..31e6af6f45d 100644 --- a/jetty-websocket/websocket-core/src/main/java/module-info.java +++ b/jetty-websocket/websocket-core/src/main/java/module-info.java @@ -37,9 +37,11 @@ module org.eclipse.jetty.websocket.core requires org.eclipse.jetty.io; requires org.eclipse.jetty.http; requires org.eclipse.jetty.server; - requires static org.eclipse.jetty.xml; requires org.eclipse.jetty.util; + // Only required if using XmlBasedHttpClientProvider. + requires static org.eclipse.jetty.xml; + uses Extension; provides Extension with diff --git a/jetty-websocket/websocket-core/src/main/java/org/eclipse/jetty/websocket/core/client/DefaultHttpClientProvider.java b/jetty-websocket/websocket-core/src/main/java/org/eclipse/jetty/websocket/core/client/DefaultHttpClientProvider.java deleted file mode 100644 index cad3935ef9e..00000000000 --- a/jetty-websocket/websocket-core/src/main/java/org/eclipse/jetty/websocket/core/client/DefaultHttpClientProvider.java +++ /dev/null @@ -1,39 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2019 Mort Bay Consulting Pty. Ltd. -// ------------------------------------------------------------------------ -// All rights reserved. This program and the accompanying materials -// are made available under the terms of the Eclipse Public License v1.0 -// and Apache License v2.0 which accompanies this distribution. -// -// The Eclipse Public License is available at -// http://www.eclipse.org/legal/epl-v10.html -// -// The Apache License v2.0 is available at -// http://www.opensource.org/licenses/apache2.0.php -// -// You may elect to redistribute this code under either of these licenses. -// ======================================================================== -// - -package org.eclipse.jetty.websocket.core.client; - -import org.eclipse.jetty.client.HttpClient; -import org.eclipse.jetty.util.ssl.SslContextFactory; -import org.eclipse.jetty.util.thread.QueuedThreadPool; - -class DefaultHttpClientProvider -{ - public static HttpClient newHttpClient() - { - HttpClient client = new HttpClient(new SslContextFactory()); - client.getSslContextFactory().setEndpointIdentificationAlgorithm("HTTPS"); - - QueuedThreadPool threadPool = new QueuedThreadPool(); - threadPool.setName("WebSocketClient@" + client.hashCode()); - threadPool.setDaemon(true); - client.setExecutor(threadPool); - - return client; - } -} diff --git a/jetty-websocket/websocket-core/src/main/java/org/eclipse/jetty/websocket/core/client/HttpClientProvider.java b/jetty-websocket/websocket-core/src/main/java/org/eclipse/jetty/websocket/core/client/HttpClientProvider.java index bf7089b1ea8..4f3a11bd2b9 100644 --- a/jetty-websocket/websocket-core/src/main/java/org/eclipse/jetty/websocket/core/client/HttpClientProvider.java +++ b/jetty-websocket/websocket-core/src/main/java/org/eclipse/jetty/websocket/core/client/HttpClientProvider.java @@ -18,33 +18,36 @@ package org.eclipse.jetty.websocket.core.client; -import java.lang.reflect.Method; - import org.eclipse.jetty.client.HttpClient; import org.eclipse.jetty.util.log.Log; +import org.eclipse.jetty.util.ssl.SslContextFactory; +import org.eclipse.jetty.util.thread.QueuedThreadPool; -public final class HttpClientProvider +public interface HttpClientProvider { - public static HttpClient get() + static HttpClient get() { try { - if (Class.forName("org.eclipse.jetty.xml.XmlConfiguration") != null) - { - Class xmlClazz = Class.forName("org.eclipse.jetty.websocket.core.client.XmlBasedHttpClientProvider"); - Method getMethod = xmlClazz.getMethod("get"); - Object ret = getMethod.invoke(null); - if ((ret != null) && (ret instanceof HttpClient)) - { - return (HttpClient)ret; - } - } + HttpClientProvider xmlProvider = new XmlHttpClientProvider(); + HttpClient client = xmlProvider.newHttpClient(); + if (client != null) + return client; } catch (Throwable ignore) { Log.getLogger(HttpClientProvider.class).ignore(ignore); } - return DefaultHttpClientProvider.newHttpClient(); + return new HttpClientProvider(){}.newHttpClient(); + } + + default HttpClient newHttpClient() + { + HttpClient client = new HttpClient(new SslContextFactory()); + QueuedThreadPool threadPool = new QueuedThreadPool(); + threadPool.setName("WebSocketClient@" + client.hashCode()); + client.setExecutor(threadPool); + return client; } } diff --git a/jetty-websocket/websocket-core/src/main/java/org/eclipse/jetty/websocket/core/client/WebSocketCoreClient.java b/jetty-websocket/websocket-core/src/main/java/org/eclipse/jetty/websocket/core/client/WebSocketCoreClient.java index 0fbe0aa7199..759232bf107 100644 --- a/jetty-websocket/websocket-core/src/main/java/org/eclipse/jetty/websocket/core/client/WebSocketCoreClient.java +++ b/jetty-websocket/websocket-core/src/main/java/org/eclipse/jetty/websocket/core/client/WebSocketCoreClient.java @@ -20,6 +20,7 @@ package org.eclipse.jetty.websocket.core.client; import java.io.IOException; import java.net.URI; +import java.util.Objects; import java.util.concurrent.CompletableFuture; import org.eclipse.jetty.client.HttpClient; @@ -61,7 +62,7 @@ public class WebSocketCoreClient extends ContainerLifeCycle implements FrameHand public WebSocketCoreClient(HttpClient httpClient, FrameHandler.Customizer customizer) { if (httpClient == null) - httpClient = HttpClientProvider.get(); + httpClient = Objects.requireNonNull(HttpClientProvider.get()); this.httpClient = httpClient; this.extensionRegistry = new WebSocketExtensionRegistry(); diff --git a/jetty-websocket/websocket-core/src/main/java/org/eclipse/jetty/websocket/core/client/XmlBasedHttpClientProvider.java b/jetty-websocket/websocket-core/src/main/java/org/eclipse/jetty/websocket/core/client/XmlHttpClientProvider.java similarity index 88% rename from jetty-websocket/websocket-core/src/main/java/org/eclipse/jetty/websocket/core/client/XmlBasedHttpClientProvider.java rename to jetty-websocket/websocket-core/src/main/java/org/eclipse/jetty/websocket/core/client/XmlHttpClientProvider.java index 2be1cd253f4..dafd14d5bd5 100644 --- a/jetty-websocket/websocket-core/src/main/java/org/eclipse/jetty/websocket/core/client/XmlBasedHttpClientProvider.java +++ b/jetty-websocket/websocket-core/src/main/java/org/eclipse/jetty/websocket/core/client/XmlHttpClientProvider.java @@ -25,9 +25,10 @@ import org.eclipse.jetty.client.HttpClient; import org.eclipse.jetty.util.log.Log; import org.eclipse.jetty.xml.XmlConfiguration; -class XmlBasedHttpClientProvider +class XmlHttpClientProvider implements HttpClientProvider { - public static HttpClient get() + @Override + public HttpClient newHttpClient() { URL resource = Thread.currentThread().getContextClassLoader().getResource("jetty-websocket-httpclient.xml"); if (resource == null) @@ -42,7 +43,7 @@ class XmlBasedHttpClientProvider } catch (Throwable t) { - Log.getLogger(XmlBasedHttpClientProvider.class).warn("Unable to load: " + resource, t); + Log.getLogger(XmlHttpClientProvider.class).warn("Unable to load: " + resource, t); } return null;