Ich habe einen Java-SAX-Parser, den ich mehrmals auf dem gleichen Handler mit verschiedenen XML-Dateien aufrufen möchte. Ich verwende dies in Verbindung mit iText, um ein mehrseitiges PDF-Dokument zu erstellen, in dem einige Seiten eine XML-Tag-Map haben und andere Seiten eine andere. Zum BeispielSind mehrere Aufrufe von Java SaxParser.parse (String, Handler) zulässig?
parser.parse("xmlFile1", handler);
parser.parse("xmlFile2", handler);
Wenn ich versuche, dies zu tun, erhalte ich eine java.lang.RuntimeException mit folgendem stacktrace geworfen:
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)
die SaxParser.parse Methode implizit aufrufen document.close Hat () Oder gibt es ein anderes Problem in meinem Code, das ich isolieren und korrigieren muss?
Ich hatte ControlOpenClose auf true gesetzt, was bewirkt, dass SAXiTextHandler das Dokument automatisch schließt, wenn handleEndingTags von der endElement-Methode aufgerufen wird. Weitere Informationen zur Implementierung von SAXiTextHandler finden Sie im folgenden Code: http://www.docjar.com/html/api/com/lowagie/text/xml/SAXiTextHandler.java.html – Sam