5

2つの異なる出力ストリームを含むZipInputStreamをjavax.ws.rs.core.ResponseStreamとして返そうとしています。ストリームを取得するためにWebサービスを呼び出すと、空のストリームが返されることに気付きました。以前にGZipInputStreamを返そうとしましたが、クライアント側で期待されるストリームを受信しました。ZipInputStreamに問題があり、正しく返されませんか?私はjavax2.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が返されます。これを引き起こしている可能性のあるアイデアはありますか?

4

1 に答える 1

1

最初のブロックでは、複雑な zip エントリを反復する のByteArrayInputStream代わりに を使用します。ZipInputStream

于 2012-01-09T20:00:35.533 に答える