在Jboss6.10和RestEasy 2.2.1 GA上存在此问题,我找不到它不起作用的原因。我想gzip一个使用ClientProxy的Response文件,界面如下:
@POST
@Path("/download")
@GZIP
@Produces("application/octet-stream")
@Consumes("multipart/form-data")
Response getFile(@MultipartForm FileDownloadForm form);
实施:
@POST
@Path("/download")
@Consumes("multipart/form-data")
@GZIP
@Produces("application/octet-stream")
public Response getFile(@MultipartForm FileDownloadForm form) {
LOG.info("GetFile : " + form.getFilePath() + form.getFileName());
File file = new File(form.getFilePath() + form.getFileName());
if(file.exists()) {
GenericEntity<File> entity = new GenericEntity<File>(file) {};
return Response.ok(entity).build();
}
}
通过客户端调用时,如果我删除@GZIP,则每个文件至少需要60秒的下载时间,响应未压缩,但会立即显示。 Wireshark跟踪显示,使用压缩时,服务器在数据传输后需要60秒才能发送最终的ACK。这会阻止我的客户60秒钟。我认为这是某处超时?没有错误或显示其他错误。
客户端调用:
ClientResponse<File> cR = (ClientResponse<File>) systemApi.getFile(form);
File file = cR.getEntity(new GenericType<File>() {});
由于服务器端只是返回响应:
GenericEntity<File> entity = new GenericEntity<File>(file) {};
return Response.ok(entity).build();
如果不知道如何强制关闭流。
当不使用压缩时,如何强制显示预期的行为?
也许有人可以帮忙吗?此行为是否有可能在此处记录为错误? -> https://jira.jboss.org/browse/RESTEASY-1650
我不确定这里是否会给休闲专家带来任何帮助!
我解决这个问题的时间是花费在这个问题上。我可以修复此返回的流输出。因此,似乎客户端然后负责关闭流,并且确实如此。
现在我面临下一个问题,如果现在有2个资源用@GZIP注释,一个资源返回json数据列表,而另一个则返回八位字节流。
如果痛苦不会那么大,那很有趣,有时只有json资源returne会被压缩,而如果我再次重新启动jboss,则其他资源返回的流根本不会被压缩,这两个资源都返回了压缩数据,下次重新启动后,仅将json压缩,但不进行流传输。太奇怪了!客户端不会改变,它只是重启jboss服务器。这使gzip功能对我来说毫无用处。
我还尝试将resteasy升级到2.3.7.Final,但是没有运气。