2012-01-09 5 views
5

मैं एक jipaxputStream को दो अलग आउटपुटस्ट्रीम को javax.ws.rs.core.Response स्ट्रीम के रूप में वापस करने की कोशिश कर रहा हूं। जब मैं स्ट्रीम पुनर्प्राप्त करने के लिए एक वेब सेवा कॉल करता हूं, तो मुझे लगता है कि मुझे एक खाली स्ट्रीम वापस मिलती है। मैंने पहले एक GZipInputStream लौटने का प्रयास किया है, और मुझे क्लाइंट पक्ष पर अपेक्षित स्ट्रीम प्राप्त हुई है। क्या ZipInputStream के साथ कोई समस्या हो सकती है जो इसे ठीक से लौटने से रोकती है? मैं 2.4 (सर्वलेट-api) javax उपयोग कर रहा हूँ यह कैसे मेरे jax-रु सेवा (मैं इसे एक सा ही सरलीकृत) लग रहा है:एक जैक्स-आरएस प्रतिक्रिया वस्तु के रूप में ZipInputStream लौट रहा है

@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 

अंतिम पंक्ति, itemA गया चाहिए है पहली प्रविष्टि Jax-RS सेवा में धारा को जोड़ा गया है, लेकिन मैं एक अशक्त वापस हो रही है। कोई विचार यह क्या हो सकता है?

उत्तर

1

पहले ब्लॉक में ZipInputStream के बजाय ByteArrayInputStream का उपयोग करें, जो जटिल ज़िप प्रविष्टियों को पुन: सक्रिय करता है।

+0

हाँ! धन्यवाद। यह काम। मुझे कुछ डेटा वापस मिल रहा है (पहले, मुझे बस एक खाली धारा मिली)। क्या आप जानते हैं कि मैं दूसरी ब्लॉक पर धारा को कैसे परिवर्तित करूँगा और ज़िप्पेन्ट्री के माध्यम से फिर से घुमाएगा? जैसा कि यह खड़ा है, कोड अभी भी अंतिम पंक्ति पर शून्य हो जाता है। – theseeker

+0

ठीक है यह अभी किया: = ZipInputStream = new ZipInputStream (getZip.getResponseBodyAsStream()); और मुझे अपना आइटम ए और आइटम बी मिलता है। आपकी सहायताके लिए धन्यवाद! – theseeker

+0

'प्रोड्यूसिस 'MediaType.APPLICATION_XML पैरामीटर के बिना बेहतर लगता है (सुनिश्चित नहीं)। और स्ट्रीम के बजाय, आप बाइट [] को 'ओके' में इकाई पैरामीटर के रूप में पास करने का प्रयास कर सकते हैं। _ मुझे अनुभवी नहीं है ._ आप इसे बाइनरी इनपुट स्ट्रीम के रूप में डाउनलोड करने का प्रयास कर सकते हैं, i.o. कोशिश करने के लिए ZipInputStream। –

संबंधित मुद्दे