Fabien Thouny created CXF-5349:
----------------------------------
Summary: 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
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)