我在 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 规范中详述)(如果可用)来确定类名。服务 API 将在运行时可用的 jar 中的 META-INF/services/javax.xml.parsers.SAXParserFactory 文件中查找类名。
- 平台默认 SAXParserFactory 实例。
我尝试在不同的 jar 文件中的 javax.xml.parsers.SAXParserFactory 中配置不同的类名。但它是整个类加载器的范围。在 tomcat 中,所有应用程序库都加载在一个类加载器中。例如,A.jar中的配置文件将覆盖B.jar中的配置,最终所有应用程序都从A.jar中获取配置。
所以我的问题是如何在一个 Web 应用程序中指定这两个 SAXParserFactory 实现?谢谢。
最佳答案
很确定你不能(除非你使用多个类加载器)。依赖于其他实现的代码应该直接实例化它(使用实现类名称)。
关于java - 一个 Web 应用程序中特定的多个 SAXParserFactory 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12144993/