`javax.xml.validation` 是 Java 标准 API 中用于 XML 文档验证的核心包,自 Java 5(JDK 1.5)引入
javax.xml.validation是 Java 标准 API 中用于 XML 文档验证的核心包,自 Java 5(JDK 1.5)引入,属于 JAXP(Java API for XML Processing)的一部分。它提供了一套面向接口、解耦且可插拔的验证框架,支持基于XML Schema (XSD)、DTD、Relax NG(需第三方实现)等语法定义对 XML 文档进行结构与内容校验。
主要核心类与接口包括:
SchemaFactory:工厂类,用于加载和编译 Schema(如 XSD 文件),支持多种语言(如"http://www.w3.org/2001/XMLSchema")。Schema:编译后的 Schema 对象,是线程安全的,可重复用于创建Validator。Validator:执行实际验证的类,可验证Source(如StreamSource、DOMSource、SAXSource)类型的 XML 输入;支持设置ErrorHandler自定义错误处理。ValidatorHandler(较少用):SAX 风格的验证处理器,可嵌入到 SAX 管道中实现边解析边验证。
✅ 典型使用流程:
- 创建
SchemaFactory(指定 schema 语言); - 调用
newSchema(Source)加载并编译 XSD; - 从
Schema获取Validator; - 设置
ErrorHandler(可选,否则默认抛出SAXException); - 调用
validator.validate(source)执行验证。
⚠️ 注意事项:
- 默认不启用命名空间感知(namespace-aware),若 XSD 使用命名空间,
SchemaFactory必须通过setNamespaceAware(true)(通常在创建DocumentBuilder或SAXParser时也需同步配置); Validator不是线程安全的,每次验证应使用新实例或同步访问;- 不支持内联 XSD(如
<xs:schema>嵌入 XML 中),仅支持外部引用或StreamSource加载的独立 XSD 文件; - DTD 验证可通过
SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI)不适用,而应使用DocumentBuilderFactory.setValidating(true)配合setNamespaceAware(false)—— 但javax.xml.validation主要面向 Schema,DTD 验证更推荐传统方式。
示例代码(XSD 验证):
SchemaFactoryfactory=SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);Schemaschema=factory.newSchema(newFile("schema.xsd"));Validatorvalidator=schema.newValidator();validator.setErrorHandler(newSimpleErrorHandler());validator.validate(newStreamSource(newFile("data.xml")));javax.xml.validation
Classes
Schema Immutable in-memory representation of grammar.
SchemaFactory Factory that creates Schema objects. Entry-point to the validation API.
SchemaFactoryLoader
This class was removed from JAXP 1.3 before it was finalized but was mistakenly included in Java 5.
TypeInfoProvider This class provides access to the type information determined by ValidatorHandler.
Validator
A processor that checks an XML document against Schema.
ValidatorHandler Streaming validator that works on SAX stream.
