Flying Saucer - 无法捕获IOException让Stream关闭

时间:2015-11-06 18:20:14

标签: java pdf ioexception flying-saucer xhtmlrenderer

我正在挑起内部porpuses的CSS文件加载错误,看它是否处理这样的问题。

我拥有的代码就是这个,当它到达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{
               ...
            }
        }
  

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

任何人都可以帮助我理解如何捕获此异常?

谢谢。

此致

1 个答案:

答案 0 :(得分:1)

您可以捕获这样的特定异常:

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

但是,如果你无法捕获异常,可能是因为API不允许你,而是它只是转储堆栈并尝试自己处理异常。仔细检查传入的参数,以确保您不能自己过滤掉错误条件。如果您使用的是高级IDE(例如Eclipse),则应该能够在抛出IOException时设置断点,以便分析正在进行的操作。您也可以尝试按照source code查看它告诉您的任何内容。此外,如果您无法解决问题,请尝试联系代码的作者。