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.

Reply via email to