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

Lukas-Finster pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git

commit 7727f5fff37c6cd8c2203429365db9f2a51a56d2
Author: Lukas Finster <[email protected]>
AuthorDate: Tue Aug 18 13:04:52 2026 +0200

    Implemented: GZip and deflate compression for rest-api (OFBIZ-13496)
---
 .../apache/ofbiz/ws/rs/core/OFBizApiConfig.java    |  5 ++
 .../ofbiz/ws/rs/test/RestTestHttpRequest.java      | 54 ++++++++++++++++++++++
 2 files changed, 59 insertions(+)

diff --git 
a/framework/rest-api/src/main/java/org/apache/ofbiz/ws/rs/core/OFBizApiConfig.java
 
b/framework/rest-api/src/main/java/org/apache/ofbiz/ws/rs/core/OFBizApiConfig.java
index cfc12e5bdc..1933019158 100644
--- 
a/framework/rest-api/src/main/java/org/apache/ofbiz/ws/rs/core/OFBizApiConfig.java
+++ 
b/framework/rest-api/src/main/java/org/apache/ofbiz/ws/rs/core/OFBizApiConfig.java
@@ -40,7 +40,10 @@ import org.apache.ofbiz.ws.rs.process.ServiceRequestHandler;
 import org.glassfish.jersey.jackson.JacksonFeature;
 import org.glassfish.jersey.logging.LoggingFeature;
 import org.glassfish.jersey.media.multipart.MultiPartFeature;
+import org.glassfish.jersey.message.DeflateEncoder;
+import org.glassfish.jersey.message.GZipEncoder;
 import org.glassfish.jersey.server.ResourceConfig;
+import org.glassfish.jersey.server.filter.EncodingFilter;
 import org.glassfish.jersey.server.model.Resource;
 import org.glassfish.jersey.server.model.ResourceMethod;
 
@@ -73,6 +76,8 @@ public class OFBizApiConfig extends ResourceConfig {
                     LoggingFeature.Verbosity.PAYLOAD_ANY, 10000));
         }
         registerDSLResources();
+        EncodingFilter.enableFor(this, GZipEncoder.class);
+        EncodingFilter.enableFor(this, DeflateEncoder.class);
     }
 
     /**
diff --git 
a/framework/rest-api/src/test/java/org/apache/ofbiz/ws/rs/test/RestTestHttpRequest.java
 
b/framework/rest-api/src/test/java/org/apache/ofbiz/ws/rs/test/RestTestHttpRequest.java
index 29e5df6176..b7c60ec79e 100644
--- 
a/framework/rest-api/src/test/java/org/apache/ofbiz/ws/rs/test/RestTestHttpRequest.java
+++ 
b/framework/rest-api/src/test/java/org/apache/ofbiz/ws/rs/test/RestTestHttpRequest.java
@@ -18,9 +18,15 @@
  
*******************************************************************************/
 package org.apache.ofbiz.ws.rs.test;
 
+import static org.junit.Assert.fail;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
 import java.util.Base64;
+import java.util.zip.GZIPInputStream;
+import java.util.zip.InflaterInputStream;
+import java.util.zip.ZipException;
 
 import org.apache.ofbiz.base.util.Debug;
 import org.apache.ofbiz.base.util.HttpClient;
@@ -173,6 +179,54 @@ class RestTestHttpRequest implements JupiterTestHelper {
         assertEquals("fr", localeSentViaAcceptLanguageHeader);
     }
 
+    @Test
+    void testGZipCompression() throws Exception {
+        HttpClient client = initHttpClient();
+        client.setHeader("Content-Type", "application/json");
+        client.setHeader("Authorization", "Bearer " + accessToken);
+        client.setHeader("Accept-Language", "fr");
+        client.setHeader("Accept-Encoding", "gzip");
+        client.setUrl(BASE_URL + "/exampleApi/returnSuccess");
+
+        byte[] rawBytes;
+        try (InputStream responseStream = client.postStream()) {
+            rawBytes = responseStream.readAllBytes();
+        }
+
+        // magic bytes for gzip
+        assertEquals((byte) 0x1f, rawBytes[0]);
+        assertEquals((byte) 0x8b, rawBytes[1]);
+
+        try (GZIPInputStream gis = new GZIPInputStream(new 
ByteArrayInputStream(rawBytes))) {
+            JsonNode root = mapper.readTree(gis);
+            assertEquals(200, root.path("statusCode").asInt());
+        } catch (JsonProcessingException e) {
+            fail("Error parsing rest auth response: " + e.getMessage());
+        }
+    }
+
+    @Test
+    void testDeflateCompression() throws Exception {
+        HttpClient client = initHttpClient();
+        client.setHeader("Content-Type", "application/json");
+        client.setHeader("Authorization", "Bearer " + accessToken);
+        client.setHeader("Accept-Language", "fr");
+        client.setHeader("Accept-Encoding", "deflate");
+        client.setUrl(BASE_URL + "/exampleApi/returnSuccess");
+
+        byte[] rawBytes;
+        try (InputStream responseStream = client.postStream()) {
+            rawBytes = responseStream.readAllBytes();
+        }
+
+        try (InflaterInputStream iis = new InflaterInputStream(new 
ByteArrayInputStream(rawBytes))) {
+            JsonNode root = mapper.readTree(iis);
+            assertEquals(200, root.path("statusCode").asInt());
+        } catch (JsonProcessingException | ZipException e) {
+            fail("Error parsing rest auth response: " + e.getMessage());
+        }
+    }
+
     @Test
     void testServiceInputParametersAsPath() throws Exception {
         HttpClient client = initHttpClient();

Reply via email to