Corey Bodendein created CXF-9210:
------------------------------------
Summary: JAX-RS Client Fails When CacheControlFeature is used but
Server Doesn't return Cache-Control Header
Key: CXF-9210
URL: https://issues.apache.org/jira/browse/CXF-9210
Project: CXF
Issue Type: Bug
Components: JAX-RS
Affects Versions: 3.6.10, 4.1.5, 4.2.0
Reporter: Corey Bodendein
When you add the {{org.apache.cxf.jaxrs.client.cache.CXFCacheControlFeature}}
to a JAX-RS client and use it with a server that does not return the
{{Cache-Control}} header, reading the whole response fails with a partial
stacktrace like:
{noformat}
javax.ws.rs.client.ResponseProcessingException: Problem with reading the data,
class java.lang.String, ContentType: text/plain.
at
org.apache.cxf.jaxrs.impl.ResponseImpl.reportMessageHandlerProblem(ResponseImpl.java:553)
at
org.apache.cxf.jaxrs.impl.ResponseImpl.doReadEntity(ResponseImpl.java:495)
at
org.apache.cxf.jaxrs.impl.ResponseImpl.readEntity(ResponseImpl.java:410)
at
org.apache.cxf.jaxrs.impl.ResponseImpl.readEntity(ResponseImpl.java:400)
...
Caused by: java.lang.IllegalArgumentException
at
org.apache.cxf.jaxrs.impl.CacheControlHeaderProvider.getTokens(CacheControlHeaderProvider.java:119)
at
org.apache.cxf.jaxrs.impl.CacheControlHeaderProvider.fromString(CacheControlHeaderProvider.java:71)
at
org.apache.cxf.jaxrs.impl.CacheControlHeaderProvider.fromString(CacheControlHeaderProvider.java:37)
at javax.ws.rs.core.CacheControl.valueOf(CacheControl.java:88)
at
org.apache.cxf.jaxrs.client.cache.CacheControlClientReaderInterceptor.aroundReadFrom(CacheControlClientReaderInterceptor.java:91)
at
org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBodyReader(JAXRSUtils.java:1603)
at
org.apache.cxf.jaxrs.impl.ResponseImpl.doReadEntity(ResponseImpl.java:474)
{noformat}
This looks to be because on these two lines,
https://github.com/apache/cxf/blob/cxf-3.6.10/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/cache/CacheControlClientReaderInterceptor.java#L90-L91
:
{code:java}
final String cacheControlHeader =
responseHeaders.getFirst(HttpHeaders.CACHE_CONTROL);
final CacheControl cacheControl = CacheControl.valueOf(cacheControlHeader);
{code}
If the server does not have the {{Cache-Control}} header,
{{cacheControlHeader}} is {{null}}, and {{CacheControl.valueOf(null)}} throws a
{{IllegalArgumentException}}.
{{org.apache.cxf.jaxrs.client.cache.CacheControlClientReaderInterceptor#aroundReadFrom}}
should return early in that case to prevent errors reading the response.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)