java - 如何在存在另一个提供程序的情况下使用 java 内部 XMLStreamWriter

标签 java xml java-7 java-6

我正在使用此代码获取 XMLStreamWriter:

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

最近我不得不将 jaxws 的 jar 包含到我的系统中。之后,XmlStreamWriter 实现从 com.sun.xml.internal.stream.writers.XMLStreamWriterImpl 更改为 com.ctc.wstx.sw.SimpleNsStreamWriter。此类产生与 Java 内部实现不同的输出。

如何通过显式使用 com.sun.xml.internal.stream.XMLOutputFactoryImpl 强制 java 使用内部实现而不将我的代码绑定(bind)到 java 6? 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  

最佳答案

根据javadoc这就是工厂的运作方式:

  • 使用 javax.xml.stream.XMLOutputFactory 系统属性。
  • 使用 JRE 目录中的属性文件“lib/stax.properties”。
  • 使用服务 API(详见 JAR 规范)
  • 平台默认的 XMLOutputFactory 实例。

所以要确保使用sun的内部实现,我认为最好的办法是做到以下几点:

System.setProperty("javax.xml.stream.XMLOutputFactory", "com.sun.xml.internal.stream.XMLOutputFactoryImpl");
XMLOutputFactory.newInstance();

关于java - 如何在存在另一个提供程序的情况下使用 java 内部 XMLStreamWriter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19553324/

相关文章:

java - Map 和 Groupby 合二为一

java - 追加java静态变量

java - 包 com.sun.xml.internal.messaging.saaj.soap.dynamic 不存在

java - Applet 无法在 JRE 7 上运行

java - 限制类只接受任何一种接口(interface)实现而不接受混合?

java - Lucene/Solr 聚合

java - eclipse 项目必须运行两次才能编译更新

c# - 使用 xpath 获取定义类型的节点父节点

java - 膨胀异常 : Binary XML file line #1: Error inflating class <unknown> caused by OutOfMemoryError

xml - JAXB:两个版本的 XSD,一种对象模型