5
我想返回包含兩個不同輸出流的ZipInputStream作爲javax.ws.rs.core.Response流。當我進行Web服務調用來檢索流時,我注意到我得到了一個空流。 我已經嘗試過之前返回一個GZipInputStream,並且我已經收到客戶端上的預期流。 ZipInputStream會出現問題,阻止它正確返回? 我使用的javax 2.4(servlet的API) 這是我的JAX-RS服務的樣子(我已經簡化了一點):返回ZipInputStream作爲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("@[email protected]",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
在最後一行,意達應該是第一個條目加入到JAX-RS服務流,但我得到一個空回。任何想法可能會造成這種情況?
是的!謝謝。這工作。我收到一些數據(以前,我所得到的只是一個空的數據流)。你知道我將如何轉換第二個塊上的流並現在迭代這些zipentries?代碼仍然在最後一行返回null。 – theseeker 2012-01-09 21:16:40
好吧,只是這樣做: ZipInputStream in = new ZipInputStream(getZip.getResponseBodyAsStream()); 和我得到我的itemA和itemB。謝謝你的幫助! – theseeker 2012-01-09 23:28:43
如果沒有MediaType.APPLICATION_XML參數(不確定),'@ Produces'似乎更好。而不是流,你可以嘗試將byte []作爲實體參數傳遞給'ok'。 _我沒有經歷過。你可以先嚐試下載它作爲二進制InputStream,i.o. ZipInputStream,試試。 – 2012-01-09 23:35:44