编写XML文件时出现XMLStreamException

时间:2012-10-18 13:20:32

标签: java stax

在我使用此代码使用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发行版捆绑在一起)

1 个答案:

答案 0 :(得分:1)

因为,就像异常告诉你的那样,你是“Trying to write multiple DOCTYPE declarations”。为什么您的代码有两次eventWriter.add(end);