Apache XML Commons Resolver 1.2 介绍与选型指南

Apache XML Commons Resolver 1.2 介绍与选型指南:OASIS XML Catalogs 实体解析器、CatalogManager 与 CatalogResolver 集成方式、2006 末版的低活跃现状,及与 libxml2、Xerces-J、Xerces-C 的量化选型对比。

Apache XML Commons ResolverApache XML Commons Resolver2026/10/18

Apache XML Commons Resolver 1.2 介绍与选型指南

一、信息基准

本章列明本文事实性信息的核查时间与来源,全部信息取自 Apache XML Commons 官方渠道与公开发行目录,不含本地实测推算。本项目长期处于低活跃状态,本文按"最后版本 + 现状"如实记录。

1.1 版本基准

项目内容
本文介绍的软件版本Apache XML Commons Resolver 1.2(Resolver 组件的最后一个发布版本)
查询日期2026-10-18
版本判定依据Maven Central 构件 xml-resolver/xml-resolver 元数据 latest/release 为 1.2(metadata lastUpdated 2017-09-26),构件 xml-resolver-1.2.jar 时间戳 2006-12-22
项目状态Apache XML(xml.apache.org)旗下的 xml-commons 项目组件;官网页面标注版权区间 2001-2009,源码经 Apache SVN 管理;截至查询日无 GitHub 官方仓库(GitHub apache/xml-commons 路径不存在)
许可Apache-2.0(ASF 标准声明)

1.2 官方来源清单

来源地址用途
xml-commons 项目主页https://xml.apache.org/commons/项目定位与组件划分
Resolver 概览页https://xml.apache.org/commons/components/resolver/组件定位与文档入口
官方解析器文章https://xml.apache.org/commons/components/resolver/resolver-article.htmlXML 实体与 URI 解析原理、catalog 用法
Resolver 使用提示页https://xml.apache.org/commons/components/resolver/tips.htmlCatalogManager.properties 配置示例
Maven Centralhttps://repo1.maven.org/maven2/xml-resolver/xml-resolver/版本交叉核验与构件时间戳

二、软件概述

本文介绍的是 Apache XML Commons Resolver 1.2。官方定义:xml-commons 项目聚焦于为各 XML 项目提供公共代码与公共规范,其一为 DOM、SAX、JAXP 等外部定义标准接口的统一打包(External 组件),其二即为 Resolver——一个面向 OASIS 实体解析技术委员会(OASIS Entity Resolution Technical Committee)所定义的 XML 目录(XML Catalogs)体系的实体解析器。

Resolver 解决的问题在官方文章《XML Entity and URI Resolvers》(Norman Walsh 撰写,文档版本 1.5)中有完整阐述:XML 文档通过 URI 引用 DTD、Schema、样式表等外部资源,直接依赖绝对 URL 会在离线或网络不可用时失败,相对 URL 又依赖文档所在环境;目录(catalog)机制把这些公共引用映射到本地受控副本,使解析过程可移植、可离线、可控。

现状提示:1.2 发布于 2006 年(Central 构件时间戳 2006-12-22),官网文档自 2009 年后未见实质更新,属于典型的低活跃基础组件;它长期作为 Xerces-J 等 XML 处理栈的目录解析底层被间接使用。

三、核心架构

3.1 目录解析模型

按官方文章与提示页,Resolver 的核心抽象包括:

  • Catalog(目录):记录"公共标识符/系统标识符/URI → 本地资源"的映射规则,支持 OASIS XML Catalogs 格式(catalog 元素及 public、system、uri、rewrite* 等映射条目)。
  • CatalogManager:目录解析的配置与生命周期入口,属性既可来自系统属性也可来自 CatalogManager.properties 文件,系统属性优先(官方注释说明)。
  • CatalogResolver:实现 SAX EntityResolver 的解析器,注册到 XML 读取器后,按目录规则把外部实体引用重定向到本地资源。

3.2 与解析器的集成点

  • 标准 JAXP/SAX 集成:把 org.apache.xml.resolver.tools.CatalogResolver 设为 XMLReader 的 EntityResolver,或直接使用自带的 ResolvingXMLReader(官方提示页与文章给出的集成类)。
  • URI 级解析:除实体(SYSTEM/PUBLIC)外,还支持 URI 映射(uri 类目),覆盖 Schema 导入、样式表 include 等 URI 引用场景(官方文章对 uri 类条目的说明)。

3.3 命令行工具

  • 发行包附带 org.apache.xml.resolver.apps.xparse 与 org.apache.xml.resolver.apps.resolver 等小型命令行工具,用于在启用目录的条件下解析/校验 XML 文档(官方文章与 API 文档目录)。

四、功能特性

4.1 OASIS XML Catalogs 支持

  • 遵循 OASIS 实体解析技术委员会的目录规范:公共标识符映射、系统标识符映射、URI 映射、代理(delegate)规则与重写规则。
  • 多目录支持:通过 catalogs 属性以分号分隔声明多个目录文件,按序查找(官方 CatalogManager.properties 注释示例)。

4.2 配置灵活性

  • CatalogManager.properties 提供丰富的开关项:相对目录基准(relative-catalogs)、目录文件清单、缓存开关(catalogs 文件是否缓存解析结果)、是否使用静态目录实例等(官方注释版配置文件)。
  • 属性来源双通道:JVM 系统属性或 properties 文件,系统属性优先,便于不改文件即可覆盖配置。

4.3 落库即用的解析器类

  • CatalogResolver 可直接插入任意接受 EntityResolver 的解析流程;ResolvingXMLReader 开箱即用;对 JAXP Transformer 场景可经由 URIResolver 桥接(官方文章的集成章节)。

五、快速上手

以下示例引自官方文章与提示页,本文不做本地实测。

5.1 Maven 引入

Central 坐标(历史 groupId,无 org 前缀):

<dependency>
    <groupId>xml-resolver</groupId>
    <artifactId>xml-resolver</artifactId>
    <version>1.2</version>
</dependency>

5.2 配置目录文件

按官方提示页的注释版 CatalogManager.properties(放置于应用 classpath 可达处):

# 分号分隔的目录文件清单
catalogs=../conf/xml-catalog.xml

目录文件为 OASIS XML Catalogs 格式,例如把公共 DTD 指向本地副本(官方文章示例风格):

<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
  <public publicId="-//OASIS//DTD DocBook XML V4.1.2//EN"
          uri="docbookx.dtd"/>
</catalog>

5.3 挂到解析器上

官方文章给出的标准集成方式:

org.apache.xml.resolver.tools.CatalogResolver cr =
    new org.apache.xml.resolver.tools.CatalogResolver();
reader.setEntityResolver(cr);

或直接使用自带读取器 org.apache.xml.resolver.tools.ResolvingXMLReader,它已内置目录解析能力。

六、适用场景与限制

6.1 适用场景

  • 存量 Java XML 处理链需要离线解析带外部 DTD/Schema 的文档,且不便升级技术栈时,1.2 仍是可用的目录解析器。
  • 统一管理公共 DTD/Schema 的企业内网环境:用目录把公共引用收敛到内部受控副本,消除对公网可用性的依赖。
  • 作为 Xerces-J 生态的既有组成部分被间接依赖(Xerces-J 的目录解析路径引用 xml-commons resolver)。

6.2 已知限制

  • 最后发版为 2006 年的 1.2,官方文档停留在 2009 年前后;无 GitHub 官方仓库、无活跃社区支持,问题需自行查阅归档文档。
  • JDK 9+ 模块化后,其依赖的旧接口(如 javax.xml.parsers 相关处理器设置方式)在新运行时上需要自行验证兼容性。
  • 只解决"资源定位"问题,不做校验本身;校验能力仍由底层解析器(如 Xerces-J)提供。
  • 新项目建议优先使用运行时/平台内置的目录能力(如 Xerces-J 自带的目录集成或 libxml2 的目录支持),仅在无法替换时才直接依赖 1.2。

七、同类选型对比

7.1 对比对象与数据基准

选取三个可比对象:libxml2(C 语言的 XML 全功能库,含 OASIS 目录支持)、Apache Xerces-J(Java 通用 XML 解析与校验器,内置目录解析集成)、Apache Xerces-C(C++ 解析器,自带 XMLCatalogResolver)。数据于 2026-10-18 取自各项目官方渠道(GNOME 官方下载服务器与 GitLab、Maven Central 元数据、GitHub 仓库页面与发行 feed)。

7.2 量化对比

维度XML Commons Resolver 1.2libxml2 2.15.4Apache Xerces-J 2.12.2Apache Xerces-C 3.3.0
开源许可Apache-2.0MIT(官方库声明)Apache-2.0Apache-2.0
GitHub stars + 最近发版官方未公布(无 GitHub 官方仓库);1.2(2006-12-22,Central 构件时间戳)48 stars(GNOME GitLab star_count);2.15.4(2026-09-04,GNOME 下载服务器)8 stars(apache/xerces-j);2.12.2(Central 元数据更新 2022-01-27)159 stars(apache/xerces-c);3.3.0(2024-10-14,官方发行 feed)
版本节奏停滞(约 20 年无新版)非常活跃(2025-09 至 2026-09 连发 2.15.x 系列)低频维护低频维护
兼容矩阵Java,SAX/JAXP EntityResolver 集成;JDK 9+ 需自行验证C 库,支持 OASIS XML Catalogs,跨平台构建Java,XML 1.0/1.1、XSD 1.0/1.1 校验,JDK 8 可运行C++,含 XMLCatalogResolver 类,跨平台构建

补充说明:libxml2、Xerces-J、Xerces-C 都是"解析器+目录能力"一体的方案,目录只是其内置功能之一;XML Commons Resolver 是纯目录解析组件,需绑定到某个解析器上使用。新构建 XML 处理链时,一体化的现代方案在维护性上占优。

7.3 选型建议

新项目直接选用运行环境内置或自带的目录能力(Java 选 Xerces-J 的目录集成,C/C++ 选 libxml2 或 Xerces-C),XML Commons Resolver 1.2 仅推荐给无法替换的历史工程沿用。

八、参考链接