I have a web application on tomcat. The application needs two SAXParserFactory implements: one is JDK default implement com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl
, the other one is from xerces: org.apache.xerces.jaxp.SAXParserFactoryImpl
.
Here's the problem, SAXParserFactory.newInstance()
just selects only one implementation by specific order, as follows:
- Use the javax.xml.parsers.SAXParserFactory system property.
- UseUse the JAVA_HOME(the parent directory where jdk is installed)/lib/jaxp.properties for a property file that contains the name of the implementation class keyed on the same value as the system property defined above.
- 如果可用,请使用服务 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 实现?谢谢你。