Changeset 3591 for print

Show
Ignore:
Timestamp:
07/20/10 15:00:32 (22 months ago)
Author:
jeichar
Message:

Hopefully the fix for too many open files error.

r=fredj
closes #586

Location:
print/trunk/src/main/java/org/mapfish/print
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • print/trunk/src/main/java/org/mapfish/print/ShellMapPrinter.java

    r3397 r3591  
    9090    public void run() throws IOException, JSONException, DocumentException { 
    9191        final OutputStream outFile = getOutputStream(); 
    92         if (clientConfig) { 
    93             final OutputStreamWriter writer = new OutputStreamWriter(outFile, Charset.forName("UTF-8")); 
    94             JSONWriter json = new JSONWriter(writer); 
    95             json.object(); 
    96             { 
    97                 printer.printClientConfig(json); 
     92        try { 
     93            if (clientConfig) { 
     94                final OutputStreamWriter writer = new OutputStreamWriter(outFile, Charset.forName("UTF-8")); 
     95                JSONWriter json = new JSONWriter(writer); 
     96                json.object(); 
     97                { 
     98                    printer.printClientConfig(json); 
     99                } 
     100                json.endObject(); 
     101 
     102                writer.close(); 
     103 
     104            } else { 
     105                final InputStream inFile = getInputStream(); 
     106                printer.print(FileUtilities.readWholeTextStream(inFile, "UTF-8"), outFile, referer); 
    98107            } 
    99             json.endObject(); 
    100  
    101             writer.close(); 
    102  
    103         } else { 
    104             final InputStream inFile = getInputStream(); 
    105             printer.print(FileUtilities.readWholeTextStream(inFile, "UTF-8"), outFile, referer); 
     108        } finally { 
     109            outFile.close(); 
     110            printer.stop(); 
    106111        } 
    107         printer.stop(); 
    108112    } 
    109113 
  • print/trunk/src/main/java/org/mapfish/print/servlet/MapPrinterServlet.java

    r3397 r3591  
    155155        final String id = generateId(tempFile); 
    156156        httpServletResponse.setContentType("application/json; charset=utf-8"); 
    157         try { 
    158             final PrintWriter writer = httpServletResponse.getWriter(); 
     157        PrintWriter writer = null; 
     158        try { 
     159            writer = httpServletResponse.getWriter(); 
    159160            JSONWriter json = new JSONWriter(writer); 
    160161            json.object(); 
     
    169170            deleteFile(tempFile); 
    170171            throw new ServletException(e); 
     172        } finally { 
     173            if(writer != null) { 
     174                writer.close(); 
     175            } 
    171176        } 
    172177        addTempFile(tempFile, id); 
     
    181186    protected String getSpecFromPostBody(HttpServletRequest httpServletRequest) throws IOException { 
    182187        BufferedReader data = httpServletRequest.getReader(); 
    183         StringBuilder spec = new StringBuilder(); 
    184         String cur; 
    185         while ((cur = data.readLine()) != null) { 
    186             spec.append(cur).append("\n"); 
    187         } 
    188         return spec.toString(); 
     188        try { 
     189            StringBuilder spec = new StringBuilder(); 
     190            String cur; 
     191            while ((cur = data.readLine()) != null) { 
     192                spec.append(cur).append("\n"); 
     193            } 
     194            return spec.toString(); 
     195        } finally { 
     196            if(data != null) { 
     197                data.close(); 
     198            } 
     199        } 
    189200    } 
    190201 
    191202    /** 
    192203     * To get the PDF created previously. 
    193      * @param httpServletRequest  
    194204     */ 
    195205    protected void getPDF(HttpServletRequest req, HttpServletResponse httpServletResponse, String id) throws IOException { 
     
    213223        final PrintWriter writer = resp.getWriter(); 
    214224 
    215         final String var = req.getParameter("var"); 
    216         if (var != null) { 
    217             writer.print(var + "="); 
    218         } 
    219  
    220         JSONWriter json = new JSONWriter(writer); 
    221         try { 
    222             json.object(); 
    223             { 
    224                 printer.printClientConfig(json); 
    225                 json.key("printURL").value(basePath + PRINT_URL); 
    226                 json.key("createURL").value(basePath + CREATE_URL); 
    227             } 
    228             json.endObject(); 
    229         } catch (JSONException e) { 
    230             throw new ServletException(e); 
    231         } 
    232         if (var != null) { 
    233             writer.print(";"); 
    234         } 
    235         writer.close(); 
     225        try { 
     226            final String var = req.getParameter("var"); 
     227            if (var != null) { 
     228                writer.print(var + "="); 
     229            } 
     230 
     231            JSONWriter json = new JSONWriter(writer); 
     232            try { 
     233                json.object(); 
     234                { 
     235                    printer.printClientConfig(json); 
     236                    json.key("printURL").value(basePath + PRINT_URL); 
     237                    json.key("createURL").value(basePath + CREATE_URL); 
     238                } 
     239                json.endObject(); 
     240            } catch (JSONException e) { 
     241                throw new ServletException(e); 
     242            } 
     243            if (var != null) { 
     244                writer.print(";"); 
     245            } 
     246        } finally { 
     247            writer.close(); 
     248        } 
    236249    } 
    237250 
     
    248261        //create a temporary file that will contain the PDF 
    249262        TempFile tempFile = new TempFile(File.createTempFile(TEMP_FILE_PREFIX, TEMP_FILE_SUFFIX, getTempDir())); 
    250         try { 
    251             FileOutputStream out = new FileOutputStream(tempFile); 
    252  
     263        FileOutputStream out = null; 
     264        try { 
     265            out = new FileOutputStream(tempFile); 
    253266            getMapPrinter().print(spec, out, referer); 
    254             out.close(); 
     267 
    255268            return tempFile; 
    256269        } catch (IOException e) { 
     
    263276            deleteFile(tempFile); 
    264277            throw e; 
     278        } finally { 
     279            if (out != null) 
     280                out.close(); 
    265281        } 
    266282    } 
     
    272288        FileInputStream pdf = new FileInputStream(tempFile); 
    273289        final OutputStream response = httpServletResponse.getOutputStream(); 
     290        try { 
    274291        httpServletResponse.setContentType("application/pdf"); 
    275292        if (inline != true) { 
     
    277294        } 
    278295        FileUtilities.copyStream(pdf, response); 
    279         pdf.close(); 
    280         response.close(); 
     296        } finally { 
     297            try { 
     298                pdf.close(); 
     299            } finally{ 
     300                response.close(); 
     301            } 
     302        } 
    281303    } 
    282304 
     
    285307     */ 
    286308    protected void error(HttpServletResponse httpServletResponse, Throwable e) { 
     309        PrintWriter out = null; 
    287310        try { 
    288311            httpServletResponse.setContentType("text/plain"); 
    289312            httpServletResponse.setStatus(500); 
    290             PrintWriter out = httpServletResponse.getWriter(); 
     313            out = httpServletResponse.getWriter(); 
    291314            out.println("Error while generating PDF:"); 
    292315            e.printStackTrace(out); 
    293             out.close(); 
    294316 
    295317            LOGGER.error("Error while generating PDF", e); 
    296318        } catch (IOException ex) { 
    297319            throw new RuntimeException(e); 
     320        } finally { 
     321            if (out != null) { 
     322                out.close(); 
     323            } 
    298324        } 
    299325    } 
     
    303329     */ 
    304330    protected void error(HttpServletResponse httpServletResponse, String message, int code) { 
     331        PrintWriter out = null; 
    305332        try { 
    306333            httpServletResponse.setContentType("text/plain"); 
    307334            httpServletResponse.setStatus(code); 
    308             PrintWriter out = httpServletResponse.getWriter(); 
     335            out = httpServletResponse.getWriter(); 
    309336            out.println("Error while generating PDF:"); 
    310337            out.println(message); 
    311             out.close(); 
     338 
    312339            LOGGER.error("Error while generating PDF: " + message); 
    313340        } catch (IOException ex) { 
    314341            throw new RuntimeException(ex); 
     342        } finally { 
     343            if (out != null) { 
     344                out.close(); 
     345            } 
    315346        } 
    316347    }