Hi,
I was looking into RESTEASY-2038 [1]. I'm not sure how to handle this
correctly so I need to know your opinion.
In the *org.jboss.resteasy.client.jaxrs.cache.CacheInterceptor* there is a
method for storing response in the cache containing this part.
*String contentType = (String)
response.getHeaderString(HttpHeaders.CONTENT_TYPE);*
*byte[] cached = ReadFromStream.readFromStream(1024,
response.getEntityStream());*
*MediaType mediaType = MediaType.valueOf(contentType);*
*final BrowserCache.Entry entry = cache.put(request.getUri().toString(),
mediaType,*
* response.getHeaders(), cached, expires, etag, lastModified);*
Later, once the same GET method is executed, the interceptor checks if
there is an entry in the cache for the given Accept type.
*BrowserCache.Entry entry = getEntry(request);*
In the getEntry method it checks for the type
*entry = cache.get(uri, accept);*
*if (entry != null) return entry;*
*if (MediaTypeHelper.isTextLike(accept))*
*{*
* entry = cache.get(uri, accept.withCharset("UTF-8"));*
* if (entry != null) return entry;*
*}*
Let's assume that resource returns XML data with Content-Type:
application/xml;charset=UTF-8
and the client sends Accept: application/xml
So the very first request adds into the cache entry for
application/xml;charset=UTF-8 because it is taken from Content-Type header.
Subsequent request gets the cached value (expecting that entry is not
expired), although it cannot find it under application/xml, it is found
under application/xml;charset=UTF-8 because of this:
*cache.get(uri, accept.withCharset("UTF-8"));*
The problem is if decide to change the code to use Accept instead of
current Content-Type, we can't be sure if there is Accept header in the
request and we're not sure about response encoding.
Also the statement in Jira regarding content type mismatch: like Accept is
application/json, but resource returns application/xml and to store it
under application/json instead of application/xml is IMHO wrong (coding
issue). I believe that it should be stored per actual content type.
Your thoughts?
Thanks!
Cheers,
Petr
[1]
https://issues.jboss.org/browse/RESTEASY-2038