Module java.xml

Class ValidatorHandler

java.lang.Object
javax.xml.validation.ValidatorHandler
所有已实现的接口:
ContentHandler

public abstract class ValidatorHandler extends Object implements ContentHandler
在SAX流上工作的流验证器。

ValidatorHandler对象不是线程安全的,也不是可重入的。换句话说,应用程序有责任确保一个ValidatorHandler对象在任何给定时间内不会从多个线程中使用。

ValidatorHandler检查SAX事件是否遵循与关联的Schema中描述的一组约束,并且还可以修改SAX事件(例如通过添加默认值等)。

ValidatorHandler扩展自ContentHandler,但它以以下方式完善了底层的ContentHandler

  1. startElement/endElement事件必须接收非空的String作为urilocalNameqname,即使SAX允许其中一些为空。同样,用户指定的ContentHandler将为所有三个参数接收非空字符串。
  2. 应用程序必须确保正确调用ValidatorHandlerContentHandler.startPrefixMapping(String,String)ContentHandler.endPrefixMapping(String)。同样,用户指定的ContentHandler将接收startPrefixMapping/endPrefixMapping事件。如果ValidatorHandler引入了额外的命名空间绑定,用户指定的ContentHandler将接收额外的startPrefixMapping/endPrefixMapping事件。
  3. 用于ContentHandler.startElement(String,String,String,Attributes)方法的Attributes可能包含或不包含xmlns*属性。

ValidatorHandler在每次调用startDocument方法时会自动重置。

已识别的属性和特性

此规范定义了所有ValidatorHandler实现必须识别的以下特性。

http://xml.org/sax/features/namespace-prefixes

此特性控制ValidatorHandler如何引入原始SAX事件流中不存在的命名空间绑定。当此特性设置为true时,必须确保用户的ContentHandler将在Attributes对象中看到相应的xmlns*属性,该属性将在ContentHandler.startElement(String,String,String,Attributes)回调中添加。否则,xmlns*属性不得添加到传递给用户指定的ContentHandlerAttributes中。

(请注意,无论此开关如何,命名空间绑定始终通过用户指定的ContentHandlerContentHandler.startPrefixMapping(String,String)ContentHandler.endPrefixMapping(String)方法向应用程序通知。)

请注意,此特性默认设置为false

自版本:
1.5