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

reta 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 a63e031711 CXF-9210 Read JAX-RS requests with CacheControlFeature 
enabled and no Cache-Control header (#3026)
a63e031711 is described below

commit a63e031711888d5aa2fa8341812ce3f235288c5e
Author: gopackgo90 <[email protected]>
AuthorDate: Fri Apr 10 10:12:49 2026 -0500

    CXF-9210 Read JAX-RS requests with CacheControlFeature enabled and no 
Cache-Control header (#3026)
---
 .../cache/CacheControlClientReaderInterceptor.java |  3 +++
 .../cxf/jaxrs/client/cache/ClientCacheTest.java    | 28 ++++++++++++++++++++++
 2 files changed, 31 insertions(+)

diff --git 
a/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/cache/CacheControlClientReaderInterceptor.java
 
b/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/cache/CacheControlClientReaderInterceptor.java
index 742071ac89..c3f303921d 100644
--- 
a/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/cache/CacheControlClientReaderInterceptor.java
+++ 
b/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/cache/CacheControlClientReaderInterceptor.java
@@ -88,6 +88,9 @@ public class CacheControlClientReaderInterceptor implements 
ReaderInterceptor {
         }
         final MultivaluedMap<String, String> responseHeaders = 
context.getHeaders();
         final String cacheControlHeader = 
responseHeaders.getFirst(HttpHeaders.CACHE_CONTROL);
+        if (cacheControlHeader == null) {
+            return context.proceed();
+        }
         final CacheControl cacheControl = 
CacheControl.valueOf(cacheControlHeader);
 
         byte[] cachedBytes = null;
diff --git 
a/rt/rs/client/src/test/java/org/apache/cxf/jaxrs/client/cache/ClientCacheTest.java
 
b/rt/rs/client/src/test/java/org/apache/cxf/jaxrs/client/cache/ClientCacheTest.java
index cd7fc8f459..c59264cb6c 100644
--- 
a/rt/rs/client/src/test/java/org/apache/cxf/jaxrs/client/cache/ClientCacheTest.java
+++ 
b/rt/rs/client/src/test/java/org/apache/cxf/jaxrs/client/cache/ClientCacheTest.java
@@ -49,6 +49,7 @@ import org.junit.BeforeClass;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
 import static org.junit.Assert.assertNotNull;
 
 public class ClientCacheTest {
@@ -203,6 +204,25 @@ public class ClientCacheTest {
         }
     }
 
+    @Test
+    public void testGetNonCacheBook() {
+        try (CacheControlFeature feature = new CacheControlFeature()) {
+            final WebTarget base = 
ClientBuilder.newBuilder().register(feature).build().target(ADDRESS);
+            final Invocation.Builder cached =
+                    
setAsLocal(base.request("text/xml")).header(HttpHeaders.CACHE_CONTROL, 
"public");
+            final Response r = cached.get();
+            assertEquals(Response.Status.OK.getStatusCode(), r.getStatus());
+            final Book b1 = r.readEntity(Book.class);
+            assertEquals("JNonCache", b1.getName());
+            assertNotNull(b1.getId());
+            waitABit();
+            final Response r2 = cached.get();
+            final Book b2 = r2.readEntity(Book.class);
+            assertNotEquals(b1, b2);
+            assertEquals(b1.getName(), b2.getName());
+        }
+    }
+
     private static Invocation.Builder setAsLocal(final Invocation.Builder 
client) {
         
WebClient.getConfig(client).getRequestContext().put(LocalConduit.DIRECT_DISPATCH,
 Boolean.TRUE);
         return client;
@@ -232,6 +252,14 @@ public class ClientCacheTest {
             b.setName("JCache");
             return 
Response.ok(b).tag("123").cacheControl(CacheControl.valueOf("max-age=50000")).build();
         }
+        @GET
+        @Produces("text/xml")
+        public Response getNonCacheBook() {
+            Book b = new Book();
+            b.setId(System.currentTimeMillis());
+            b.setName("JNonCache");
+            return Response.ok(b).tag("123").build();
+        }
     }
     @XmlRootElement
     public static class Book implements Serializable {

Reply via email to