2013-10-23 16 views
2

另一個供應商,我用這個代碼來得到一個XMLStreamWriter如何使用Java內部XMLStreamWriter與目前

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

最近,我不得不包括jaxws罐子到我的系統。之後,XmlStreamWriter實施從com.sun.xml.internal.stream.writers.XMLStreamWriterImpl改爲com.ctc.wstx.sw.SimpleNsStreamWriter。該類產生與java內部實現不同的輸出。

如何強制java使用內部實現,而不用通過明確使用com.sun.xml.internal.stream.XMLOutputFactoryImpl將代碼綁定到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 

回答

1

按照javadoc這是怎麼運作的工廠:

  • 使用javax.xml.stream.XMLOutputFactory系統屬性。
  • 在JRE目錄中使用屬性文件「lib/stax.properties」。
  • 使用服務API(詳見JAR規範)
  • 平臺默認的XMLOutputFactory實例。

那麼就一定要使用太陽內部實現,我認爲最好的辦法是做到以下幾點:

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

是不好的風格,但它適用於甲骨文的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