【发布时间】:2012-08-22 02:51:12
【问题描述】:
我在 tomcat 上有一个 Web 应用程序。应用程序需要两个 SAXParserFactory 实现:一个是 JDK 默认实现com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl,另一个来自 xerces:org.apache.xerces.jaxp.SAXParserFactoryImpl。
问题来了,SAXParserFactory.newInstance()只是按照特定顺序选择only一个实现,如下:
- 使用 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 实现?谢谢。
【问题讨论】:
-
你不能得到一个实现,然后设置
javax.xml.parsers.SAXParserFactory系统属性,然后得到另一个实现吗?
标签: java jakarta-ee xml-parsing sax saxparser