@Path("/download-service")
public class DownaloadService extends SecureRestService {
private static final AppLogger logger = AppLogger.getLogger(DownaloadService.class);
@POST
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public StreamingOutput getThumbnail(
@FormParam("securityKey") final String securityKey,
@FormParam("guid") final String guid) throws JSONException {
return new StreamingOutput() {
@Override
public void write(OutputStream out) throws IOException {
try {
if (!isAuthorized(securityKey)) {
response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
} else {
//Read thumbnail out of database and dovetail both streams(IOUtils.copy) to directly stream to the response without storing them in memory.
}
} catch (Throwable t) {
logger.error(t);
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, t.getMessage());
}
}
};
}
}
To test this code you can again use Jersey client api and to verify against response status or data you can use the ClientResponse class as shown below
Form form = new Form();
form.add("securityKey", getSecureToken());
form.add("guid", guid);
ClientResponse response = webResource.path(
"download-service").post(ClientResponse.class, form);
Assert.assertNotEquals(HttpServletResponse.SC_NOT_AUTHORIZED, response.getStatus());
ByteArrayOutputStream bos = new ByteArrayOutputStream();
IOUtils.copy(response.getEntityInputStream(), bos);
byte[] result = bos.toByteArray();
Assert.assertArrayEquals(expected, result);
