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

kwin pushed a commit to branch feature/brotli-compression
in repository https://gitbox.apache.org/repos/asf/maven-resolver.git

commit 30cc9ec4e8cce3aece2006c74469aba065005956
Author: Konrad Windszus <[email protected]>
AuthorDate: Mon Jan 19 09:22:11 2026 +0100

    Support brotli compression
    
    WIP
    
    This closes #1744
---
 maven-resolver-test-http/pom.xml                   |  4 +++
 .../aether/internal/test/util/http/HttpServer.java |  4 +++
 .../aether/transport/jdk/JdkTransporter.java       |  3 +-
 .../aether/transport/jdk/JdkTransporterTest.java   | 37 ++++++++++++++++++++++
 4 files changed, 47 insertions(+), 1 deletion(-)

diff --git a/maven-resolver-test-http/pom.xml b/maven-resolver-test-http/pom.xml
index 9617490fa..489c10cf0 100644
--- a/maven-resolver-test-http/pom.xml
+++ b/maven-resolver-test-http/pom.xml
@@ -81,6 +81,10 @@
       <groupId>org.eclipse.jetty.compression</groupId>
       <artifactId>jetty-compression-server</artifactId>
     </dependency>
+    <dependency>
+      <groupId>org.eclipse.jetty.compression</groupId>
+      <artifactId>jetty-compression-brotli</artifactId>
+    </dependency>
     <dependency>
       <groupId>jakarta.servlet</groupId>
       <artifactId>jakarta.servlet-api</artifactId>
diff --git 
a/maven-resolver-test-http/src/main/java/org/eclipse/aether/internal/test/util/http/HttpServer.java
 
b/maven-resolver-test-http/src/main/java/org/eclipse/aether/internal/test/util/http/HttpServer.java
index 0ca20510c..4af8781a0 100644
--- 
a/maven-resolver-test-http/src/main/java/org/eclipse/aether/internal/test/util/http/HttpServer.java
+++ 
b/maven-resolver-test-http/src/main/java/org/eclipse/aether/internal/test/util/http/HttpServer.java
@@ -43,6 +43,8 @@ import 
org.eclipse.aether.internal.impl.checksum.Sha1ChecksumAlgorithmFactory;
 import org.eclipse.aether.spi.connector.checksum.ChecksumAlgorithmHelper;
 import org.eclipse.aether.spi.connector.transport.http.RFC9457.RFC9457Payload;
 import org.eclipse.jetty.alpn.server.ALPNServerConnectionFactory;
+import org.eclipse.jetty.compression.brotli.BrotliCompression;
+import org.eclipse.jetty.compression.server.CompressionHandler;
 import org.eclipse.jetty.http.DateGenerator;
 import org.eclipse.jetty.http.HttpField;
 import org.eclipse.jetty.http.HttpHeader;
@@ -291,6 +293,8 @@ public class HttpServer {
         httpConnector = new ServerConnector(server);
         server.addConnector(httpConnector);
         server.setHandler(new Handler.Sequence(
+                // registers compressions detected via service loader
+                new CompressionHandler(),
                 new ConnectionClosingHandler(),
                 new ServerErrorHandler(),
                 new LogHandler(),
diff --git 
a/maven-resolver-transport-jdk-parent/maven-resolver-transport-jdk11/src/main/java/org/eclipse/aether/transport/jdk/JdkTransporter.java
 
b/maven-resolver-transport-jdk-parent/maven-resolver-transport-jdk11/src/main/java/org/eclipse/aether/transport/jdk/JdkTransporter.java
index f5b2b29a4..f3cf72743 100644
--- 
a/maven-resolver-transport-jdk-parent/maven-resolver-transport-jdk11/src/main/java/org/eclipse/aether/transport/jdk/JdkTransporter.java
+++ 
b/maven-resolver-transport-jdk-parent/maven-resolver-transport-jdk11/src/main/java/org/eclipse/aether/transport/jdk/JdkTransporter.java
@@ -328,7 +328,8 @@ final class JdkTransporter extends AbstractTransporter 
implements HttpTransporte
 
                 prepare(request);
                 try {
-                    response = send(request.build(), 
HttpResponse.BodyHandlers.ofInputStream());
+                    // 
+                    response = send(request.build(), 
HttpResponse.BodyHandlers..ofInputStream());
                     if (response.statusCode() >= MULTIPLE_CHOICES) {
                         if (resume && response.statusCode() == 
PRECONDITION_FAILED) {
                             closeBody(response);
diff --git 
a/maven-resolver-transport-jdk-parent/maven-resolver-transport-jdk11/src/test/java/org/eclipse/aether/transport/jdk/JdkTransporterTest.java
 
b/maven-resolver-transport-jdk-parent/maven-resolver-transport-jdk11/src/test/java/org/eclipse/aether/transport/jdk/JdkTransporterTest.java
index c480e8f55..35ea9b077 100644
--- 
a/maven-resolver-transport-jdk-parent/maven-resolver-transport-jdk11/src/test/java/org/eclipse/aether/transport/jdk/JdkTransporterTest.java
+++ 
b/maven-resolver-transport-jdk-parent/maven-resolver-transport-jdk11/src/test/java/org/eclipse/aether/transport/jdk/JdkTransporterTest.java
@@ -20,11 +20,14 @@ package org.eclipse.aether.transport.jdk;
 
 import java.net.ConnectException;
 import java.net.URI;
+import java.nio.charset.StandardCharsets;
 
 import org.eclipse.aether.internal.impl.DefaultPathProcessor;
 import org.eclipse.aether.internal.test.util.TestUtils;
 import org.eclipse.aether.internal.test.util.http.HttpTransporterTest;
+import org.eclipse.aether.internal.test.util.http.RecordingTransportListener;
 import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.spi.connector.transport.GetTask;
 import org.eclipse.aether.spi.connector.transport.PeekTask;
 import org.eclipse.aether.spi.connector.transport.Transporter;
 import org.junit.jupiter.api.Disabled;
@@ -134,4 +137,38 @@ class JdkTransporterTest extends HttpTransporterTest {
                 "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==",
                 JdkTransporter.getBasicAuthValue("Aladdin", "open 
sesame".toCharArray()));
     }
+    
+    @Test
+    void testGetWithBrotliCompression() {
+        // TODO: move to HttpTransporterTest once other transporters support 
brotli
+            httpServer.addSslConnector();
+            newTransporter(httpServer.getHttpsUrl());
+            RecordingTransportListener listener = new 
RecordingTransportListener();
+            GetTask task = new 
GetTask(URI.create("repo/file.txt")).setListener(listener);
+            transporter.get(task);
+            assertEquals("test", task.getDataString());
+            assertEquals(0L, listener.getDataOffset());
+            assertEquals(4L, listener.getDataLength());
+            assertEquals(1, listener.getStartedCount());
+            assertTrue(listener.getProgressedCount() > 0, "Count: " + 
listener.getProgressedCount());
+            assertEquals(task.getDataString(), 
listener.getBaos().toString(StandardCharsets.UTF_8));
+    }
+    
+    @Test
+    void testPutWithBrotliCompression() {
+        // TODO: checksum?
+        
+        // TODO: move to HttpTransporterTest once other transporters support 
brotli
+            httpServer.addSslConnector();
+            newTransporter(httpServer.getHttpsUrl());
+            RecordingTransportListener listener = new 
RecordingTransportListener();
+            GetTask task = new 
GetTask(URI.create("repo/file.txt")).setListener(listener);
+            transporter.get(task);
+            assertEquals("test", task.getDataString());
+            assertEquals(0L, listener.getDataOffset());
+            assertEquals(4L, listener.getDataLength());
+            assertEquals(1, listener.getStartedCount());
+            assertTrue(listener.getProgressedCount() > 0, "Count: " + 
listener.getProgressedCount());
+            assertEquals(task.getDataString(), 
listener.getBaos().toString(StandardCharsets.UTF_8));
+    }
 }

Reply via email to