1

このコードを使用して、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このコードは正常に機能していましたが、例外がスローされます。

アプリケーションをデバッグすると、2 回目の呼び出し時に例外がスローされることがわかります。eventWriter.add(end);

このコードが以前は機能していたのに、現在は機能していないのはなぜですか?

アップデート:

これが本当に重要かどうかはわかりませんが、このコードはSwingWorkerスレッドで実行されています...

問題になる可能性のある唯一の変更は、Axis2 Web サービスを使用するためにライブラリをプロジェクトに追加したことです (そのうちの 1 つは次のとおりですgeronimo-stax-api_1.0_spec-1.0.1.jar)...そして、私はこれを見まし:

速度 - Axis2 は、独自のオブジェクト モデルと StAX (XML 用ストリーミング API) 解析を使用して、以前のバージョンの Apache Axis よりも大幅に高速化されています。

そしてこれ

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 のクラス)

4

1 に答える 1

1

なぜなら、例外がすでにあなたに言っているように、あなたは " Trying to write multiple DOCTYPE declarations"だからです。eventWriter.add(end);コードに2 回あるのはなぜですか?

于 2012-10-18T14:38:41.897 に答える