This is an automated email from the ASF dual-hosted git repository.
jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git
The following commit(s) were added to refs/heads/master by this push:
new d4e799d6dd refactor: fold the unreleased
juneau-rest-client-java-httpclient module into juneau-rest-client; JDK
HttpClient becomes the built-in default transport (TODO-41)
d4e799d6dd is described below
commit d4e799d6ddab595ac1f364b813eae3b4f70b38e4
Author: James Bognar <[email protected]>
AuthorDate: Tue May 19 10:25:47 2026 -0400
refactor: fold the unreleased juneau-rest-client-java-httpclient module
into juneau-rest-client; JDK HttpClient becomes the built-in default transport
(TODO-41)
---
.../juneau-rest-client-java-httpclient/pom.xml | 83 ----------------------
.../juneau/rest/client}/JavaHttpTransport.java | 15 ++--
.../rest/client}/JavaHttpTransportBuilder.java | 8 +--
.../rest/client}/JavaHttpTransportProvider.java | 14 ++--
.../org/apache/juneau/rest/client/RestClient.java | 22 +++---
...apache.juneau.rest.client.HttpTransportProvider | 2 +-
juneau-rest/pom.xml | 1 -
juneau-utest/pom.xml | 5 --
.../juneau/rest/client/JavaHttpTransport_Test.java | 1 -
.../rest/client/RemoteInterfaceTransport_Test.java | 1 -
...D-41-merge-java-httpclient-default-transport.md | 65 +++++++++++++++++
todo/TODO.md | 2 -
12 files changed, 88 insertions(+), 131 deletions(-)
diff --git a/juneau-rest/juneau-rest-client-java-httpclient/pom.xml
b/juneau-rest/juneau-rest-client-java-httpclient/pom.xml
deleted file mode 100644
index 27e52f9697..0000000000
--- a/juneau-rest/juneau-rest-client-java-httpclient/pom.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
https://maven.apache.org/xsd/maven-4.0.0.xsd">
-
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.apache.juneau</groupId>
- <artifactId>juneau-rest</artifactId>
- <version>9.5.0-SNAPSHOT</version>
- </parent>
-
- <artifactId>juneau-rest-client-java-httpclient</artifactId>
- <name>Apache Juneau NG REST Client — JDK HttpClient Transport</name>
- <description>JDK java.net.http.HttpClient transport adapter for the
next-generation Juneau REST client.</description>
- <packaging>bundle</packaging>
-
- <properties>
-
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- </properties>
-
- <dependencies>
- <dependency>
- <groupId>org.apache.juneau</groupId>
- <artifactId>juneau-rest-client</artifactId>
- <version>${project.version}</version>
- </dependency>
- </dependencies>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <extensions>true</extensions>
- <configuration>
-
<supportIncrementalBuild>true</supportIncrementalBuild>
- </configuration>
- <executions>
- <execution>
- <id>bundle-manifest</id>
- <phase>process-classes</phase>
- <goals>
- <goal>manifest</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-source-plugin</artifactId>
- <executions>
- <execution>
- <id>attach-sources</id>
- <phase>verify</phase>
- <goals>
- <goal>jar-no-fork</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-jar-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
-</project>
diff --git
a/juneau-rest/juneau-rest-client-java-httpclient/src/main/java/org/apache/juneau/rest/client/javahttpclient/JavaHttpTransport.java
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/JavaHttpTransport.java
similarity index 91%
rename from
juneau-rest/juneau-rest-client-java-httpclient/src/main/java/org/apache/juneau/rest/client/javahttpclient/JavaHttpTransport.java
rename to
juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/JavaHttpTransport.java
index 2279db319c..765127adfc 100644
---
a/juneau-rest/juneau-rest-client-java-httpclient/src/main/java/org/apache/juneau/rest/client/javahttpclient/JavaHttpTransport.java
+++
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/JavaHttpTransport.java
@@ -14,20 +14,21 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.juneau.rest.client.javahttpclient;
+package org.apache.juneau.rest.client;
import java.io.*;
import java.net.http.*;
import java.net.http.HttpRequest.*;
import java.net.http.HttpResponse.*;
-import org.apache.juneau.rest.client.*;
-
/**
* {@link HttpTransport} implementation backed by the JDK's built-in {@link
java.net.http.HttpClient}.
*
* <p>
- * No external dependencies are required — this transport is always available
on Java 11+.
+ * This is the <b>default</b> transport used by {@link RestClient}. It is
built into the
+ * {@code juneau-rest-client} artifact, requires no external dependencies, and
is always available on Java 11+.
+ *
+ * <p>
* It is auto-discovered via {@link java.util.ServiceLoader} and can also be
instantiated explicitly:
*
* <p class='bjava'>
@@ -40,12 +41,6 @@ import org.apache.juneau.rest.client.*;
* .build();
* </p>
*
- * <p>
- * <b>Beta — API subject to change:</b> This type is part of the
next-generation REST client and HTTP stack
- * ({@code org.apache.juneau.ng.*}).
- * It is not API-frozen: binary- and source-incompatible changes may appear in
the <b>next major</b> Juneau release
- * (and possibly earlier).
- *
* <h5 class='section'>See Also:</h5><ul>
* <li class='link'><a class="doclink"
href="https://juneau.apache.org/docs/topics/juneau-ng-rest-client">juneau-ng
REST client</a>
* </ul>
diff --git
a/juneau-rest/juneau-rest-client-java-httpclient/src/main/java/org/apache/juneau/rest/client/javahttpclient/JavaHttpTransportBuilder.java
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/JavaHttpTransportBuilder.java
similarity index 83%
rename from
juneau-rest/juneau-rest-client-java-httpclient/src/main/java/org/apache/juneau/rest/client/javahttpclient/JavaHttpTransportBuilder.java
rename to
juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/JavaHttpTransportBuilder.java
index 2c9470c336..d72d354b13 100644
---
a/juneau-rest/juneau-rest-client-java-httpclient/src/main/java/org/apache/juneau/rest/client/javahttpclient/JavaHttpTransportBuilder.java
+++
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/JavaHttpTransportBuilder.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.juneau.rest.client.javahttpclient;
+package org.apache.juneau.rest.client;
import java.net.http.*;
@@ -24,12 +24,6 @@ import java.net.http.*;
* <p>
* Obtain an instance via {@link JavaHttpTransport#builder()}.
*
- * <p>
- * <b>Beta — API subject to change:</b> This type is part of the
next-generation REST client and HTTP stack
- * ({@code org.apache.juneau.ng.*}).
- * It is not API-frozen: binary- and source-incompatible changes may appear in
the <b>next major</b> Juneau release
- * (and possibly earlier).
- *
* <h5 class='section'>See Also:</h5><ul>
* <li class='link'><a class="doclink"
href="https://juneau.apache.org/docs/topics/juneau-ng-rest-client">juneau-ng
REST client</a>
* </ul>
diff --git
a/juneau-rest/juneau-rest-client-java-httpclient/src/main/java/org/apache/juneau/rest/client/javahttpclient/JavaHttpTransportProvider.java
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/JavaHttpTransportProvider.java
similarity index 77%
rename from
juneau-rest/juneau-rest-client-java-httpclient/src/main/java/org/apache/juneau/rest/client/javahttpclient/JavaHttpTransportProvider.java
rename to
juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/JavaHttpTransportProvider.java
index 8e5f2f537b..16d25a8afe 100644
---
a/juneau-rest/juneau-rest-client-java-httpclient/src/main/java/org/apache/juneau/rest/client/javahttpclient/JavaHttpTransportProvider.java
+++
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/JavaHttpTransportProvider.java
@@ -14,22 +14,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.juneau.rest.client.javahttpclient;
-
-import org.apache.juneau.rest.client.*;
+package org.apache.juneau.rest.client;
/**
* {@link HttpTransportProvider} implementation that supplies a {@link
JavaHttpTransport}.
*
* <p>
* Registered via {@code
META-INF/services/org.apache.juneau.rest.client.HttpTransportProvider} so that
- * {@code RestClient} can auto-discover the JDK HTTP client when no
higher-priority transport is present.
- *
- * <p>
- * <b>Beta — API subject to change:</b> This type is part of the
next-generation REST client and HTTP stack
- * ({@code org.apache.juneau.ng.*}).
- * It is not API-frozen: binary- and source-incompatible changes may appear in
the <b>next major</b> Juneau release
- * (and possibly earlier).
+ * {@code RestClient} auto-discovers the JDK HTTP client when no
higher-priority transport is present.
+ * Since the JDK transport ships in the {@code juneau-rest-client} artifact
itself, it is always available
+ * unless overridden by a sibling transport module with a lower priority value.
*
* <h5 class='section'>See Also:</h5><ul>
* <li class='link'><a class="doclink"
href="https://juneau.apache.org/docs/topics/juneau-ng-rest-client">juneau-ng
REST client</a>
diff --git
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
index 9c71a742ed..fbc0a0aa2c 100644
---
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
+++
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
@@ -35,7 +35,7 @@ import org.apache.juneau.rest.client.remote.*;
* <p>
* Create instances via {@link #create()} or {@link #builder()}:
* <p class='bjava'>
- * <jc>// Minimal — auto-discovers a transport via ServiceLoader</jc>
+ * <jc>// Minimal — uses the built-in JDK HttpClient transport</jc>
* RestClient <jv>client</jv> = RestClient.<jsm>create</jsm>();
*
* <jc>// Explicit transport (e.g. for tests)</jc>
@@ -46,12 +46,12 @@ import org.apache.juneau.rest.client.remote.*;
* </p>
*
* <p>
- * <b>Beta — API subject to change:</b> This type is part of the
next-generation REST client and HTTP stack
- * ({@code org.apache.juneau.ng.*}).
- * It is not API-frozen: binary- and source-incompatible changes may appear in
the <b>next major</b> Juneau release
- * (and possibly earlier).
- * For production use cases that require long-term binary stability, continue
using the existing
- * {@code juneau-rest-client} and {@code juneau-rest-common} APIs until the
{@code ng} stack is declared stable.
+ * By default, {@code RestClient} uses {@link JavaHttpTransport} (backed by
the JDK's
+ * {@link java.net.http.HttpClient}), which ships built into the {@code
juneau-rest-client} artifact and
+ * requires no extra dependencies on Java 11+. Pulling in one of the optional
transport modules
+ * ({@code juneau-rest-client-apache-httpclient-45}, {@code
-apache-httpclient-50}, {@code -okhttp},
+ * {@code -jetty}) registers a higher-priority provider via {@link
java.util.ServiceLoader} that takes
+ * over automatically. An explicit {@link Builder#transport(HttpTransport)}
call always wins.
*
* <h5 class='section'>See Also:</h5><ul>
* <li class='link'><a class="doclink"
href="https://juneau.apache.org/docs/topics/juneau-ng-rest-client">juneau-ng
REST client</a>
@@ -102,8 +102,8 @@ public final class RestClient implements Closeable {
for (var p : ServiceLoader.load(HttpTransportProvider.class))
if (p.isAvailable())
providers.add(p);
- if (providers.isEmpty()) // HTT: requires test classpath with
no transport modules present
- return null;
+ if (providers.isEmpty())
+ return JavaHttpTransport.create(); // defensive
fallback if META-INF/services was stripped (e.g. uber-jar shading)
providers.sort(Comparator.comparingInt(HttpTransportProvider::getPriority));
return providers.get(0).create();
}
@@ -256,7 +256,9 @@ public final class RestClient implements Closeable {
* Sets the HTTP transport to use.
*
* <p>
- * If not set, {@link RestClient} will discover a transport via
{@link java.util.ServiceLoader}.
+ * If not set, {@link RestClient} discovers a transport via
{@link java.util.ServiceLoader}. When no
+ * sibling transport module is on the classpath, the built-in
{@link JavaHttpTransport} (backed by the JDK's
+ * {@link java.net.http.HttpClient}) is used as the default.
*
* @param value The transport. Must not be <jk>null</jk>.
* @return This object.
diff --git
a/juneau-rest/juneau-rest-client-java-httpclient/src/main/resources/META-INF/services/org.apache.juneau.rest.client.HttpTransportProvider
b/juneau-rest/juneau-rest-client/src/main/resources/META-INF/services/org.apache.juneau.rest.client.HttpTransportProvider
similarity index 91%
rename from
juneau-rest/juneau-rest-client-java-httpclient/src/main/resources/META-INF/services/org.apache.juneau.rest.client.HttpTransportProvider
rename to
juneau-rest/juneau-rest-client/src/main/resources/META-INF/services/org.apache.juneau.rest.client.HttpTransportProvider
index 044b949de2..e922c1398b 100644
---
a/juneau-rest/juneau-rest-client-java-httpclient/src/main/resources/META-INF/services/org.apache.juneau.rest.client.HttpTransportProvider
+++
b/juneau-rest/juneau-rest-client/src/main/resources/META-INF/services/org.apache.juneau.rest.client.HttpTransportProvider
@@ -13,4 +13,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-org.apache.juneau.rest.client.javahttpclient.JavaHttpTransportProvider
+org.apache.juneau.rest.client.JavaHttpTransportProvider
diff --git a/juneau-rest/pom.xml b/juneau-rest/pom.xml
index 0415f75525..058b9d83e7 100644
--- a/juneau-rest/pom.xml
+++ b/juneau-rest/pom.xml
@@ -42,7 +42,6 @@
<module>juneau-rest-mock</module>
<module>juneau-rest-client-apache-httpclient-45</module>
<module>juneau-rest-client-apache-httpclient-50</module>
- <module>juneau-rest-client-java-httpclient</module>
<module>juneau-rest-client-okhttp</module>
<module>juneau-rest-client-jetty</module>
</modules>
diff --git a/juneau-utest/pom.xml b/juneau-utest/pom.xml
index 6c9b335068..7af9bd1459 100644
--- a/juneau-utest/pom.xml
+++ b/juneau-utest/pom.xml
@@ -105,11 +105,6 @@
<artifactId>juneau-rest-client-apache-httpclient-50</artifactId>
<version>${project.version}</version>
</dependency>
- <dependency>
- <groupId>org.apache.juneau</groupId>
-
<artifactId>juneau-rest-client-java-httpclient</artifactId>
- <version>${project.version}</version>
- </dependency>
<dependency>
<groupId>org.apache.juneau</groupId>
<artifactId>juneau-rest-client-okhttp</artifactId>
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/rest/client/JavaHttpTransport_Test.java
b/juneau-utest/src/test/java/org/apache/juneau/rest/client/JavaHttpTransport_Test.java
index 95d3124ce5..903406852b 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/rest/client/JavaHttpTransport_Test.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/rest/client/JavaHttpTransport_Test.java
@@ -24,7 +24,6 @@ import java.net.http.*;
import java.nio.charset.*;
import org.apache.juneau.http.entity.*;
-import org.apache.juneau.rest.client.javahttpclient.*;
import org.junit.jupiter.api.*;
import com.sun.net.httpserver.*;
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RemoteInterfaceTransport_Test.java
b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RemoteInterfaceTransport_Test.java
index 5a3167f384..082679d541 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RemoteInterfaceTransport_Test.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RemoteInterfaceTransport_Test.java
@@ -30,7 +30,6 @@ import org.apache.juneau.microservice.*;
import org.apache.juneau.http.entity.*;
import org.apache.juneau.rest.client.apachehttpclient45.*;
import org.apache.juneau.rest.client.apachehttpclient50.*;
-import org.apache.juneau.rest.client.javahttpclient.*;
import org.apache.juneau.rest.client.jetty.*;
import org.apache.juneau.rest.client.okhttp.*;
import org.apache.juneau.rest.annotation.*;
diff --git a/todo/FINISHED-41-merge-java-httpclient-default-transport.md
b/todo/FINISHED-41-merge-java-httpclient-default-transport.md
new file mode 100644
index 0000000000..6b69182f58
--- /dev/null
+++ b/todo/FINISHED-41-merge-java-httpclient-default-transport.md
@@ -0,0 +1,65 @@
+# FINISHED-41: Merged `juneau-rest-client-java-httpclient` into
`juneau-rest-client`; JDK HttpClient is now the built-in default transport
+
+## Outcome
+
+The unreleased `juneau-rest-client-java-httpclient` module has been folded
into the canonical `juneau-rest-client` artifact. `JavaHttpTransport`,
`JavaHttpTransportBuilder`, and `JavaHttpTransportProvider` were promoted to
the root `org.apache.juneau.rest.client` package and ship inside
`juneau-rest-client` itself.
+
+End-user effect:
+
+- `RestClient.create()` now works out of the box on Java 11+ with **zero**
third-party dependencies — no transport module required.
+- Pulling in one of the optional transport siblings
(`juneau-rest-client-apache-httpclient-45`, `-apache-httpclient-50`, `-okhttp`,
`-jetty`) registers a higher-priority `HttpTransportProvider` via
`ServiceLoader` and automatically takes over discovery.
+- `RestClient.builder().transport(...)` always wins over auto-discovery.
+- `RestClient.discoverTransport()` now defensively falls back to
`JavaHttpTransport.create()` when `ServiceLoader` returns no providers (covers
heavily-shaded uber-jars where `META-INF/services` files can be stripped).
+
+## What changed
+
+### Sources
+
+-
`juneau-rest/juneau-rest-client-java-httpclient/src/main/java/org/apache/juneau/rest/client/javahttpclient/JavaHttpTransport.java`
→
`juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/JavaHttpTransport.java`
+- `…/JavaHttpTransportBuilder.java` →
`…/rest/client/JavaHttpTransportBuilder.java`
+- `…/JavaHttpTransportProvider.java` →
`…/rest/client/JavaHttpTransportProvider.java`
+-
`…/src/main/resources/META-INF/services/org.apache.juneau.rest.client.HttpTransportProvider`
→
`juneau-rest/juneau-rest-client/src/main/resources/META-INF/services/org.apache.juneau.rest.client.HttpTransportProvider`
(content updated to `org.apache.juneau.rest.client.JavaHttpTransportProvider`)
+- The stale "Beta — part of `org.apache.juneau.ng.*`" boilerplate was removed
from each class's javadoc since the NG promotion is already complete.
+
+### `RestClient`
+
+- Class-level javadoc updated to describe the JDK HttpClient transport as the
built-in default and to document the override paths.
+- `discoverTransport()` now falls through to `JavaHttpTransport.create()` when
`ServiceLoader` finds no providers (was returning `null`, which then failed
`assertArgNotNull`).
+- `Builder.transport(...)` javadoc now references the JDK default.
+
+### Module removal
+
+- `juneau-rest/juneau-rest-client-java-httpclient/` directory deleted entirely.
+- `<module>juneau-rest-client-java-httpclient</module>` removed from
`juneau-rest/pom.xml`.
+- `<dependency>juneau-rest-client-java-httpclient</dependency>` removed from
`juneau-utest/pom.xml`.
+
+### Tests
+
+-
`juneau-utest/src/test/java/org/apache/juneau/rest/client/JavaHttpTransport_Test.java`
— dropped the now-redundant `import
org.apache.juneau.rest.client.javahttpclient.*;`.
+-
`juneau-utest/src/test/java/org/apache/juneau/rest/client/RemoteInterfaceTransport_Test.java`
— same.
+- `RestClient_Test.h01_create_autoDiscoversTransport` continues to pass with
no source change — it asserted `client.getTransport() != null`, which is now
satisfied by the new fallback as well as by the in-jar SPI registration.
+
+### Documentation (`juneau-docs`)
+
+- `pages/topics/12.15.NextGenRestClient.md` — removed the
`juneau-rest-client-java-httpclient` row from the transports table, added a
one-paragraph callout above the table explaining the JDK transport is built-in
/ default, and updated the logging example so it no longer manually wires
`JavaHttpTransport.create()`.
+- `pages/topics/20.03.JuneauShadedRestClient.md` — reworded the dependencies
section to call out the built-in JDK transport and clarified the role of the
optional transport modules.
+- `pages/release-notes/9.5.0.md` — refreshed the TODO-38 transports table to
delete the JDK row, then added a new "JDK `HttpClient` is now the built-in
default transport (TODO-41)" section with usage examples.
+
+No migration-guide update was needed — the deleted module was never released,
so no external consumer can have referenced it.
+
+## Verification
+
+- `mvn -pl juneau-rest/juneau-rest-client dependency:tree` —
`juneau-rest-client` carries only Juneau-internal deps (`juneau-rest-common` →
`juneau-commons`, `juneau-marshall`, `juneau-assertions`). No
`org.apache.httpcomponents:*` or any third-party HTTP client lib.
+- `python3 scripts/test.py --full` — clean build of all 52 modules + full test
suite green. ~50,700 surefire tests, 0 failures, 0 errors.
+- Cross-transport scenarios (`RemoteInterfaceTransport_Test`) all 60 cases
pass against the five transports (JDK HttpClient + HC 4.5 + HC 5 + OkHttp +
Jetty).
+
+## Risk / rollback
+
+Very low. Three self-contained source files moved within the reactor, one SPI
string updated, one one-line fallback added in
`RestClient.discoverTransport()`. Rollback would be a single `git revert` of
the merge commit.
+
+## Out of scope (not changed by this TODO)
+
+- `MockHttpTransport` continues to be opt-in via explicit `transport(...)`; it
does not register a `ServiceLoader` provider.
+- The `HttpTransportProvider` SPI itself was not changed.
+- The classic REST client (`juneau-rest-client-classic`) was not touched.
+- No changes to provider priority numbers.
diff --git a/todo/TODO.md b/todo/TODO.md
index fec0d554a8..5fe63609c1 100644
--- a/todo/TODO.md
+++ b/todo/TODO.md
@@ -26,5 +26,3 @@
- [TODO-39] Add a `/sonarqube` Cursor command (and matching
`scripts/sonarqube.py` helper) that runs SonarQube analysis against a given
source file, package, or module — analogous to `/coverage` /
`scripts/coverage.py`. Should auto-detect the Maven module from the path,
invoke the SonarQube/SonarLint scanner, and print a concise per-file summary of
issues (rule id, severity, line, message) so the user can quickly triage Sonar
findings the same way they do JaCoCo coverage.
- [TODO-40] Remove Apache HttpClient 4.5 (`org.apache.http.*`) references from
`juneau-rest-common` and `juneau-rest-server`. The HC 4.5 dependency leaks into
server-side public APIs (e.g. `RequestHeaders.add(org.apache.http.Header...)`,
`RestRequest#getAllHeaders()` returning `org.apache.http.Header[]`,
`HttpEntityProcessor` keyed on `org.apache.http.HttpEntity`, `BasicStaticFiles`
taking `org.apache.http.Header[]`,
`FluentRequestLineAssertion`/`FluentProtocolVersionAssertion` over `org [...]
-
-- [TODO-41] juneau-rest-client should use JavaHttpTransport by default but
with options to pull in different transports.