You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "Fabien Thouny (JIRA)" <ji...@apache.org> on 2013/10/23 23:44:43 UTC

[jira] [Comment Edited] (CXF-5349) Provide ability to disable chunked transfer encoding for java.io.File entity

    [ https://issues.apache.org/jira/browse/CXF-5349?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13801872#comment-13801872 ] 

Fabien Thouny edited comment on CXF-5349 at 10/23/13 9:43 PM:
--------------------------------------------------------------

There's still a specific MBW named FileProvider returning the file's length for getSize, but, as expected, I can't find any call to this method in Jersey 2.x code.
I'll give it a try with a sample when I have some time, to see if the "Content-Length" is set somewhere else now.



was (Author: fabien.thouny):
There's still a specific MBR named FileProvider returning the file's length for getSize, but, as expected, I can't find any call to this method in Jersey 2.x code.
I'll give it a try with a sample when I have some time, to see if the "Content-Length" is set somewhere else now.


> Provide ability to disable chunked transfer encoding for java.io.File entity
> ----------------------------------------------------------------------------
>
>                 Key: CXF-5349
>                 URL: https://issues.apache.org/jira/browse/CXF-5349
>             Project: CXF
>          Issue Type: Improvement
>          Components: JAX-RS
>    Affects Versions: 2.7.7
>            Reporter: Fabien Thouny
>            Assignee: Sergey Beryozkin
>
> As it was done for byte array in CXF-4760, it will be nice to be able to disable chunked transfer encoding for java.io.File entity in BinaryDataProvider.
> I tried to provide a custom BinaryDataProvider as a workaround :
> {code}
> @Component
> @Provider
> public class CustomBinaryDataProvider extends BinaryDataProvider<Object> {
>     @Override
>     public long getSize(Object t, Class<?> type, Type genericType, Annotation[] annotations, MediaType mt) {
>         if (File.class.isAssignableFrom(t.getClass())) {
>             return ((File) t).length();
>         }
>         return super.getSize(t, type, genericType, annotations, mt);
>     }
> }
> {code}
> but it seems not to be enough because there's an explicit check in JAXRSUtils#writeMessageBody to put the "Content-Length" header only for byte arrays :
> {code}
> MessageBodyWriter<Object> writer = ((WriterInterceptorMBW)writers.get(0)).getMBW();
>             if (type == byte[].class) {
>                 long size = writer.getSize(entity, type, genericType, annotations, mediaType);
>                 if (size != -1) {
>                     httpHeaders.putSingle(HttpHeaders.CONTENT_LENGTH, Long.toString(size));
>                 }
>             }
>             writer.writeTo(entity, type, genericType, annotations, mediaType,
>                            httpHeaders, entityStream);
> {code}
> Thanks for your help,
> Fabien



--
This message was sent by Atlassian JIRA
(v6.1#6144)