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

ffang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cxf.git


The following commit(s) were added to refs/heads/main by this push:
     new 3ad942b22b [CXF-9099]GZIPOutInterceptor : ensure the CXF headers that 
GZIPOutInterceptor needs to resize is modifiable
3ad942b22b is described below

commit 3ad942b22b2cd386fe446b82c9c81f28ee19c24d
Author: Freeman Fang <[email protected]>
AuthorDate: Mon Jan 13 11:53:57 2025 -0500

    [CXF-9099]GZIPOutInterceptor : ensure the CXF headers that 
GZIPOutInterceptor needs to resize is modifiable
---
 .../cxf/transport/common/gzip/GZIPOutInterceptor.java |  2 ++
 .../systest/http_undertow/UndertowDigestAuthTest.java | 19 +++++++++++++++++--
 2 files changed, 19 insertions(+), 2 deletions(-)

diff --git 
a/core/src/main/java/org/apache/cxf/transport/common/gzip/GZIPOutInterceptor.java
 
b/core/src/main/java/org/apache/cxf/transport/common/gzip/GZIPOutInterceptor.java
index d7fc1686d8..6f6e1eaccb 100644
--- 
a/core/src/main/java/org/apache/cxf/transport/common/gzip/GZIPOutInterceptor.java
+++ 
b/core/src/main/java/org/apache/cxf/transport/common/gzip/GZIPOutInterceptor.java
@@ -329,6 +329,8 @@ public class GZIPOutInterceptor extends 
AbstractPhaseInterceptor<Message> {
             message.put(Message.PROTOCOL_HEADERS, headers);
         }
         List<String> header = headers.computeIfAbsent(name, k -> new 
ArrayList<>());
+        header = new ArrayList<String>(header); //ensure header List is 
modifiable
+        headers.put(name, header);
         if (header.isEmpty() || !header.contains(value)) {
             header.add(value);
         }
diff --git 
a/systests/transport-undertow/src/test/java/org/apache/cxf/systest/http_undertow/UndertowDigestAuthTest.java
 
b/systests/transport-undertow/src/test/java/org/apache/cxf/systest/http_undertow/UndertowDigestAuthTest.java
index 448bf49bac..0ca1acc209 100644
--- 
a/systests/transport-undertow/src/test/java/org/apache/cxf/systest/http_undertow/UndertowDigestAuthTest.java
+++ 
b/systests/transport-undertow/src/test/java/org/apache/cxf/systest/http_undertow/UndertowDigestAuthTest.java
@@ -20,7 +20,11 @@
 package org.apache.cxf.systest.http_undertow;
 
 import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 import java.util.Map;
+import java.util.TreeMap;
 
 import javax.xml.namespace.QName;
 
@@ -42,6 +46,7 @@ import org.apache.cxf.phase.AbstractPhaseInterceptor;
 import org.apache.cxf.phase.Phase;
 import org.apache.cxf.testutil.common.AbstractBusTestServerBase;
 import org.apache.cxf.testutil.common.AbstractClientServerTestBase;
+import org.apache.cxf.transport.common.gzip.GZIPOutInterceptor;
 import org.apache.cxf.transport.http.HTTPConduit;
 import org.apache.cxf.transport.http.HTTPConduitConfigurer;
 import org.apache.cxf.transport.http.asyncclient.hc5.AsyncHTTPConduit;
@@ -112,6 +117,7 @@ public class UndertowDigestAuthTest extends 
AbstractClientServerTestBase {
         BindingProvider bp = (BindingProvider)greeter;
         ClientProxy.getClient(greeter).getInInterceptors().add(new 
LoggingInInterceptor());
         ClientProxy.getClient(greeter).getOutInterceptors().add(new 
LoggingOutInterceptor());
+        ClientProxy.getClient(greeter).getOutInterceptors().add(new 
GZIPOutInterceptor());
         bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
                                    ADDRESS);
         HTTPConduit cond = 
(HTTPConduit)ClientProxy.getClient(greeter).getConduit();
@@ -132,10 +138,19 @@ public class UndertowDigestAuthTest extends 
AbstractClientServerTestBase {
         }
 
         ClientProxy.getClient(greeter).getOutInterceptors()
-            .add(new 
AbstractPhaseInterceptor<Message>(Phase.PRE_STREAM_ENDING) {
+            .add(new AbstractPhaseInterceptor<Message>(Phase.USER_LOGICAL) {
 
                 public void handleMessage(Message message) throws Fault {
-                    Map<String, ?> headers = CastUtils.cast((Map<?, 
?>)message.get(Message.PROTOCOL_HEADERS));
+                    Map<String, List<Object>> headers = 
+                        CastUtils.cast((Map<?, 
?>)message.get(Message.PROTOCOL_HEADERS));
+                    if (headers == null) {
+                        headers = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
+                        message.put(Message.PROTOCOL_HEADERS, headers);
+                    }
+                    List<Object> header = 
+                        
(List<Object>)headers.computeIfAbsent("Accept-Encoding", k -> new 
ArrayList<>());
+                    header = Arrays.asList(header.toArray());
+                    headers.put("Accept-Encoding", header);
                     if (headers.containsKey("Proxy-Authorization")) {
                         throw new RuntimeException("Should not have 
Proxy-Authorization");
                     }

Reply via email to