This is an automated email from the ASF dual-hosted git repository.
ffang pushed a commit to branch 4.0.x-fixes
in repository https://gitbox.apache.org/repos/asf/cxf.git
The following commit(s) were added to refs/heads/4.0.x-fixes by this push:
new 6997767b4a [CXF-9099]GZIPOutInterceptor : ensure the CXF headers that
GZIPOutInterceptor needs to resize is modifiable
6997767b4a is described below
commit 6997767b4a359fffdaca4c190ce08b0b56332a7a
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
(cherry picked from commit 3ad942b22b2cd386fe446b82c9c81f28ee19c24d)
---
.../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");
}