在一个Web应用程序中特定的多个SAXParserFactory实现

时间:2012-08-27 15:32:16

标签: java java-ee xml-parsing sax saxparser

我在tomcat上有一个Web应用程序。该应用程序需要两个SAXParserFactory实现:一个是JDK默认实现com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl,另一个是来自xerces:org.apache.xerces.jaxp.SAXParserFactoryImpl

问题在于,SAXParserFactory.newInstance()只按特定顺序选择仅一个实施,如下所示:

  • 使用javax.xml.parsers.SAXParserFactory系统属性。
  • 使用使用JAVA_HOME(安装jdk的父目录)/lib/jaxp.properties作为属性文件,该文件包含与上面定义的系统属性相同值的实现类名称。
  • 使用服务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实现?谢谢。

1 个答案:

答案 0 :(得分:1)

非常确定你不能(除非你使用多个类加载器)。依赖于其他实现的代码应该直接实例化它(使用实现类名)。