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)); + } }
