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 742071ac891..c3f303921d2 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 Object aroundReadFrom(final ReaderInterceptorContext context) throws IOEx } final MultivaluedMap 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 cd7fc8f4596..c59264cb6c7 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.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 void testGetJaxbBookCacheByValue() { } } + @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 Response getJaxbBook() { 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 {