Freeman Yue Fang created CXF-9099:
-------------------------------------
Summary: GZIPOutInterceptor : ensure the CXF headers that
GZIPOutInterceptor needs to resize is modifiable
Key: CXF-9099
URL: https://issues.apache.org/jira/browse/CXF-9099
Project: CXF
Issue Type: Bug
Components: Transports
Reporter: Freeman Yue Fang
Assignee: Freeman Yue Fang
In GZIPOutInterceptor some times we need to add new element in CXF headers.
For example
{code}
/**
* Adds a value to a header. If the given header name is not currently
* set in the message, an entry is created with the given single value.
* If the header is already set, the value is appended to the first
* element of the list, following a comma.
*
* @param message the message
* @param name the header to set
* @param value the value to add
*/
private static void addHeader(Message message, String name, String value) {
Map<String, List<String>> 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<String> header = headers.computeIfAbsent(name, k -> new
ArrayList<>());
header = new ArrayList<String>(header); //ensure header List is
modifiable
if (header.isEmpty() || !header.contains(value)) {
header.add(value);
}
}
{code}
But in some cases the header here
{code}
List<String> header = headers.computeIfAbsent(name, k -> new
ArrayList<>());
{code}
isn't modifiable. Like if the previous header was created by code
Arrays.asList(...) which returns a unmodifiable List per java17 doc. In this
case java.lang.UnsupportedOperationException is thrown
--
This message was sent by Atlassian Jira
(v8.20.10#820010)