`javax.xml.validation` 是 Java 标准版(Java SE)中用于 XML 文档验证的核心包
javax.xml.validation是 Java 标准版(Java SE)中用于 XML 文档验证的核心包,自 Java 5(JDK 1.5)引入,属于 JAXP(Java API for XML Processing)的一部分。该包提供了一套面向对象、解耦且可插拔的 API,用于对 XML 文档(如通过SAX,DOM, 或StAX解析的文档)进行模式(Schema)验证,支持 W3C XML Schema(XSD)、RELAX NG(部分实现,依赖底层处理器)以及 DTD(通过SchemaFactory的特定机制或回退到DocumentBuilder配置,但不直接由本包原生支持 DTD 验证)。
核心类与接口:
SchemaFactory:工厂类,用于加载和编译模式(如 XSD 文件),生成Schema对象。支持通过newInstance(String schemaLanguage)指定语言(如XMLConstants.W3C_XML_SCHEMA_NS_URI)。Schema:编译后的模式对象,是线程安全的,可被多个Validator共享。Validator:执行实际验证的类,通过Schema.newValidator()获取;可设置ErrorHandler处理验证错误/警告,并支持将Source(如StreamSource)验证为Result(如SAXResult,DOMResult,或忽略结果仅校验)。ValidatorHandler(较少用):ContentHandler的包装器,用于在 SAX 解析过程中嵌入验证逻辑。
典型使用流程:
- 创建
SchemaFactory; - 加载 XSD 构建
Schema; - 从
Schema创建Validator; - 调用
validator.validate(source)执行验证(抛出SAXException表示验证失败)。
⚠️ 注意:
- 自 Java 14 起,
javax.xml.*包(包括javax.xml.validation)被标记为deprecated for removal; - 自 Java 17(LTS)起,这些 API 仍存在但处于strongly discouraged状态;
- 计划在未来的 JDK 版本(如 JDK 22+)中移除,推荐迁移到模块化、现代替代方案,如:
- 使用
org.xml.sax+ 第三方验证器(如 Apache Xerces-J,需显式引入); - 基于 Jakarta EE 的
jakarta.xml.validation(Java EE 8+ / Jakarta EE 9+ 迁移后的新命名空间,需添加 Jakarta EE 依赖); - 或采用更轻量、函数式 XML 库(如 jOOX、vtd-xml)配合自定义校验逻辑。
- 使用
// 示例:使用 javax.xml.validation 验证 XML 是否符合 XSDimportjavax.xml.XMLConstants;importjavax.