2012-01-09 58 views
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服務流,但我得到一個空回。任何想法可能會造成這種情況?

回答

1

在第一個塊中,使用ByteArrayInputStream而不是ZipInputStream,它複製複雜的zip條目。

+0

是的!謝謝。這工作。我收到一些數據(以前,我所得到的只是一個空的數據流)。你知道我將如何轉換第二個塊上的流並現在迭代這些zipentries?代碼仍然在最後一行返回null。 – theseeker 2012-01-09 21:16:40

+0

好吧,只是這樣做: ZipInputStream in = new ZipInputStream(getZip.getResponseBodyAsStream()); 和我得到我的itemA和itemB。謝謝你的幫助! – theseeker 2012-01-09 23:28:43

+0

如果沒有MediaType.APPLICATION_XML參數(不確定),'@ Produces'似乎更好。而不是流,你可以嘗試將byte []作爲實體參數傳遞給'ok'。 _我沒有經歷過。你可以先嚐試下載它作爲二進制InputStream,i.o. ZipInputStream,試試。 – 2012-01-09 23:35:44

相關問題