【发布时间】:2012-10-18 22:38:41
【问题描述】:
在我使用此代码使用 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 服务(其中之一是:geronimo-stax-api_1.0_spec-1.0.1.jar)...我看到了this:
速度 - Axis2 使用自己的对象模型和 StAX(XML 流式 API)解析来实现比早期版本的 Apache Axis 更快的速度。
还有this:
stax-api-1.0.1.jar(包含 javax.xml.namespace.QName 类的 StAX API。此 jar 可以替换为包含 javax.xml.namespace.QName 实现的任何其他 jar。但是Axis2 使用 Axis2 发行版捆绑的 stax-api-1.0.1.jar 中的此类)
【问题讨论】: