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)

Reply via email to