2015-11-06 46 views
0

我正在挑釁一個CSS文件加載錯誤的內部porpuses,看看它是否處理這樣的問題。飛碟 - 無法捕獲IOException獲取流關閉

我擁有的代碼是這樣的,當它到達renderer.setDocument()(來自ITextRenderer類的一個方法)時,它會拋出一個無法克服的模糊,我們需要捕捉它,甚至在這種情況下它仍然繼續渲染器.layout()然後到{}塊。

private ITextRenderer renderPdfByRenderer(
       final ITextRenderer renderer, 
    ... 
        { 
    ... 

      try { 
    ... 
       org.w3c.dom.Document xhtmlContent = createDocument(contentReader); 

    ... 

       renderer.setDocument(xhtmlContent, FacesContextHelper.getRequest().getRequestURL().toString()); 

    ...  

       renderer.layout(); 

    .... 

      } catch (final SAXException e) { 
       throw getExceptionOnRender(e); 
      } catch (final ParserConfigurationException e) { 
       throw getExceptionOnRender(e); 
      } catch (final DocumentException e) { 
       throw getExceptionOnRender(e); 
      } catch (IOException e) { 
       e.printStackTrace(); 
       throw getExceptionOnRender(e); 
      } catch (final ServletException e) { 
       throw getExceptionOnRender(e); 
      } 
      finally{ 
       ... 
      } 
     } 

[ERR] java.io.IOException的:流關閉 [ERR]在java.io.BufferedInputStream.getInIfOpen(BufferedInputStream.java:134) [ERR]在java.io.BufferedInputStream中。 read1(BufferedInputStream.java:256) [err] at java.io.BufferedInputStream.read(BufferedInputStream.java:317) [err] at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264) [錯誤]在sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306) [err] at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158) [err] at java .io.InputStreamReader.read(InputStreamReader.java:167) [err] at org.xhtmlrenderer.css.parser.Lexer.zzRefill(Lexer.java:1634) [err] at org.xhtmlrenderer.css.parser.Lexer .yylex(Lexer.java:1865) [err] at org.xhtmlrenderer.css.parser.CSSParser.next(CSSParser.java:1807) [err] at org.xhtmlrenderer.css.parser.CSSParser.la(CSSParser .java:1819) [err] at org.xhtmlrenderer.css.parser.CSSParser.stylesheet(CSSParser.java:159) [err] at org.xhtmlrenderer.css.parser.CSSParser.parseStylesheet(CSSParser.java:89 ) [err] at org.xhtmlrenderer.context.StylesheetFactoryImpl.parse(StylesheetFactoryImpl.java:78) [err] at org.xhtmlrenderer.context.StylesheetFactoryImpl.parse(StylesheetFactoryImpl.java:95) [err] at org.xhtmlrenderer.context.StylesheetFactoryImpl.getStylesheet(StylesheetFactoryImpl.java:174) [err] at org.xhtmlrenderer.context.StyleReference.readAndParseAll(StyleReference.java:123) [err] at org.xhtmlrenderer .context.StyleReference.setDocumentContext(StyleReference.java:111) [err] at org.xhtmlrenderer.pdf.ITextRenderer.setDocument(ITextRenderer.java:182) [err] at org.xhtmlrenderer.pdf.ITextRenderer.setDocument(ITextRenderer .java:145) [err] at osplus.mcp.frontend.servlet.RendererFilter.renderPdfByRenderer(RendererFilter.java:750) [err] at osplus.mcp.frontend.servlet.RendererFilter.renderPdf(RendererFilter.java:697 ) [err] at osplus.mcp.frontend.servlet.RendererFilter.handleReport(RendererFilter.java:1265) [err] at osplus.mcp.frontend.servlet.RendererFilter.doFilter(RendererFilter.java:178) [err] at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:194) [錯誤]在[內部類]

任何人都可以請幫助我瞭解我怎麼能夠發現這種異常?

謝謝。

問候

回答

1

您可以趕上這樣一個特定的異常:

try { 
    (ITextRenderer(a))setDocument(..).. 
} catch (IOException ioe){ 
    ioe.printStackTrace(); 
} 

但是,如果您不能捕獲該異常,這可能是因爲API不允許你,而是它只是轉儲堆棧並嘗試處理異常本身。仔細檢查傳入的參數,以確保無法自行過濾錯誤條件。如果您使用的是高級IDE(例如Eclipse),那麼您應該能夠在拋出IOException時設置斷點,以便分析發生了什麼。您也可以嘗試並按照source code來查看它告訴你任何事情。此外,如果您無法解決問題,請嘗試聯繫代碼的作者。

+0

嗨@ergonaut,謝謝你的幫助。問題是我們的代碼在一個try catch代碼塊內,但即使如此,在你的catch中,代碼不會進入catch塊,我不知道爲什麼。在我的下面的帖子中,我會放一些我們正在製作的代碼。 –