我正在尝试将包含两个不同输出流的ZipInputStream作为javax.ws.rs.core.Response Stream返回。当我进行Web服务调用以检索流时,我注意到我得到一个空流回来。 我之前尝试过返回GZipInputStream,并且我已经在客户端收到了预期的流。 ZipInputStream是否存在阻止正确返回的问题? 我正在使用javax 2.4(servlet-api) 这就是我的jax-rs服务的样子(我已经简化了一点):
@GET
@Produces({"application/zip", MediaType.APPLICATION_XML})
public Response getZipFiles(@PathParam("id") final Integer id){
//Get required resources here
ByteArrayOutputStream bundledStream = new ByteArrayOutputStream();
ZipOutputStream out = new ZipOutputStream(bundledStream);
out.putNextEntry(new ZipEntry("Item A"));
out.write(outputStream.toByteArray());
out.closeEntry();
out.putNextEntry(new ZipEntry("Item B"));
out.write(defectiveBillOutputStream.toByteArray());
out.closeEntry();
out.close();
bundledStream.close();
ZipInputStream zis = new ZipInputStream(new ByteArrayInputStream(bundledStream.toByteArray()));
return Response.ok(zis).build();
}
这是调用服务的代码。我使用的是轴1.4:
HttpMethodBase getBillGroup = null;
String id = "1234";
String absoluteUrl = baseURL + BASE_SERVICE_PATH.replace("@id@",id) ;
getZip = new GetMethod(absoluteUrl);
HttpClient httpClient = new HttpClient();
try {
httpClient.executeMethod(getZip);
}
catch (Exception e) {
LOGGER.error("Error during retrieval " + e.getMessage());
}
InputStream dataToConvert = getZip.getResponseBodyAsStream();
ZipInputStream in = new ZipInputStream(dataToConvert);
ZipEntry itemA = in.getNextEntry();
//Do more things
在最后一行,itemA应该是添加到Jax-RS服务中的流的第一个条目,但是我得到了一个null。知道可能导致这种情况的原因吗?
答案 0 :(得分:1)
在第一个块中使用ByteArrayInputStream
而不是ZipInputStream
,它会迭代复杂的zip条目。