JDK 1.6 和 Xerces?

2022-09-04 23:53:27

在我当前的项目中,我们以 JDK 1.6 运行时环境为目标。对于旧版 rasons,Xerces JAR 文件捆绑在应用程序中。

这些都不再需要了吧?JDK已经(一段时间)将XML解析库捆绑在JDK中?


答案 1

这些XML服务在应用环境中插入时使用所谓的“服务提供者”机制。

它的工作原理如下:

  1. 它尝试查找正好指向应使用的工厂类的系统属性。例如.-Djavax.xml.parsers.SAXParserFactory=<some class>
  2. 如果未找到系统属性,请在特殊属性文件中查找属性。例如。FactoryFinder${java.home}/lib/jaxp.properties
  3. 如果未找到文件属性,FactoryFinder 将在类路径中查找服务描述,例如 。它是一个应包含工厂类名的文件,例如 。META-INF/services/<some service>META-INF/services/javax.xml.parsers.SAXParserFactoryorg.apache.xerces.jaxp.SAXParserFactoryImpl
  4. 如果类路径中没有这样的文件,java 将使用其默认的出厂实现。

因此,如果您没有指向明显工厂类的系统属性,java将悄悄地选择合适的实现。


答案 2

自 1.4 版本将 JAXP 添加到 JRE 以来,就不需要捆绑 XML 解析器。您应该使用 JAXP,而不是直接调用 Xerces。在内部,JRE无论如何都会捆绑并使用Xerces(带有“com.sun”前缀)。


推荐