2011-01-03 9 views
2

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?

Antwort

2
  • denselben Parser Weiternutzung ist legal (solange sie nicht gleichzeitig verwendet wird)
  • Der Parser löst einen "endDocument". Dies scheint das iText-Dokument hier zu schließen. Aber das wird nicht vom Parser gemacht - das ist Code von Ihrem Handler.
+0

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