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)

Reply via email to