Most visited

Recently visited

Added in API level 8

ValidatorHandler

public abstract class ValidatorHandler
extends Object implements ContentHandler

java.lang.Object
   ↳ javax.xml.validation.ValidatorHandler


流式验证器,适用于SAX流。

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

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

ValidatorHandler从延伸 ContentHandler ,但它细化了基本 ContentHandler按以下方式:

  1. startElement/endElement events must receive non-null String for uri, localName, and qname, even though SAX allows some of them to be null. Similarly, the user-specified ContentHandler will receive non-null Strings for all three parameters.
  2. Applications must ensure that ValidatorHandler's startPrefixMapping(String, String) and endPrefixMapping(String) are invoked properly. Similarly, the user-specified ContentHandler will receive startPrefixMapping/endPrefixMapping events. If the ValidatorHandler introduces additional namespace bindings, the user-specified ContentHandler will receive additional startPrefixMapping/endPrefixMapping events.
  3. Attributes for the startElement(String, String, String, Attributes) method may or may not include xmlns* attributes.

每次调用startDocument方法时,都会自动重置 ValidatorHandler

Recognized Properties and Features

该规范定义了以下必须被所有 ValidatorHandler实现识别的功能。

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

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

(请注意,无论此开关如何,名称空间绑定总是通过用户指定的 ContentHandler startPrefixMapping(String, String)endPrefixMapping(String)方法通知给应用程序。)

请注意,此功能影响道路ValidatorHandler接收SAX事件。 它仅仅改变了它增加SAX事件的方式。

该功能默认设置为 false

Summary

Protected constructors

ValidatorHandler()

派生类的构造函数。

Public methods

abstract ContentHandler getContentHandler()

获取接收到增强的验证结果的 ContentHandler

abstract ErrorHandler getErrorHandler()

获取当前 ErrorHandler设置为这个 ValidatorHandler

boolean getFeature(String name)

查找功能标志的值。

Object getProperty(String name)

查找一个属性的值。

abstract LSResourceResolver getResourceResolver()

获取当前 LSResourceResolver设置为这个 ValidatorHandler

abstract TypeInfoProvider getTypeInfoProvider()

获得此 ValidatorHandlerTypeInfoProvider实施。

abstract void setContentHandler(ContentHandler receiver)

设置接收增强的验证结果的 ContentHandler

abstract void setErrorHandler(ErrorHandler errorHandler)

设置 ErrorHandler以接收验证期间遇到的错误。

void setFeature(String name, boolean value)

设置功能标志的值。

void setProperty(String name, Object object)

设置属性的值。

abstract void setResourceResolver(LSResourceResolver resourceResolver)

设置 LSResourceResolver以在验证期间自定义资源分辨率。

Inherited methods

From class java.lang.Object
From interface org.xml.sax.ContentHandler

Protected constructors

ValidatorHandler

Added in API level 8
ValidatorHandler ()

派生类的构造函数。

构造函数什么都不做。

派生类必须创建包含 null ErrorHandlernull LSResourceResolver ValidatorHandler对象。

Public methods

getContentHandler

Added in API level 8
ContentHandler getContentHandler ()

获取接收到增强的验证结果的 ContentHandler

Returns
ContentHandler This method returns the object that was last set through the getContentHandler() method, or null if that method has never been called since this ValidatorHandler has created.

也可以看看:

getErrorHandler

Added in API level 8
ErrorHandler getErrorHandler ()

获取当前 ErrorHandler设置为这个 ValidatorHandler

Returns
ErrorHandler This method returns the object that was last set through the setErrorHandler(ErrorHandler) method, or null if that method has never been called since this ValidatorHandler has created.

也可以看看:

getFeature

Added in API level 8
boolean getFeature (String name)

查找功能标志的值。

功能名称是任何完全限定的URI。 ValidatorHandler可能会识别功能名称,但暂时无法返回其值。 某些功能值只能在特定上下文中使用,例如在验证之前,期间或之后。

实现者可以免费(并鼓励)使用构建在他们自己的URI上的名称来创建自己的特性。

Parameters
name String: The feature name, which is a non-null fully-qualified URI.
Returns
boolean The current value of the feature (true or false).
Throws
SAXNotRecognizedException If the feature value can't be assigned or retrieved.
SAXNotSupportedException When the ValidatorHandler recognizes the feature name but cannot determine its value at this time.
NullPointerException When the name parameter is null.

也可以看看:

getProperty

Added in API level 8
Object getProperty (String name)

查找一个属性的值。

属性名称是任何完全限定的URI。 ValidatorHandler可能会识别属性名称,但暂时无法返回其值。 某些属性值只能在特定的上下文中使用,例如在验证之前,期间或之后。

ValidatorHandler不需要识别任何特定的属性名称。

实现者可以免费(并鼓励)使用构建在他们自己的URI上的名称来创建他们自己的属性。

Parameters
name String: The property name, which is a non-null fully-qualified URI.
Returns
Object The current value of the property.
Throws
SAXNotRecognizedException If the property value can't be assigned or retrieved.
SAXNotSupportedException When the XMLReader recognizes the property name but cannot determine its value at this time.
NullPointerException When the name parameter is null.

也可以看看:

getResourceResolver

Added in API level 8
LSResourceResolver getResourceResolver ()

获取当前 LSResourceResolver设置为此 ValidatorHandler

Returns
LSResourceResolver This method returns the object that was last set through the setResourceResolver(LSResourceResolver) method, or null if that method has never been called since this ValidatorHandler has created.

也可以看看:

getTypeInfoProvider

Added in API level 8
TypeInfoProvider getTypeInfoProvider ()

获得此 ValidatorHandlerTypeInfoProvider实施。

可以在解析期间查询获得的 TypeInfoProvider以访问验证器确定的类型信息。

某些模式语言不定义类型的概念,对于这些语言,可能不支持此方法。 但是,要符合此规范,W3C XML Schema 1.0的实现必须支持此操作。

Returns
TypeInfoProvider null if the validator / schema language does not support the notion of TypeInfo. Otherwise a non-null valid TypeInfoProvider.

setContentHandler

Added in API level 8
void setContentHandler (ContentHandler receiver)

设置接收到增强的验证结果的 ContentHandler

ContentHandler指定,一个 ValidatorHandler将作为过滤器和基本输入事件复制到指定 ContentHandler

这样做, ValidatorHandler可以修改事件,例如添加默认属性。

一个 ValidatorHandler可能在某种程度上缓冲事件,但为了允许 ValidatorHandler被解析器使用,必须满足以下要求。

  1. When startElement(String, String, String, Attributes), endElement(String, String, String), startDocument(), or endDocument() are invoked on a ValidatorHandler, the same method on the user-specified ContentHandler must be invoked for the same event before the callback returns.
  2. ValidatorHandler may not introduce new elements that were not present in the input.
  3. ValidatorHandler may not remove attributes that were present in the input.

当指定的ContentHandler上的回调方法引发异常时,必须从ValidatorHandler抛出相同的异常对象。 不应该通知ErrorHandler这样的例外。

即使在验证过程中也可以调用此方法。

Parameters
receiver ContentHandler: A ContentHandler or a null value.

setErrorHandler

Added in API level 8
void setErrorHandler (ErrorHandler errorHandler)

设置 ErrorHandler以接收验证过程中遇到的错误。

错误处理程序可用于在验证期间自定义错误处理过程。 当设置了ErrorHandler时,验证过程中发现的错误将首先发送到ErrorHandler

错误处理程序可以通过从处理程序中抛出SAXException立即中止进一步验证。 或者,例如,它可以向屏幕输出错误,并尝试通过从ErrorHandler正常返回来继续验证

如果任何 Throwable选自抛出 ErrorHandler ,相同的 Throwable对象将朝向调用堆栈的根被抛出。

ValidatorHandler不允许扔 SAXException没有首先将其报告给 ErrorHandler

ErrorHandler为空时,实现将表现得好像设置了以下 ErrorHandler

 class DraconianErrorHandler implements ErrorHandler {
     public void fatalError( SAXParseException e ) throws SAXException {
         throw e;
     }
     public void error( SAXParseException e ) throws SAXException {
         throw e;
     }
     public void warning( SAXParseException e ) throws SAXException {
         // noop
     }
 }
 

当新的 ValidatorHandler对象被创建时,最初这个字段被设置为空。

Parameters
errorHandler ErrorHandler: A new error handler to be set. This parameter can be null.

setFeature

Added in API level 8
void setFeature (String name, 
                boolean value)

设置功能标志的值。

功能可用于控制 ValidatorHandler解析架构的方式,但 ValidatorHandler不需要识别任何特定的属性名称。

功能名称是任何完全限定的URI。 ValidatorHandler可能会公开一个特征值,但无法更改当前值。 某些特征值只能在特定上下文中不可变或可变,例如在验证之前,期间或之后。

Parameters
name String: The feature name, which is a non-null fully-qualified URI.
value boolean: The requested value of the feature (true or false).
Throws
SAXNotRecognizedException If the feature value can't be assigned or retrieved.
SAXNotSupportedException When the ValidatorHandler recognizes the feature name but cannot set the requested value.
NullPointerException When the name parameter is null.

也可以看看:

setProperty

Added in API level 8
void setProperty (String name, 
                Object object)

设置属性的值。

属性名称是任何完全限定的URI。 ValidatorHandler可能会识别属性名称,但无法更改当前值。 某些属性值只能在特定上下文中不可变或可变,例如在验证之前,期间或之后。

ValidatorHandler不需要识别设置任何特定的属性名称。

Parameters
name String: The property name, which is a non-null fully-qualified URI.
object Object: The requested value for the property.
Throws
SAXNotRecognizedException If the property value can't be assigned or retrieved.
SAXNotSupportedException When the ValidatorHandler recognizes the property name but cannot set the requested value.
NullPointerException When the name parameter is null.

setResourceResolver

Added in API level 8
void setResourceResolver (LSResourceResolver resourceResolver)

设置 LSResourceResolver以在验证期间自定义资源分辨率。

ValidatorHandlerLSResourceResolver时需要定位外部资源时使用 LSResourceResolver ,尽管“定位外部资源”的确切含义取决于每种模式语言。

LSResourceResolver为空时,实现将表现得好像设置了以下 LSResourceResolver

 class DumbLSResourceResolver implements LSResourceResolver {
     public LSInput resolveResource(
         String publicId, String systemId, String baseURI) {

         return null; // always return null
     }
 }
 

如果 LSResourceResolver引发 RuntimeException (或其派生类的实例),则 ValidatorHandler将中止解析,并且 validate方法的调用方将收到相同的 RuntimeException

当一个新的 ValidatorHandler对象被创建时,最初这个字段被设置为空。

Parameters
resourceResolver LSResourceResolver: A new resource resolver to be set. This parameter can be null.

Hooray!