多次调用java SaxParser.parse(String,Handler)是否合法?

时间:2011-01-03 17:56:41

标签: java xml pdf itext sax

我有一个java SAX解析器,我想在同一个Handler上多次调用不同的XML文件。我将这与iText结合使用来创建一个多页PDF文档,其中一些页面具有一个XML标记映射,而其他页面具有另一个页面。例如,

parser.parse("xmlFile1", handler);
parser.parse("xmlFile2", handler);

当我尝试这样做时,我得到一个带有以下stacktrace的java.lang.RuntimeException:

DocumentException: java.lang.RuntimeException: The document is not open.
at com.lowagie.text.pdf.PdfWriter.getDirectContent(PdfWriter.java:695)
at com.lowagie.text.pdf.PdfDocument.newPage(Unknown Source)
at com.lowagie.text.pdf.PdfDocument.carriageReturn(Unknown Source)
at com.lowagie.text.pdf.PdfDocument.add(Unknown Source)
at com.lowagie.text.Document.add(Unknown Source)
at myClass.myCode(Unknown Source)
org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanEndElement(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at javax.xml.parsers.SAXParser.parse(SAXParser.java:345)
at javax.xml.parsers.SAXParser.parse(SAXParser.java:223)
at myClass.myCode(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)

SaxParser.parse方法是否隐式调用document.close()?或者我的代码中还有其他问题需要隔离和纠正吗?

1 个答案:

答案 0 :(得分:2)

  • 重用相同的解析器是合法的(只要它不会同时使用)
  • 解析器触发“endDocument”。这似乎关闭了iText文档。但这不是由解析器完成的 - 这是来自处理程序的代码。