2011-01-03 5 views
2

私は別のXMLファイルで同じHandlerで何度も呼びたいJava SAXパーサを持っています。私はこれをiTextと組み合わせて使用​​して、複数のページに1つのXMLタグマップがあり、他のページに別のページがある複数ページのPDFドキュメントを作成しています。私はこれをしようとすると例えば、java SaxParser.parse(String、Handler)への複数の呼び出しは法的ですか?

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

は、私は次のスタックトレースを投げ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を呼び出しています)?それとも、私のコードに別の問題があり、それを分離して修正する必要がありますか?

  • パーサーは「EndDocumentのを」トリガー(それは同時に使用されていない限り)同じパーサを再利用

  • 答えて

    2
    • 合法です。これはiText文書をここで閉じると思われます。しかし、これはパーサによって行われません。これはハンドラからのコードです。
    +0

    ControlOpenCloseをtrueに設定すると、handleEndingTagsがendElementメソッドから呼び出されたときにSAXiTextHandlerが自動的にドキュメントを閉じるようにしました。 SAXiTextHandlerの実装の詳細については、次のコードを参照してください。http://www.docjar.com/html/api/com/lowagie/text/xml/SAXiTextHandler.java.html – Sam