This is an automated email from the ASF dual-hosted git repository.

dsmiley pushed a commit to branch branch_10_0
in repository https://gitbox.apache.org/repos/asf/solr.git

commit f9bf0b680275627c0cffb505f2b0705bc010c5ab
Author: David Smiley <[email protected]>
AuthorDate: Mon Dec 1 10:14:30 2025 -0500

    SOLR-17994: SolrClientCustomizer (#3876)
    
    * Rename HttpClientBuilderFactory to SolrClientCustomizer, generalizing it.
    * Rename property solr.httpclient.builder.factory to 
solr.solrj.http.jetty.customizer
    * Rename PreemptiveBasicAuthClientBuilderFactory to 
PreemptiveBasicAuthClientCustomizer
---
 .../unreleased/SOLR-17994-SolrClientCustomizer.yml |  8 ++++
 solr/bin/solr                                      |  4 +-
 solr/bin/solr.cmd                                  |  4 +-
 solr/bin/solr.in.cmd                               |  2 +-
 .../apache/solr/cloud/RecoveryZkTestWithAuth.java  |  8 ++--
 .../configuration-guide/pages/solr-properties.adoc |  8 ++--
 .../pages/basic-authentication-plugin.adoc         |  6 +--
 .../pages/major-changes-in-solr-10.adoc            |  3 +-
 ...ilderFactory.java => SolrClientCustomizer.java} | 14 ++++---
 .../solr/client/solrj/impl/SolrHttpConstants.java  |  6 ---
 .../client/solrj/jetty/HttpJettySolrClient.java    | 28 +++++++++-----
 ...va => PreemptiveBasicAuthClientCustomizer.java} | 19 +++++-----
 .../client/solrj/impl/HttpSolrClientTestBase.java  |  4 +-
 .../PreemptiveBasicAuthClientCustomizerTest.java}  | 44 ++++++++++------------
 .../solrj/jetty/HttpJettySolrClientTest.java       | 19 +++++-----
 15 files changed, 92 insertions(+), 85 deletions(-)

diff --git a/changelog/unreleased/SOLR-17994-SolrClientCustomizer.yml 
b/changelog/unreleased/SOLR-17994-SolrClientCustomizer.yml
new file mode 100644
index 00000000000..bb3d6779a19
--- /dev/null
+++ b/changelog/unreleased/SOLR-17994-SolrClientCustomizer.yml
@@ -0,0 +1,8 @@
+# See https://github.com/apache/solr/blob/main/dev-docs/changelog.adoc
+title: Rename HttpClientBuilderFactory to SolrClientCustomizer, and property 
solr.httpclient.builder.factory to solr.solrj.http.jetty.customizer
+type: other # added, changed, fixed, deprecated, removed, dependency_update, 
security, other
+authors:
+  - name: David Smiley
+links:
+  - name: SOLR-17994
+    url: https://issues.apache.org/jira/browse/SOLR-17994
diff --git a/solr/bin/solr b/solr/bin/solr
index d9a95a41efe..ec7f596144d 100755
--- a/solr/bin/solr
+++ b/solr/bin/solr
@@ -342,7 +342,7 @@ fi
 if [ -n "${SOLR_AUTH_TYPE:-}" ]; then
   case "$(echo "$SOLR_AUTH_TYPE" | awk '{print tolower($0)}')" in
     basic)
-      
SOLR_AUTHENTICATION_CLIENT_BUILDER="org.apache.solr.client.solrj.jetty.PreemptiveBasicAuthClientBuilderFactory"
+      
SOLR_AUTHENTICATION_CLIENT_BUILDER="org.apache.solr.client.solrj.jetty.PreemptiveBasicAuthClientCustomizer"
       ;;
     *)
       echo "ERROR: Value specified for SOLR_AUTH_TYPE environment variable is 
invalid."
@@ -355,7 +355,7 @@ if [ -n "${SOLR_AUTHENTICATION_CLIENT_CONFIGURER:-}" ]; then
   echo "         Please start using SOLR_AUTH_TYPE instead"
 fi
 if [ -n "${SOLR_AUTHENTICATION_CLIENT_BUILDER:-}" ]; then
-  
AUTHC_CLIENT_BUILDER_ARG="-Dsolr.httpclient.builder.factory=$SOLR_AUTHENTICATION_CLIENT_BUILDER"
+  
AUTHC_CLIENT_BUILDER_ARG="-Dsolr.solrj.http.jetty.customizer=$SOLR_AUTHENTICATION_CLIENT_BUILDER"
   AUTHC_OPTS="${AUTHC_CLIENT_BUILDER_ARG:-}"
 fi
 # This looks strange, but it is to avoid extra spaces when we have only one of 
the values set
diff --git a/solr/bin/solr.cmd b/solr/bin/solr.cmd
index 7396804262b..e7de0ce839d 100755
--- a/solr/bin/solr.cmd
+++ b/solr/bin/solr.cmd
@@ -227,7 +227,7 @@ IF DEFINED SOLR_AUTH_TYPE (
 
 IF DEFINED SOLR_AUTH_TYPE (
   IF /I "%SOLR_AUTH_TYPE%" == "basic" (
-    set 
SOLR_AUTHENTICATION_CLIENT_BUILDER="org.apache.solr.client.solrj.jetty.PreemptiveBasicAuthClientBuilderFactory"
+    set 
SOLR_AUTHENTICATION_CLIENT_BUILDER="org.apache.solr.client.solrj.jetty.PreemptiveBasicAuthClientCustomizer"
   ) ELSE (
     echo ERROR: Value specified for SOLR_AUTH_TYPE configuration variable is 
invalid.
     goto err
@@ -239,7 +239,7 @@ IF DEFINED SOLR_AUTHENTICATION_CLIENT_CONFIGURER (
   echo          Please start using SOLR_AUTH_TYPE instead
 )
 IF DEFINED SOLR_AUTHENTICATION_CLIENT_BUILDER (
-  set 
AUTHC_CLIENT_BUILDER_ARG="-Dsolr.httpclient.builder.factory=%SOLR_AUTHENTICATION_CLIENT_BUILDER%"
+  set 
AUTHC_CLIENT_BUILDER_ARG="-Dsolr.solrj.http.jetty.customizer=%SOLR_AUTHENTICATION_CLIENT_BUILDER%"
 )
 set "AUTHC_OPTS=%AUTHC_CLIENT_BUILDER_ARG% %SOLR_AUTHENTICATION_OPTS%"
 
diff --git a/solr/bin/solr.in.cmd b/solr/bin/solr.in.cmd
index d605e04b712..81be993aa47 100755
--- a/solr/bin/solr.in.cmd
+++ b/solr/bin/solr.in.cmd
@@ -173,7 +173,7 @@ REM set SOLR_SSL_CLIENT_TRUST_STORE_TYPE=
 
 REM Settings for authentication
 REM Please configure only one of SOLR_AUTHENTICATION_CLIENT_BUILDER or 
SOLR_AUTH_TYPE parameters
-REM set 
SOLR_AUTHENTICATION_CLIENT_BUILDER=org.apache.solr.client.solrj.jetty.PreemptiveBasicAuthClientBuilderFactory
+REM set 
SOLR_AUTHENTICATION_CLIENT_BUILDER=org.apache.solr.client.solrj.jetty.PreemptiveBasicAuthClientCustomizer
 REM set SOLR_AUTH_TYPE=basic
 REM set 
SOLR_AUTHENTICATION_OPTS=-Dsolr.security.auth.basicauth.credentials=solr:SolrRocks
 
diff --git 
a/solr/core/src/test/org/apache/solr/cloud/RecoveryZkTestWithAuth.java 
b/solr/core/src/test/org/apache/solr/cloud/RecoveryZkTestWithAuth.java
index e1dc4528995..3a62ac08f88 100644
--- a/solr/core/src/test/org/apache/solr/cloud/RecoveryZkTestWithAuth.java
+++ b/solr/core/src/test/org/apache/solr/cloud/RecoveryZkTestWithAuth.java
@@ -27,8 +27,8 @@ import org.apache.solr.client.solrj.SolrResponse;
 import org.apache.solr.client.solrj.SolrServerException;
 import org.apache.solr.client.solrj.apache.CloudLegacySolrClient;
 import org.apache.solr.client.solrj.apache.HttpSolrClient;
-import org.apache.solr.client.solrj.impl.SolrHttpConstants;
-import 
org.apache.solr.client.solrj.jetty.PreemptiveBasicAuthClientBuilderFactory;
+import org.apache.solr.client.solrj.jetty.HttpJettySolrClient;
+import org.apache.solr.client.solrj.jetty.PreemptiveBasicAuthClientCustomizer;
 import org.apache.solr.client.solrj.request.CollectionAdminRequest;
 import org.apache.solr.client.solrj.request.QueryRequest;
 import org.apache.solr.client.solrj.request.SolrQuery;
@@ -49,8 +49,8 @@ public class RecoveryZkTestWithAuth extends SolrCloudTestCase 
{
     // for context)
     if (rarely()) {
       System.setProperty(
-          SolrHttpConstants.SYS_PROP_HTTP_CLIENT_BUILDER_FACTORY,
-          PreemptiveBasicAuthClientBuilderFactory.class.getName());
+          HttpJettySolrClient.CLIENT_CUSTOMIZER_SYSPROP,
+          PreemptiveBasicAuthClientCustomizer.class.getName());
       System.setProperty("solr.security.auth.basicauth.credentials", 
SecurityJson.USER_PASS);
     }
 
diff --git 
a/solr/solr-ref-guide/modules/configuration-guide/pages/solr-properties.adoc 
b/solr/solr-ref-guide/modules/configuration-guide/pages/solr-properties.adoc
index a12d182b54f..1af78c0ba31 100644
--- a/solr/solr-ref-guide/modules/configuration-guide/pages/solr-properties.adoc
+++ b/solr/solr-ref-guide/modules/configuration-guide/pages/solr-properties.adoc
@@ -102,7 +102,7 @@ NOTE: Properties marked with "!" indicate inverted meaning 
between pre Solr 10 a
 
 |solr.security.allow.urls|solr.allowUrls||A comma seperated list of urls for 
reading from.
 
-|solr.security.allow.urls.enabled|!solr.disable.allow.urls|false|If using an 
allow list of accessible urls is enabled. 
+|solr.security.allow.urls.enabled|!solr.disable.allow.urls|false|If using an 
allow list of accessible urls is enabled.
 
 |solr.security.auth.plugin|authenticationPlugin||Specifies the authentication 
plugin to use.
 
@@ -110,6 +110,8 @@ NOTE: Properties marked with "!" indicate inverted meaning 
between pre Solr 10 a
 
 |solr.solrj.http.cookies.enabled|!solr.http.disableCookies| false |If 
Http2SolrClient should support cookies.
 
+|solr.solrj.http.jetty.customizer|solr.httpclient.builder.factory||A class 
loaded to customize HttpJettySolrClient upon creation.
+
 
|solr.streamingexpressions.facet.tiered.enabled|solr.facet.stream.tiered|true|Controls
 whether tiered faceting is enabled for streaming expressions.
 
 
|solr.streamingexpressions.macros.enabled|StreamingExpressionMacros|false|Controls
 whether to expand URL parameters inside of the `expr` parameter.
@@ -163,8 +165,8 @@ System properties can be set in several ways:
 2. In `solr.in.sh` (Unix) or `solr.in.cmd` (Windows) using environment 
variables
 3. Through environment variables (with appropriate naming conventions)
 
-Environment variables can also be used to set these properties.  
-You may find this useful in environments such as Docker.  
+Environment variables can also be used to set these properties.
+You may find this useful in environments such as Docker.
 Environment variables should be uppercase with dot notations equivalents, e.g. 
`SOLR_API_V2_ENABLED` for the property `solr.api.v2.enabled`.
 
 == See Also
diff --git 
a/solr/solr-ref-guide/modules/deployment-guide/pages/basic-authentication-plugin.adoc
 
b/solr/solr-ref-guide/modules/deployment-guide/pages/basic-authentication-plugin.adoc
index 204731a89e4..9121f0046fd 100644
--- 
a/solr/solr-ref-guide/modules/deployment-guide/pages/basic-authentication-plugin.adoc
+++ 
b/solr/solr-ref-guide/modules/deployment-guide/pages/basic-authentication-plugin.adoc
@@ -358,9 +358,9 @@ QueryResponse rsp = req.process(client);
 
 === Global (JVM) Basic Auth Credentials
 
-Alternatively, users can use SolrJ's `PreemptiveBasicAuthClientBuilderFactory` 
to add basic authentication credentials to _all_ requests automatically.
-To enable this feature, users should set the following system property 
`-Dsolr.httpclient.builder.factory=org.apache.solr.client.solrj.jetty.PreemptiveBasicAuthClientBuilderFactory`.
-`PreemptiveBasicAuthClientBuilderFactory` allows applications to provide 
credentials in two different ways:
+Alternatively, users can use SolrJ's `PreemptiveBasicAuthClientCustomizer` to 
add basic authentication credentials to _all_ requests automatically.
+To enable this feature, users should set the following system property 
`-Dsolr.solrj.http.jetty.customizer=org.apache.solr.client.solrj.jetty.PreemptiveBasicAuthClientCustomizer`.
+`PreemptiveBasicAuthClientCustomizer` allows applications to provide 
credentials in two different ways:
 
 . The `solr.security.auth.basicauth.credentials` system property can be 
passed, containing the credentials directly (e.g., 
`-Dsolr.security.auth.basicauth.credentials=username:password`).
 This option is straightforward, but may expose the credentials in the command 
line, depending on how they're set.
diff --git 
a/solr/solr-ref-guide/modules/upgrade-notes/pages/major-changes-in-solr-10.adoc 
b/solr/solr-ref-guide/modules/upgrade-notes/pages/major-changes-in-solr-10.adoc
index b4fec165972..f3f7b2dc379 100644
--- 
a/solr/solr-ref-guide/modules/upgrade-notes/pages/major-changes-in-solr-10.adoc
+++ 
b/solr/solr-ref-guide/modules/upgrade-notes/pages/major-changes-in-solr-10.adoc
@@ -78,6 +78,8 @@ The following classes were renamed with some refactorings: 
`Http2SolrClient` to
 `CloudHttp2SolrClient.Builder` has moved to `CloudSolrClient`; users should 
generally have no need to refer to `CloudHttp2SolrClient` or any class/member 
with "http2" in it.
 The builder will check if Jetty `HttpClient` is available and use that, 
otherwise fallback on a JDK based `HttpClient`.
 `CloudJettySolrClient` is new, proving an explicit option.
+The system property `solr.solrj.http.jetty.customizer` (formerly 
`solr.httpclient.builder.factory`) can configure a `HttpJettySolrClient`.
+The only built-in implementation is 
`org.apache.solr.client.solrj.jetty.PreemptiveBasicAuthClientCustomizer`, 
renamed from `PreemptiveBasicAuthClientCustomizer`.
 
 * `SolrClient` implementations that rely on "base URL" strings now only accept 
"root" URL paths (i.e. URLs that end in "/solr").
 Users who previously relied on collection-specific URLs to avoid including the 
collection name with each request can instead achieve this by specifying a 
"default collection" using the `withDefaultCollection` method available on most 
`SolrClient` Builders.
@@ -90,7 +92,6 @@ Users who previously relied on collection-specific URLs to 
avoid including the c
 This makes it clear that they pertain specifically to “JavaBin” rather than 
binary in general.
 
 * The deprecated SolrClient implementations based on Apache HttpClient are 
removed from Solrj,  thus the related dependencies are no longer present.
-The system property `solr.httpclient.builder.factory` now only configures 
SolrClients using a Jetty based HttpClient.
 
 * A number of classes moved to different packages to be better organized:
 ShardTerms, DelegatingClusterStateProvider, JavaBinRequestWriter, 
RoutedAliasTypes, SolrQuery, XMLRequestWriter, JacksonContentWriter, 
FastStreamingDocsCallback, InputStreamResponse, InputStreamResponseParser, 
JavaBinResponseParser, ResponseParser, StreamingJavaBinResponseParser, 
StreamingResponseCallback, XMLResponseParser, JacksonDataBindResponseParser, 
JsonMapResponseParser, SocketProxy
diff --git 
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/HttpClientBuilderFactory.java
 
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/SolrClientCustomizer.java
similarity index 68%
rename from 
solr/solrj/src/java/org/apache/solr/client/solrj/impl/HttpClientBuilderFactory.java
rename to 
solr/solrj/src/java/org/apache/solr/client/solrj/impl/SolrClientCustomizer.java
index 48558e9b076..98dc2d57564 100644
--- 
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/HttpClientBuilderFactory.java
+++ 
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/SolrClientCustomizer.java
@@ -16,15 +16,17 @@
  */
 package org.apache.solr.client.solrj.impl;
 
-import java.io.Closeable;
-import org.apache.solr.client.solrj.jetty.HttpJettySolrClient;
+import org.apache.solr.client.solrj.SolrClient;
 
 /**
- * A config hook for post-configuration of a {@linkplain HttpJettySolrClient} 
by its builder.
+ * A config hook for post-configuration of a {@linkplain SolrClient} by its 
builder. It is not
+ * supported by all builders.
  *
- * @see SolrHttpConstants#SYS_PROP_HTTP_CLIENT_BUILDER_FACTORY
+ * @param <T> type of SolrClient this customizer targets
+ * @see 
org.apache.solr.client.solrj.jetty.HttpJettySolrClient#CLIENT_CUSTOMIZER_SYSPROP
  * @lucene.experimental
  */
-public interface HttpClientBuilderFactory extends Closeable {
-  default void setup(HttpJettySolrClient client) {}
+public interface SolrClientCustomizer<T extends SolrClient> {
+
+  void setup(T client);
 }
diff --git 
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/SolrHttpConstants.java 
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/SolrHttpConstants.java
index bc2bbaf9712..32d4fc6cbfe 100644
--- 
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/SolrHttpConstants.java
+++ 
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/SolrHttpConstants.java
@@ -42,12 +42,6 @@ public interface SolrHttpConstants {
   /** Maximum total connections allowed */
   String PROP_MAX_CONNECTIONS = "maxConnections";
 
-  /**
-   * A Java system property to select the {@linkplain 
HttpClientBuilderFactory} used for configuring
-   * HTTP based SolrClients.
-   */
-  String SYS_PROP_HTTP_CLIENT_BUILDER_FACTORY = 
"solr.httpclient.builder.factory";
-
   /**
    * System property consulted to determine if HTTP based SolrClients will 
require hostname
    * validation of SSL Certificates. The default behavior is to enforce peer 
name validation.
diff --git 
a/solr/solrj/src/java/org/apache/solr/client/solrj/jetty/HttpJettySolrClient.java
 
b/solr/solrj/src/java/org/apache/solr/client/solrj/jetty/HttpJettySolrClient.java
index 9369f476dec..072a2add953 100644
--- 
a/solr/solrj/src/java/org/apache/solr/client/solrj/jetty/HttpJettySolrClient.java
+++ 
b/solr/solrj/src/java/org/apache/solr/client/solrj/jetty/HttpJettySolrClient.java
@@ -41,10 +41,10 @@ import org.apache.solr.client.api.util.SolrVersion;
 import org.apache.solr.client.solrj.SolrClient;
 import org.apache.solr.client.solrj.SolrRequest;
 import org.apache.solr.client.solrj.SolrServerException;
-import org.apache.solr.client.solrj.impl.HttpClientBuilderFactory;
 import org.apache.solr.client.solrj.impl.HttpSolrClientBase;
 import org.apache.solr.client.solrj.impl.HttpSolrClientBuilderBase;
 import org.apache.solr.client.solrj.impl.LBSolrClient;
+import org.apache.solr.client.solrj.impl.SolrClientCustomizer;
 import org.apache.solr.client.solrj.impl.SolrHttpConstants;
 import 
org.apache.solr.client.solrj.jetty.HttpListenerFactory.RequestResponseListener;
 import org.apache.solr.client.solrj.request.RequestWriter;
@@ -101,7 +101,15 @@ import org.slf4j.MDC;
  */
 public class HttpJettySolrClient extends HttpSolrClientBase {
   // formerly known at Http2SolrClient
+
   private static final Logger log = 
LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+
+  /**
+   * A Java system property to select the {@linkplain SolrClientCustomizer} 
used for configuring
+   * this client.
+   */
+  public static final String CLIENT_CUSTOMIZER_SYSPROP = 
"solr.solrj.http.jetty.customizer";
+
   public static final String REQ_PRINCIPAL_KEY = "solr-req-principal";
   private static final String USER_AGENT =
       "Solr[" + MethodHandles.lookup().lookupClass().getName() + "] " + 
SolrVersion.LATEST_STRING;
@@ -156,7 +164,7 @@ public class HttpJettySolrClient extends HttpSolrClientBase 
{
     this.idleTimeoutMillis = builder.getIdleTimeoutMillis();
 
     try {
-      applyHttpClientBuilderFactory();
+      applyClientCustomizer();
     } catch (RuntimeException e) {
       try {
         this.close();
@@ -177,16 +185,16 @@ public class HttpJettySolrClient extends 
HttpSolrClientBase {
     this.authenticationStore = (AuthenticationStoreHolder) 
httpClient.getAuthenticationStore();
   }
 
-  private void applyHttpClientBuilderFactory() {
-    String factoryClassName =
-        
System.getProperty(SolrHttpConstants.SYS_PROP_HTTP_CLIENT_BUILDER_FACTORY);
+  @SuppressWarnings("unchecked")
+  private void applyClientCustomizer() {
+    String factoryClassName = EnvUtils.getProperty(CLIENT_CUSTOMIZER_SYSPROP);
     if (factoryClassName != null) {
-      log.debug("Using Http Builder Factory: {}", factoryClassName);
-      HttpClientBuilderFactory factory;
+      log.debug("Using {}", factoryClassName);
+      SolrClientCustomizer<HttpJettySolrClient> instance;
       try {
-        factory =
+        instance =
             Class.forName(factoryClassName)
-                .asSubclass(HttpClientBuilderFactory.class)
+                .asSubclass(SolrClientCustomizer.class)
                 .getDeclaredConstructor()
                 .newInstance();
       } catch (InstantiationException
@@ -197,7 +205,7 @@ public class HttpJettySolrClient extends HttpSolrClientBase 
{
         throw new RuntimeException(
             "Unable to instantiate " + HttpJettySolrClient.class.getName(), e);
       }
-      factory.setup(this);
+      instance.setup(this);
     }
   }
 
diff --git 
a/solr/solrj/src/java/org/apache/solr/client/solrj/jetty/PreemptiveBasicAuthClientBuilderFactory.java
 
b/solr/solrj/src/java/org/apache/solr/client/solrj/jetty/PreemptiveBasicAuthClientCustomizer.java
similarity index 91%
rename from 
solr/solrj/src/java/org/apache/solr/client/solrj/jetty/PreemptiveBasicAuthClientBuilderFactory.java
rename to 
solr/solrj/src/java/org/apache/solr/client/solrj/jetty/PreemptiveBasicAuthClientCustomizer.java
index a7553d6cb3d..d4d0fd2bad3 100644
--- 
a/solr/solrj/src/java/org/apache/solr/client/solrj/jetty/PreemptiveBasicAuthClientBuilderFactory.java
+++ 
b/solr/solrj/src/java/org/apache/solr/client/solrj/jetty/PreemptiveBasicAuthClientCustomizer.java
@@ -26,7 +26,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
-import org.apache.solr.client.solrj.impl.HttpClientBuilderFactory;
+import org.apache.solr.client.solrj.impl.SolrClientCustomizer;
 import org.apache.solr.client.solrj.impl.SolrHttpConstants;
 import org.apache.solr.common.params.MapSolrParams;
 import org.apache.solr.common.params.SolrParams;
@@ -36,10 +36,13 @@ import 
org.eclipse.jetty.client.WWWAuthenticationProtocolHandler;
 import org.eclipse.jetty.client.internal.HttpAuthenticationStore;
 
 /**
- * HttpClientConfigurer implementation providing support for preemptive Http 
Basic authentication
- * scheme.
+ * A {@link HttpJettySolrClient} {@link SolrClientCustomizer} supporting a 
preemptive Http Basic
+ * authentication scheme.
+ *
+ * @see HttpJettySolrClient#CLIENT_CUSTOMIZER_SYSPROP
  */
-public class PreemptiveBasicAuthClientBuilderFactory implements 
HttpClientBuilderFactory {
+public class PreemptiveBasicAuthClientCustomizer
+    implements SolrClientCustomizer<HttpJettySolrClient> {
   /**
    * A system property used to specify a properties file containing default 
parameters used for
    * creating an HTTP client. This is specifically useful for configuring the 
HTTP basic auth
@@ -66,9 +69,6 @@ public class PreemptiveBasicAuthClientBuilderFactory 
implements HttpClientBuilde
     CREDENTIAL_RESOLVER.defaultParams = params;
   }
 
-  @Override
-  public void close() throws IOException {}
-
   @Override
   public void setup(HttpJettySolrClient client) {
     final String basicAuthUser =
@@ -99,10 +99,9 @@ public class PreemptiveBasicAuthClientBuilderFactory 
implements HttpClientBuilde
 
     public CredentialsResolver() {
       String credentials =
-          System.getProperty(
-              
PreemptiveBasicAuthClientBuilderFactory.SYS_PROP_BASIC_AUTH_CREDENTIALS);
+          
System.getProperty(PreemptiveBasicAuthClientCustomizer.SYS_PROP_BASIC_AUTH_CREDENTIALS);
       String configFile =
-          
System.getProperty(PreemptiveBasicAuthClientBuilderFactory.SYS_PROP_HTTP_CLIENT_CONFIG);
+          
System.getProperty(PreemptiveBasicAuthClientCustomizer.SYS_PROP_HTTP_CLIENT_CONFIG);
 
       if (credentials != null && configFile != null) {
         throw new IllegalArgumentException(
diff --git 
a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/HttpSolrClientTestBase.java
 
b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/HttpSolrClientTestBase.java
index e90632b02bd..632406e3278 100644
--- 
a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/HttpSolrClientTestBase.java
+++ 
b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/HttpSolrClientTestBase.java
@@ -39,7 +39,7 @@ import org.apache.solr.SolrJettyTestBase;
 import org.apache.solr.client.solrj.SolrClient;
 import org.apache.solr.client.solrj.SolrRequest;
 import org.apache.solr.client.solrj.SolrServerException;
-import org.apache.solr.client.solrj.apache.HttpClientUtil;
+import org.apache.solr.client.solrj.jetty.HttpJettySolrClient;
 import org.apache.solr.client.solrj.request.QueryRequest;
 import org.apache.solr.client.solrj.request.SolrQuery;
 import org.apache.solr.client.solrj.request.UpdateRequest;
@@ -92,7 +92,7 @@ public abstract class HttpSolrClientTestBase extends 
SolrJettyTestBase {
   @Override
   public void tearDown() throws Exception {
     System.clearProperty("solr.security.auth.basicauth.credentials");
-    System.clearProperty(HttpClientUtil.SYS_PROP_HTTP_CLIENT_BUILDER_FACTORY);
+    System.clearProperty(HttpJettySolrClient.CLIENT_CUSTOMIZER_SYSPROP);
     DebugServlet.clear();
     super.tearDown();
   }
diff --git 
a/solr/solrj/src/test/org/apache/solr/client/solrj/jetty/PreemptiveBasicAuthClientBuilderFactoryTest.java
 
b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/PreemptiveBasicAuthClientCustomizerTest.java
similarity index 61%
rename from 
solr/solrj/src/test/org/apache/solr/client/solrj/jetty/PreemptiveBasicAuthClientBuilderFactoryTest.java
rename to 
solr/solrj/src/test/org/apache/solr/client/solrj/impl/PreemptiveBasicAuthClientCustomizerTest.java
index 3ee8f4dcc78..ae76c810232 100644
--- 
a/solr/solrj/src/test/org/apache/solr/client/solrj/jetty/PreemptiveBasicAuthClientBuilderFactoryTest.java
+++ 
b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/PreemptiveBasicAuthClientCustomizerTest.java
@@ -26,7 +26,7 @@ import java.util.Properties;
 import org.apache.solr.SolrTestCase;
 import org.apache.solr.client.solrj.apache.HttpClientUtil;
 
-public class PreemptiveBasicAuthClientBuilderFactoryTest extends SolrTestCase {
+public class PreemptiveBasicAuthClientCustomizerTest extends SolrTestCase {
 
   private void assertIllegalArgumentException(ThrowingRunnable executable, 
String expectedMessage) {
     Exception e = expectThrows(IllegalArgumentException.class, executable);
@@ -37,43 +37,39 @@ public class PreemptiveBasicAuthClientBuilderFactoryTest 
extends SolrTestCase {
 
   @Override
   public void tearDown() throws Exception {
-    
System.clearProperty(PreemptiveBasicAuthClientBuilderFactory.SYS_PROP_BASIC_AUTH_CREDENTIALS);
-    
System.clearProperty(PreemptiveBasicAuthClientBuilderFactory.SYS_PROP_HTTP_CLIENT_CONFIG);
+    
System.clearProperty(PreemptiveBasicAuthClientCustomizer.SYS_PROP_BASIC_AUTH_CREDENTIALS);
+    
System.clearProperty(PreemptiveBasicAuthClientCustomizer.SYS_PROP_HTTP_CLIENT_CONFIG);
     super.tearDown();
   }
 
   public void testBadSysPropsCredentials() {
-    System.setProperty(
-        
PreemptiveBasicAuthClientBuilderFactory.SYS_PROP_BASIC_AUTH_CREDENTIALS, "foo");
+    
System.setProperty(PreemptiveBasicAuthClientCustomizer.SYS_PROP_BASIC_AUTH_CREDENTIALS,
 "foo");
     assertIllegalArgumentException(
-        PreemptiveBasicAuthClientBuilderFactory.CredentialsResolver::new,
+        PreemptiveBasicAuthClientCustomizer.CredentialsResolver::new,
         "Invalid Authentication credentials");
-    System.setProperty(
-        
PreemptiveBasicAuthClientBuilderFactory.SYS_PROP_BASIC_AUTH_CREDENTIALS, 
"foo:");
+    
System.setProperty(PreemptiveBasicAuthClientCustomizer.SYS_PROP_BASIC_AUTH_CREDENTIALS,
 "foo:");
     assertIllegalArgumentException(
-        PreemptiveBasicAuthClientBuilderFactory.CredentialsResolver::new,
+        PreemptiveBasicAuthClientCustomizer.CredentialsResolver::new,
         "Invalid Authentication credentials");
-    System.setProperty(
-        
PreemptiveBasicAuthClientBuilderFactory.SYS_PROP_BASIC_AUTH_CREDENTIALS, 
":foo");
+    
System.setProperty(PreemptiveBasicAuthClientCustomizer.SYS_PROP_BASIC_AUTH_CREDENTIALS,
 ":foo");
     assertIllegalArgumentException(
-        PreemptiveBasicAuthClientBuilderFactory.CredentialsResolver::new,
+        PreemptiveBasicAuthClientCustomizer.CredentialsResolver::new,
         "Invalid Authentication credentials");
   }
 
   public void testSysPropsAndPropsFile() {
-    System.setProperty(
-        
PreemptiveBasicAuthClientBuilderFactory.SYS_PROP_BASIC_AUTH_CREDENTIALS, "foo");
-    
System.setProperty(PreemptiveBasicAuthClientBuilderFactory.SYS_PROP_HTTP_CLIENT_CONFIG,
 "foo");
+    
System.setProperty(PreemptiveBasicAuthClientCustomizer.SYS_PROP_BASIC_AUTH_CREDENTIALS,
 "foo");
+    
System.setProperty(PreemptiveBasicAuthClientCustomizer.SYS_PROP_HTTP_CLIENT_CONFIG,
 "foo");
     assertIllegalArgumentException(
-        PreemptiveBasicAuthClientBuilderFactory.CredentialsResolver::new,
+        PreemptiveBasicAuthClientCustomizer.CredentialsResolver::new,
         "Basic authentication credentials passed");
   }
 
   public void testCredentialsFromSystemProperties() {
     System.setProperty(
-        
PreemptiveBasicAuthClientBuilderFactory.SYS_PROP_BASIC_AUTH_CREDENTIALS, 
"foo:bar");
-    PreemptiveBasicAuthClientBuilderFactory.CredentialsResolver 
credentialsResolver =
-        new PreemptiveBasicAuthClientBuilderFactory.CredentialsResolver();
+        PreemptiveBasicAuthClientCustomizer.SYS_PROP_BASIC_AUTH_CREDENTIALS, 
"foo:bar");
+    PreemptiveBasicAuthClientCustomizer.CredentialsResolver 
credentialsResolver =
+        new PreemptiveBasicAuthClientCustomizer.CredentialsResolver();
     assertEquals("foo", 
credentialsResolver.defaultParams.get(HttpClientUtil.PROP_BASIC_AUTH_USER));
     assertEquals("bar", 
credentialsResolver.defaultParams.get(HttpClientUtil.PROP_BASIC_AUTH_PASS));
   }
@@ -84,14 +80,12 @@ public class PreemptiveBasicAuthClientBuilderFactoryTest 
extends SolrTestCase {
     p.setProperty("httpBasicAuthPassword", "bar");
     Path f = createTempFile();
     try (BufferedWriter fw = Files.newBufferedWriter(f, 
StandardCharsets.UTF_8)) {
-      p.store(
-          fw,
-          "tmp properties file for 
PreemptiveBasicAuthClientBuilderFactoryTest.testCredentialsFromConfigFile");
+      p.store(fw, "tmp properties file for " + getTestName());
     }
     System.setProperty(
-        PreemptiveBasicAuthClientBuilderFactory.SYS_PROP_HTTP_CLIENT_CONFIG, 
f.toString());
-    PreemptiveBasicAuthClientBuilderFactory.CredentialsResolver 
credentialsResolver =
-        new PreemptiveBasicAuthClientBuilderFactory.CredentialsResolver();
+        PreemptiveBasicAuthClientCustomizer.SYS_PROP_HTTP_CLIENT_CONFIG, 
f.toString());
+    PreemptiveBasicAuthClientCustomizer.CredentialsResolver 
credentialsResolver =
+        new PreemptiveBasicAuthClientCustomizer.CredentialsResolver();
     assertEquals("foo", 
credentialsResolver.defaultParams.get(HttpClientUtil.PROP_BASIC_AUTH_USER));
     assertEquals("bar", 
credentialsResolver.defaultParams.get(HttpClientUtil.PROP_BASIC_AUTH_PASS));
   }
diff --git 
a/solr/solrj/src/test/org/apache/solr/client/solrj/jetty/HttpJettySolrClientTest.java
 
b/solr/solrj/src/test/org/apache/solr/client/solrj/jetty/HttpJettySolrClientTest.java
index 5606e7838c8..81c9f75bae4 100644
--- 
a/solr/solrj/src/test/org/apache/solr/client/solrj/jetty/HttpJettySolrClientTest.java
+++ 
b/solr/solrj/src/test/org/apache/solr/client/solrj/jetty/HttpJettySolrClientTest.java
@@ -35,7 +35,6 @@ import org.apache.solr.client.solrj.SolrRequest;
 import org.apache.solr.client.solrj.SolrServerException;
 import org.apache.solr.client.solrj.impl.HttpSolrClientBuilderBase;
 import org.apache.solr.client.solrj.impl.HttpSolrClientTestBase;
-import org.apache.solr.client.solrj.impl.SolrHttpConstants;
 import org.apache.solr.client.solrj.request.JavaBinRequestWriter;
 import org.apache.solr.client.solrj.request.QueryRequest;
 import org.apache.solr.client.solrj.request.SolrPing;
@@ -498,13 +497,13 @@ public class HttpJettySolrClientTest extends 
HttpSolrClientTestBase {
   @Test
   public void testSetCredentialsWithSysProps() throws IOException, 
SolrServerException {
     System.setProperty(
-        
PreemptiveBasicAuthClientBuilderFactory.SYS_PROP_BASIC_AUTH_CREDENTIALS, 
"foo:bar");
+        PreemptiveBasicAuthClientCustomizer.SYS_PROP_BASIC_AUTH_CREDENTIALS, 
"foo:bar");
     System.setProperty(
-        SolrHttpConstants.SYS_PROP_HTTP_CLIENT_BUILDER_FACTORY,
-        PreemptiveBasicAuthClientBuilderFactory.class.getName());
+        HttpJettySolrClient.CLIENT_CUSTOMIZER_SYSPROP,
+        PreemptiveBasicAuthClientCustomizer.class.getName());
     // Hack to ensure we get a new set of parameters for this test
-    PreemptiveBasicAuthClientBuilderFactory.setDefaultSolrParams(
-        new 
PreemptiveBasicAuthClientBuilderFactory.CredentialsResolver().defaultParams);
+    PreemptiveBasicAuthClientCustomizer.setDefaultSolrParams(
+        new 
PreemptiveBasicAuthClientCustomizer.CredentialsResolver().defaultParams);
     try (var client =
         new HttpJettySolrClient.Builder(getBaseUrl() + DEBUG_SERVLET_PATH)
             .withDefaultCollection(DEFAULT_CORE)
@@ -527,9 +526,9 @@ public class HttpJettySolrClientTest extends 
HttpSolrClientTestBase {
           "Basic " + 
Base64.getEncoder().encodeToString("foo:bar".getBytes(StandardCharsets.UTF_8)),
           authorizationHeader);
     } finally {
-      
System.clearProperty(PreemptiveBasicAuthClientBuilderFactory.SYS_PROP_BASIC_AUTH_CREDENTIALS);
-      
System.clearProperty(SolrHttpConstants.SYS_PROP_HTTP_CLIENT_BUILDER_FACTORY);
-      
PreemptiveBasicAuthClientBuilderFactory.setDefaultSolrParams(SolrParams.of());
+      
System.clearProperty(PreemptiveBasicAuthClientCustomizer.SYS_PROP_BASIC_AUTH_CREDENTIALS);
+      System.clearProperty(HttpJettySolrClient.CLIENT_CUSTOMIZER_SYSPROP);
+      
PreemptiveBasicAuthClientCustomizer.setDefaultSolrParams(SolrParams.of());
     }
   }
 
@@ -607,7 +606,7 @@ public class HttpJettySolrClientTest extends 
HttpSolrClientTestBase {
 
   @Test
   public void testBadHttpFactory() {
-    System.setProperty(SolrHttpConstants.SYS_PROP_HTTP_CLIENT_BUILDER_FACTORY, 
"FakeClassName");
+    System.setProperty(HttpJettySolrClient.CLIENT_CUSTOMIZER_SYSPROP, 
"FakeClassName");
     try {
       SolrClient client =
           new HttpJettySolrClient.Builder(getBaseUrl() + DEBUG_SERVLET_PATH)

Reply via email to