2012-08-27 48 views
0

我在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實現?謝謝。

+0

你不能得到一個實現,然後設置'javax.xml.parsers.SAXParserFactory'系統屬性,然後獲得其他實現? –

回答

1

很確定你不能(除非你使用多個類加載器)。依賴於其他實現的代碼應直接實例化(使用實現類名稱)。

+0

感謝您的回答!但是我沒有在SAXParserFactory中找到任何指定工具的方法。 –

+1

你不會使用SAXParserFactory,只是'new org.apache.xerces.jaxp.SAXParserFactoryImpl'。 – jtahlborn

相關問題