4

このコードを使用して取得していますXMLStreamWriter:

javax.xml.stream.XMLOutputFactory
    .newInstance()
    .createXMLStreamWriter( outputStream )

最近、システムに の jar ファイルを含める必要がありましたjaxws。その後、XmlStreamWriter実装は からcom.sun.xml.internal.stream.writers.XMLStreamWriterImplに変更されましたcom.ctc.wstx.sw.SimpleNsStreamWriter。このクラスは、Java 内部実装とは異なる出力を生成します。

com.sun.xml.internal.stream.XMLOutputFactoryImpl明示的に使用してコードをJava 6にバインドせずに、Javaに内部実装を使用させるにはどうすればよいですか? Java 7 は別XMLStreamWriterの を使用しており、私のコードも Java 7 で実行したいと考えています。


私はこれを試しました:

XMLOutputFactory.newFactory( 
    "com.sun.xml.internal.stream.XMLOutputFactoryImpl", 
    getClass().getClassLoader() 
);

これはOracle JDK 6で動作しますが、JDK 7では

javax.xml.stream.FactoryConfigurationError: 
Provider for com.sun.xml.internal.stream.XMLOutputFactoryImpl cannot be found  
4

4 に答える 4

2

javadocによると、これはファクトリの動作方法です。

  • javax.xml.stream.XMLOutputFactory システム プロパティを使用します。
  • JRE ディレクトリにあるプロパティ ファイル「lib/stax.properties」を使用します。
  • Services API を使用する (JAR 仕様に詳述されている)
  • プラットフォームのデフォルトの XMLOutputFactory インスタンス。

したがって、確実に太陽の内部実装を使用するには、次のことを行うのが最善の方法だと思います。

System.setProperty("javax.xml.stream.XMLOutputFactory", "com.sun.xml.internal.stream.XMLOutputFactoryImpl");
XMLOutputFactory.newInstance();
于 2014-02-15T13:06:36.397 に答える
0

これは悪いスタイルですが、Oracle Java 6 および 7 で機能します。

new com.sun.xml.internal.stream.writers.XMLStreamWriterImpl( 
    outputStream, 
    encoding, 
    new com.sun.org.apache.xerces.internal.impl.PropertyManager(
        PropertyManager.CONTEXT_WRITER
    ) 
);

これをコンパイルできるようにするにはjavac、次のオプションで呼び出す必要があります。

-XDignore.symbol.file
于 2013-10-25T07:08:55.570 に答える
0

https://java.net/projects/stax-utils/pages/HomeStaxUtilsから使用しています。

https://java.net/projects/stax-utils/sources/svn/content/trunk/src/javanet/staxutils/IndentingXMLStreamWriter.java _

于 2015-08-27T11:04:16.330 に答える