在我當前的項目中,我們的目標是一個JDK 1.6運行時環境。對於傳統rasons,Xerces JAR文件捆綁在應用程序中。JDK 1.6和Xerces?
這些不再需要正確嗎? JDK已經(有一段時間了)在JDK中捆綁了XML解析庫?
在我當前的項目中,我們的目標是一個JDK 1.6運行時環境。對於傳統rasons,Xerces JAR文件捆綁在應用程序中。JDK 1.6和Xerces?
這些不再需要正確嗎? JDK已經(有一段時間了)在JDK中捆綁了XML解析庫?
從012開始添加JAXP到JRE時,綁定XML解析器並沒有必要。您應該使用JAXP,而不是直接調用Xerces。在內部,JRE捆綁並使用Xerces(帶有「com.sun」前綴)。
這是正確的。在谷歌搜索之後,似乎JDK 1.4支持JAXP 1.1,並將Apache分類爲不帶類的名稱;當人們想要使用比JDK捆綁的版本更新的版本時造成大量問題。 (http://people.apache.org/~edwingo/jaxp-faq.html#JDK14) – 2011-10-17 20:20:18
這些XML服務使用所謂的「服務提供者」機制插入應用程序環境。
其工作原理如下:
-Djavax.xml.parsers.SAXParserFactory=<some class>
。FactoryFinder
尋找特殊屬性文件中的屬性。例如${java.home}/lib/jaxp.properties
。META-INF/services/<some service>
(例如, META-INF/services/javax.xml.parsers.SAXParserFactory
。 這是一個應包含工廠類名稱的文件,例如org.apache.xerces.jaxp.SAXParserFactoryImpl
。所以,如果你沒有系統屬性指向顯而易見的工廠類java會選擇適當的安裝實現。
謝謝你的一個非常有用的答案,即使它沒有回答我的問題。 – 2011-10-17 20:16:06
這是標準靜態'SAXParserFactory'代碼的工作方式,請參閱[鏈接](http://docs.oracle.com/javase/7/docs/api/javax/xml/parsers/SAXParserFactory.html#newInstance%28 %29)爲這些和一些更多的細節。這些是將初始JDK/JRE捆綁機制與您選擇的XML庫耦合的方式。也可以使用_Java認可的標準覆蓋機制完全替代JDK/JRE捆綁的XML庫,例如:http://docs.oracle.com/javase/7/docs/technotes/guides/standards/。 '-Djava.endorsed.dirs = path_to_folder_containing_new_library_jars'。 – 2012-11-16 21:14:36
JDK中的解析器是Xerces的一個分支,但它非常麻煩。我會建議生產應用程序始終首先使用解析器的Apache版本。這些錯誤是罕見的,但它們是不可預測的,它們不僅影響在現實生活中看不到的角落案例;我看到很多情況下,很多枯燥的XML文檔正在被解析,並且損壞的數據被傳遞給應用程序以獲取屬性值。 Sun/Oracle對解決問題沒有興趣。每次使用Apache Xerces。
嗨。你有沒有對JDK解析器中錯誤的索引/描述?你在說什麼JDK版本? – 2011-10-17 20:10:42
當人們向我發送由於JDK解析器問題導致的撒克遜錯誤報告時,我不再費力地向Oracle報告問題,因爲這樣做看起來沒有任何效果。所以不,我不能引用參考文獻。 – 2012-01-25 16:02:02
支持的標準覆蓋機制工作得很好。 Djava.endorsed.dirs = path_to_folder_containing_new_library_jars將解決JDK 1.6的問題。
我已經在Thymleaf上下文中驗證了上述解決方案。在某些情況下,如果您使用LEGACYHTML5模式,並且您使用NekoHtml解析器來自動更正未關閉的html標記,則Neko依賴於Xerces jars。設置類路徑並不能解決問題。
謝謝s-n-ushakov。
爲什麼不試試捆綁它們呢? – 2011-10-17 13:18:24
他們沒有比1.5更多或更少需要。 1.6擁有Xerces的一些奇怪分支版本,只是1.5以外的奇怪版本。根據@DaveNewton,判斷它是否適用於您的唯一方法就是嘗試一下。 – bmargulies 2011-10-17 13:19:48
我想我必須在我們的項目上運行一些依賴分析軟件。如果我們使用的某些開源框架直接取決於Xerces而不是JAXP,那麼我不會感到驚訝。 – 2011-10-17 20:14:59