Java 写入XML文件时的XMLStreamException

Java 写入XML文件时的XMLStreamException,java,stax,Java,Stax,在使用此代码使用StAX编写XML文件之前: // Create a XMLOutputFactory XMLOutputFactory outputFactory = XMLOutputFactory.newInstance(); // Create XMLEventWriter XMLEventWriter eventWriter = outputFactory .createXMLEventWriter(new FileOutputStream(behaviorsF

在使用此代码使用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:尝试编写多个DOCTYPE声明
异常

在调试应用程序时,我能够看到在第二次调用时抛出异常:
eventWriter.add(end)

为什么这段代码以前是有效的,而现在不是

更新:

我不确定这是否真的很重要,但这段代码正在一个
SwingWorker
线程中运行

我所做的唯一一个可能出现问题的修改是,我在项目中添加了库以使用Axis2 Web服务(其中之一是:
geronimo-stax-api\u 1.0\u spec-1.0.1.jar
)。。。我看到:

速度-Axis2使用自己的对象模型和StAX(XML流API)解析,以实现比早期版本的ApacheAxis更高的速度

以及:

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中的此类)


因为,正如异常已经告诉您的,您正在“
尝试编写多个DOCTYPE声明”
。为什么你的代码有
eventWriter.add(end)两次?

因为,正如异常已经告诉您的那样,您正在“
尝试编写多个DOCTYPE声明”。为什么你的代码有
eventWriter.add(end)两次?

因为我想在xml中添加一个空行。。。正如我所说,这在以前是可行的……但是为什么要使用createDTD来实现呢?这根本不是它的目的。如果您阅读了文档:它清楚地说明了createDTD:“创建文档类型定义事件此字符串包含与XML 1.0规范中的doctypedecl匹配的整个文档类型声明”,因此您的插件更新似乎有一个更严格(且正确)的XMLEventWriter.add()实现。我建议改为使用
createSpace()
。因为我想在xml中添加一个空行。。。正如我所说,这在以前是可行的……但是为什么要使用createDTD来实现呢?这根本不是它的目的。如果您阅读了文档:它清楚地说明了createDTD:“创建文档类型定义事件此字符串包含与XML 1.0规范中的doctypedecl匹配的整个文档类型声明”,因此您的插件更新似乎有一个更严格(且正确)的XMLEventWriter.add()实现。我建议改用
createSpace()