flushHeaders(httpResponse, httpHeaders);
return;
}
// we have an entity, set the response media type
MediaType responseMediaType = context.getResponseMediaType();
if (responseMediaType != null) {
httpResponse.setContentType(responseMediaType.toString());
}
// get the provider to write the entity
Providers providers = context.getProviders();
MessageBodyWriter<Object> messageBodyWriter =
(MessageBodyWriter<Object>)providers.getMessageBodyWriter(rawType,
genericType,
declaredAnnotations,
responseMediaType);
// use the provider to write the entity
if (messageBodyWriter != null) {
logger.debug("Serialization using provider {}", messageBodyWriter.getClass().getName());
final MultivaluedMap<String, Object> headers = httpHeaders;
long size =
messageBodyWriter.getSize(entity,
rawType,
genericType,
declaredAnnotations,
responseMediaType);
if (size >= 0) {
headers.putSingle(HttpHeaders.CONTENT_LENGTH, String.valueOf(size));
}
FlushHeadersOutputStream outputStream =
new FlushHeadersOutputStream(httpResponse, headers);
messageBodyWriter.writeTo(entity,
rawType,
genericType,
declaredAnnotations,
responseMediaType,
httpHeaders,
outputStream);
outputStream.flushHeaders();
return;
} else {
logger
.warn("Could not find a writer for {} and {}. Try to find JAF DataSourceProvider",
entity.getClass().getName(),
responseMediaType);
}
DataContentHandler dataContentHandler = null;
// Write Entity with ASF DataContentHandler
// try to find a data handler using JavaBeans Activation Framework, if
// found use DataSourceProvider
dataContentHandler =
CommandMap.getDefaultCommandMap()
.createDataContentHandler(responseMediaType.toString());
if (dataContentHandler == null) {
logger.error("Could not find a DataSourceProvider for {} ", responseMediaType);
throw new WebApplicationException(500);
}
FlushHeadersOutputStream outputStream =
new FlushHeadersOutputStream(httpResponse, httpHeaders);
dataContentHandler.writeTo(entity, responseMediaType.toString(), outputStream);
outputStream.flushHeaders();
}