我使用此代码获取XMLStreamWriter
:
javax.xml.stream.XMLOutputFactory
.newInstance()
.createXMLStreamWriter( outputStream )
最近我不得不将jaxws
的罐子包含在我的系统中。之后,XmlStreamWriter
实施从com.sun.xml.internal.stream.writers.XMLStreamWriterImpl
更改为com.ctc.wstx.sw.SimpleNsStreamWriter
。此类生成的输出与java内部实现不同。
如何通过显式使用com.sun.xml.internal.stream.XMLOutputFactoryImpl
强制java使用内部实现而不将我的代码绑定到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
答案 0 :(得分:2)
根据javadoc,这就是工厂的运作方式:
因此,为了确保使用sun内部实现,我认为最好的方法是执行以下操作:
System.setProperty("javax.xml.stream.XMLOutputFactory", "com.sun.xml.internal.stream.XMLOutputFactoryImpl");
XMLOutputFactory.newInstance();
答案 1 :(得分:0)
这是糟糕的风格,但它适用于Oracles 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
答案 2 :(得分:0)
当然是一个非常老的线程,但我仍然面对该问题,并使用JDK 9+和以下代码行解决了该问题:
XMLOutputFactory.newDefaultFactory();
也许这对以后的某个人有帮助...当再次遇到该问题时,甚至可能是我自己。 ;-)