2016-08-29 3 views
0

sammeln, um die Input (pdf der) und verschmelzen zu einem einzigen PDF-Dokument von PDFMergerUtility verwendet, ist unter meinem Code (Servlets mit Glassfish-Server)IO Exception Stream geschlossen mit PDFMergerUtility

static HttpsURLConnection connectionGet; 
static List<InputStream> sources = new ArrayList<>(); 
Integer totalPageCount = Integer.parseInt(pageCountValue); 
try { 
    for (int i = 1; i <= totalPageCount; i++) { 
     String inputValue = countryCode + "/" + kindCode; 
     String pdfUrl = "abc.org/rest-services/published-data/images/" + inputValue + "/fullimage.pdf?Range=" + i; 
     URL pdfDownload = new URL(pdfUrl); 
     connectionGet = (HttpsURLConnection) pdfDownload.openConnection(); 
     String authorizationHeader1 = "Bearer " + getToken; 
     connectionGet.setRequestProperty("Authorization", authorizationHeader1); 
     connectionGet.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
     connectionGet.setRequestMethod("GET"); 
     int pageResponseCode = connectionGet.getResponseCode(); 
     if (pageResponseCode != 404) { 
      sources.add(connectionGet.getInputStream()); 
     } 
    } 
    PDFMergerUtility pdfMerger = new PDFMergerUtility(); 
    pdfMerger.addSources(sources); 
    String pdfFileName = countryCode+kindCode+".pdf"; 
    String contextPath = request.getServletContext().getRealPath("/"); 
    pdfMerger.setDestinationFileName(contextPath+pdfFileName); 
    try {        
     pdfMerger.mergeDocuments(); 
    } catch (COSVisitorException ex) { 
     Logger.getLogger(PDFDownloadResult.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    out.println("Document Downloaded Successfully in below server Path" + "<p><b>" +contextPath + pdfFileName+ "</b>"); 
    } catch (IOException e) { 
     } finally { 
       // cleanup 
        sources.stream().forEach((source) -> { 
        IOUtils.closeQuietly(source); 
       }); 
     } 
    connectionGet.disconnect(); 

Alles wie erwartet funktioniert. wenn sie ausgeführt werden jedoch ein zweites Mal, wenn ich die folgende Fehlermeldung erhalten: Strom

Severe: java.io.IOException: stream is closed 
    at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.ensureOpen(HttpURLConnection.java:3295) 
    at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:3320) 
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:246) 
    at java.io.BufferedInputStream.read(BufferedInputStream.java:265) 
    at java.io.FilterInputStream.read(FilterInputStream.java:83) 
    at java.io.PushbackInputStream.read(PushbackInputStream.java:139) 
    at org.apache.pdfbox.io.PushBackInputStream.read(PushBackInputStream.java:90) 
    at org.apache.pdfbox.io.PushBackInputStream.peek(PushBackInputStream.java:68) 
    at org.apache.pdfbox.io.PushBackInputStream.isEOF(PushBackInputStream.java:156) 
    at org.apache.pdfbox.pdfparser.BaseParser.readLine(BaseParser.java:1517) 
    at org.apache.pdfbox.pdfparser.PDFParser.parseHeader(PDFParser.java:360) 
    at org.apache.pdfbox.pdfparser.PDFParser.parse(PDFParser.java:186) 
    at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:1235) 
    at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:1202) 
    at org.apache.pdfbox.util.PDFMergerUtility.mergeDocuments(PDFMergerUtility.java:235) 
    at org.apache.pdfbox.util.PDFMergerUtility.mergeDocuments(PDFMergerUtility.java:192) 

Edited geschlossen: das Problem IOUtils.closeQuietly(source); Quellenwert ist nicht gelöscht propelry

Beispiel: exexuted in erstem Mal (nach deploy) wird die Zählung sein 2 (Quellen-Liste), so dass das erzeugte Dokument ohne Probleme

ich versuche dann zum zweiten Mal zu laufen, übernimmt aktuelle Gesamtseitenzahl 3 ist, nun die Quellen zählen wird 5, das ist falsch

so wenden Sie sich bitte h ELP mir, wie kann klar die sources Liste, nachdem das Dokument

erstellt
+0

Die Ausführung der zweiten Zeit bedeutet, dass das Programm das zweite Mal ausgeführt oder als Methode zum zweiten Mal während der Ausführung aufgerufen wird. –

+0

@karthi: Dies ist Web-Anwendung ausführen, das erste Mal ist es gut und das nächste Mal produzieren strem close Ausnahme – Prabu

+0

Ob Sie versucht, ohne disconnect() -Funktion? –

Antwort

0

Sie müssen die Liste löschen, nachdem jeder diese Zeile in Ihrem letzten Block Iteration hinzufügen,
sources.clear();
this helps .

Verwandte Themen