我正在使用此代码获取 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/