This is an automated email from the ASF dual-hosted git repository. reta pushed a commit to branch 3.6.x-fixes in repository https://gitbox.apache.org/repos/asf/cxf.git
commit a0c73466dd660997ce2d98107dc74554147fb85a Author: Andriy Redko <[email protected]> AuthorDate: Sat Apr 15 12:34:47 2023 -0400 CXF-8833: GZIPInInterceptor, when processing HTTP 204 empty response, throws EOFException --- .../transport/common/gzip/GZIPInInterceptor.java | 5 ++ .../cxf/common/gzip/GZIPInInterceptorTest.java | 62 ++++++++++++++++++++++ 2 files changed, 67 insertions(+) diff --git a/core/src/main/java/org/apache/cxf/transport/common/gzip/GZIPInInterceptor.java b/core/src/main/java/org/apache/cxf/transport/common/gzip/GZIPInInterceptor.java index 6ddf69718d..b2505a3bfc 100644 --- a/core/src/main/java/org/apache/cxf/transport/common/gzip/GZIPInInterceptor.java +++ b/core/src/main/java/org/apache/cxf/transport/common/gzip/GZIPInInterceptor.java @@ -82,6 +82,11 @@ public class GZIPInInterceptor extends AbstractPhaseInterceptor<Message> { return; } + final Integer responseCode = (Integer)message.get(Message.RESPONSE_CODE); + if (responseCode != null && responseCode == 204) { + return; + } + // wrap an unzipping stream around the original one GZIPInputStream zipInput = new GZIPInputStream(is); message.setContent(InputStream.class, zipInput); diff --git a/core/src/test/java/org/apache/cxf/common/gzip/GZIPInInterceptorTest.java b/core/src/test/java/org/apache/cxf/common/gzip/GZIPInInterceptorTest.java new file mode 100644 index 0000000000..1e00d1f09a --- /dev/null +++ b/core/src/test/java/org/apache/cxf/common/gzip/GZIPInInterceptorTest.java @@ -0,0 +1,62 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.cxf.common.gzip; + +import java.io.InputStream; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +import org.apache.cxf.helpers.HttpHeaderHelper; +import org.apache.cxf.message.Message; +import org.apache.cxf.message.MessageImpl; +import org.apache.cxf.transport.common.gzip.GZIPInInterceptor; + +import org.junit.Before; +import org.junit.Test; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.junit.Assert.assertThat; + +public class GZIPInInterceptorTest { + private Message message; + + @Before + public void setUp() { + final Map<String, List<String>> heeaders = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); + heeaders.put(HttpHeaderHelper.CONTENT_ENCODING, Collections.singletonList("gzip")); + + message = new MessageImpl(); + message.put(Message.PROTOCOL_HEADERS, heeaders); + } + + @Test + public void testNoContent() { + final GZIPInInterceptor interceptor = new GZIPInInterceptor(); + final InputStream nullInputStream = InputStream.nullInputStream(); + + message.setContent(InputStream.class, nullInputStream); + message.put(Message.RESPONSE_CODE, 204); + + interceptor.handleMessage(message); + assertThat(message.getContent(InputStream.class), equalTo(nullInputStream)); + } +}
