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 {