[resteasy-dev] RESTEASY-2038

Jim Ma ema at redhat.com
Sun Oct 21 22:52:58 EDT 2018


Can we only use the request uri + method + request mediaType as the 
cache key ?
Will this resolve these two issues ?

Thanks,
Jim

On 10/18/2018 03:27 PM, Petr Jurak wrote:
> 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
>
>
>
> _______________________________________________
> resteasy-dev mailing list
> resteasy-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/resteasy-dev


-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/resteasy-dev/attachments/20181022/194dc93d/attachment.html 


More information about the resteasy-dev mailing list