我在tomcat上有一個Web應用程序。該應用程序需要兩個SAXParserFactory實現:一個是JDK默認實現com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl
,另一個來自xerces:org.apache.xerces.jaxp.SAXParserFactoryImpl
。在一個Web應用程序中實現多個SAXParserFactory
這裏的問題,只是SAXParserFactory.newInstance()
只有一個實現由特定的順序選擇,如下:
- 使用javax.xml.parsers.SAXParserFactory中的系統屬性。
- 使用使用JAVA_HOME(安裝jdk的父目錄)/lib/jaxp.properties作爲屬性文件,該文件包含與上面定義的系統屬性具有相同值的實現類的名稱。
- 使用Services API(詳見JAR規範)(如果可用)來確定類名。 Services API將在運行時可用的jar文件中的META-INF/services/javax.xml.parsers.SAXParserFactory文件中查找類名。
- 平臺默認SAXParserFactory實例。
我試圖配置在不同的jar文件javax.xml.parsers.SAXParserFactory中不同的類名。但它是整個類加載器的範圍。在tomcat中,所有應用程序庫都被加載到一個類加載器中。例如,A.jar中的配置文件將覆蓋B.jar中的配置,最終所有應用程序都會從A.jar中獲取配置。
所以我的問題是如何在一個Web應用程序中特定這兩個SAXParserFactory實現?謝謝。
你不能得到一個實現,然後設置'javax.xml.parsers.SAXParserFactory'系統屬性,然後獲得其他實現? –