在我使用此代码使用StAX编写XML文件之前:
// Create a XMLOutputFactory
XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();
// Create XMLEventWriter
XMLEventWriter eventWriter = outputFactory
.createXMLEventWriter(new FileOutputStream(behaviorsFilePath));
// Create a EventFactory
XMLEventFactory eventFactory = XMLEventFactory.newInstance();
XMLEvent end = eventFactory.createDTD("\n");
// Create and write Start Tag
StartDocument startDocument = eventFactory.createStartDocument();
eventWriter.add(startDocument);
eventWriter.add(end);
eventWriter.add(end);
// Create config open tag
StartElement configStartElement = eventFactory.createStartElement("",
"", ROOT);
//...
此代码工作正常,但现在它引发了javax.xml.stream.XMLStreamException: Trying to write multiple DOCTYPE declarations
例外。
调试应用程序时,我能够看到第二次调用时抛出异常:eventWriter.add(end);
为什么这段代码之前有效,现在却没有?
更新
我不确定这是否真的很重要,但此代码在SwingWorker
主题中运行...
我做的唯一一个可能是问题的修改是我在项目中添加了库以使用Axis2 Web Services(其中一个是:geronimo-stax-api_1.0_spec-1.0.1.jar
)......我看到this :
速度 - Axis2使用自己的对象模型和StAX(Streaming API for XML)解析来实现比早期版本的Apache Axis更快的速度。
this:
stax-api-1.0.1.jar(包含javax.xml.namespace.QName类的StAX API。此jar可能被包含javax.xml.namespace.QName实现的任何其他jar替换。但是Axis2使用stax-api-1.0.1.jar中的这个类,它与Axis2发行版捆绑在一起)
答案 0 :(得分:1)
因为,就像异常告诉你的那样,你是“Trying to write multiple DOCTYPE declarations
”。为什么您的代码有两次eventWriter.add(end);
?