- java.lang.Object
-
- javax.xml.validation.ValidatorHandler
-
- All Implemented Interfaces:
-
ContentHandler
public abstract class ValidatorHandler extends Object implements ContentHandler
流式验证器,适用于SAX流。一个
ValidatorHandler
对象不是线程安全的,不可重入。 换句话说,应用程序的责任是确保在任何给定时间从多个线程中使用一个ValidatorHandler
对象。ValidatorHandler
检查SAX事件是否遵循关联的Schema
中描述的约束集合 ,并且还可以修改SAX事件(例如通过添加默认值等)ValidatorHandler
从延伸ContentHandler
,但它细化了基本ContentHandler
按以下方式:- 的startElement /事件的endElement必须接收非空字符串为
uri
,localName
,并qname
,即使SAX允许他们中的一些是空的。 类似地,用户指定的ContentHandler
将为所有三个参数接收非空字符串。 - 应用程序必须确保正确调用
ValidatorHandler
的ContentHandler.startPrefixMapping(String,String)
和ContentHandler.endPrefixMapping(String)
。 类似地,用户指定的ContentHandler
将接收startPrefixMapping / endPrefixMapping事件。 如果ValidatorHandler
引入了额外的命名空间绑定,用户指定的ContentHandler
将会接收到额外的startPrefixMapping / endPrefixMapping事件。 -
Attributes
的ContentHandler.startElement(String,String,String,Attributes)
方法可能包含或不包括xmlns *属性。
每次调用startDocument方法时,会自动重置一个
ValidatorHandler
。认可的特性和特点
此规范定义了所有
ValidatorHandler
实现必须识别的以下功能。http://xml.org/sax/features/namespace-prefixes
此功能控制
ValidatorHandler
如何引入原始SAX事件流中不存在的命名空间绑定。 当此功能设置为true时,必须确保用户的ContentHandler
将在ContentHandler.startElement(String,String,String,Attributes)
回调的Attributes
对象中看到相应的xmlns*
属性。 否则,xmlns*
属性不能被添加到Attributes
则传递到用户指定的ContentHandler
。(请注意,无论此开关的,名称空间绑定总是通过通知应用程序
ContentHandler.startPrefixMapping(String,String)
种ContentHandler.endPrefixMapping(String)
的方法ContentHandler
由用户指定)。请注意,此功能不影响道路
ValidatorHandler
接收SAX事件。 它只是改变了增加SAX事件的方式。默认情况下,此功能设置为
false
。- 从以下版本开始:
- 1.5
-
-
构造方法摘要
构造方法 Modifier Constructor 描述 protected
ValidatorHandler()
派生类的构造方法
-
方法摘要
所有方法 接口方法 抽象方法 具体的方法 Modifier and Type 方法 描述 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()
获得TypeInfoProvider
实现这一点ValidatorHandler
。abstract void
setContentHandler(ContentHandler receiver)
设置接收增强验证结果的ContentHandler
。abstract void
setErrorHandler(ErrorHandler errorHandler)
设置ErrorHandler
以接收验证期间遇到的错误。void
setFeature(String name, boolean value)
为这个ValidatorHandler
设置一个功能。void
setProperty(String name, Object object)
设置属性的值。abstract void
setResourceResolver(LSResourceResolver resourceResolver)
设置LSResourceResolver
以在验证集中定制资源分辨率。-
Methods inherited from interface org.xml.sax.ContentHandler
characters, endDocument, endElement, endPrefixMapping, ignorableWhitespace, processingInstruction, setDocumentLocator, skippedEntity, startDocument, startElement, startPrefixMapping
-
-
-
-
方法详细信息
-
setContentHandler
public abstract void setContentHandler(ContentHandler receiver)
设置接收增强验证结果的ContentHandler
。当
ContentHandler
指定,一个ValidatorHandler
将作为过滤器和基本输入事件复制到指定ContentHandler
。在这样做时,
ValidatorHandler
可能会修改事件,例如添加默认属性。A
ValidatorHandler
可以在一定程度上缓冲事件,但是要允许解析器使用ValidatorHandler
,则必须满足以下要求。- 当
ContentHandler.startElement(String, String, String, Attributes)
,ContentHandler.endElement(String, String, String)
,ContentHandler.startDocument()
,或ContentHandler.endDocument()
被在调用ValidatorHandler
,在用户指定的相同的方法ContentHandler
必须调用回调返回之前相同的事件。 -
ValidatorHandler
可能不会引入输入中不存在的新元素。 -
ValidatorHandler
可能不会删除输入中存在的属性。
当指定的
ContentHandler
的回调方法抛出异常时,必须从ValidatorHandler
抛出相同的异常对象。ErrorHandler
不应该被通知这样的例外。即使在验证的中间,也可以调用此方法。
- 参数
-
receiver
- AContentHandler
或空值。
- 当
-
getContentHandler
public abstract ContentHandler getContentHandler()
获取ContentHandler
,它接收到增强的验证结果。- 结果
-
此方法返回是通过最后一组对象
getContentHandler()
方法,则返回null,因为这是方法从未被称为ValidatorHandler
创造。 - 另请参见:
-
setContentHandler(ContentHandler)
-
setErrorHandler
public abstract void setErrorHandler(ErrorHandler errorHandler)
设置ErrorHandler
以接收验证期间遇到的错误。错误处理程序可用于在验证期间自定义错误处理过程。 当设置了一个
ErrorHandler
时,验证期间发现的错误将首先发送到ErrorHandler
。错误处理程序可以通过从处理程序中抛出
SAXException
来立即中止进一步验证。 或者例如它可以在屏幕上打印一个错误,并尝试通过从ErrorHandler
正常返回来继续验证如果从
ErrorHandler
抛出Throwable
,那么相同的Throwable
对象将被抛向调用堆栈的根目录。ValidatorHandler
不允许扔SAXException
没有首先报告给ErrorHandler
。当
ErrorHandler
为null时,实现将表现为如下ErrorHandler
设置:class DraconianErrorHandler implements
ErrorHandler
{ public void fatalError(SAXParseException
e ) throwsSAXException
{ throw e; } public void error(SAXParseException
e ) throwsSAXException
{ throw e; } public void warning(SAXParseException
e ) throwsSAXException
{ // noop } }当创建一个新的
ValidatorHandler
对象时,最初该字段设置为null。- 参数
-
errorHandler
- 要设置的新的错误处理程序。 此参数可以为null。
-
getErrorHandler
public abstract ErrorHandler getErrorHandler()
获得当前的ErrorHandler
设置为ValidatorHandler
。- 结果
-
此方法返回是通过最后一组对象
setErrorHandler(ErrorHandler)
方法,则返回null,因为这是方法从未被称为ValidatorHandler
创造。 - 另请参见:
-
setErrorHandler(ErrorHandler)
-
setResourceResolver
public abstract void setResourceResolver(LSResourceResolver resourceResolver)
设置LSResourceResolver
以在验证集中定制资源分辨率。ValidatorHandler
使用LSResourceResolver
,当需要定位外部资源的同时进行验证,虽然确切地构成“定位外部资源”取决于每个模式语言。当
LSResourceResolver
为null时,实现将表现为如下LSResourceResolver
设置:class DumbLSResourceResolver implements
LSResourceResolver
{ publicLSInput
resolveResource( String publicId, String systemId, String baseURI) { return null; // always return null } }如果
LSResourceResolver
抛出一个RuntimeException
(或其派生类的实例),则ValidatorHandler
将中止解析和的呼叫者validate
方法将接收相同RuntimeException
。当创建一个新的
ValidatorHandler
对象时,最初该字段设置为null。- 参数
-
resourceResolver
- 要设置的新资源解析器。 此参数可以为null。
-
getResourceResolver
public abstract LSResourceResolver getResourceResolver()
获取当前的LSResourceResolver
设置为ValidatorHandler
。- 结果
-
此方法返回是通过最后一组对象
setResourceResolver(LSResourceResolver)
方法,则返回null,因为这是方法从未被称为ValidatorHandler
创造。 - 另请参见:
-
setErrorHandler(ErrorHandler)
-
getTypeInfoProvider
public abstract TypeInfoProvider getTypeInfoProvider()
获得TypeInfoProvider
的这个ValidatorHandler
的实现。获取的
TypeInfoProvider
可以在解析期间查询以访问由验证器确定的类型信息。某些模式语言没有定义类型的概念,对于这些语言,可能不支持此方法。 然而,为了符合本规范,W3C XML Schema 1.0的实现必须支持此操作。
- 结果
-
如果验证器/模式语言不支持
TypeInfo
的概念, 则为null 。 否则非空有效TypeInfoProvider
。
-
getFeature
public boolean getFeature(String name) throws SAXNotRecognizedException, SAXNotSupportedException
查找特征标记的值。功能名称是任何完全限定的URI。
ValidatorHandler
可以识别功能名称,但暂时无法返回其值。 某些特征值可能仅在特定上下文中可用,例如在验证之前,期间或之后。实施者是免费(并被鼓励)发明自己的功能,使用自己的URI建立的名称。
- 参数
-
name
- 特征名称,它是非空的完全限定URI。 - 结果
- 特征的当前值(true或false)。
- 异常
-
SAXNotRecognizedException
- 如果不能分配或检索到特征值。 -
SAXNotSupportedException
-ValidatorHandler
识别功能名称,但此时无法确定其值。 -
NullPointerException
-name
是null
。 - 另请参见:
-
setFeature(String, boolean)
-
setFeature
public void setFeature(String name, boolean value) throws SAXNotRecognizedException, SAXNotSupportedException
为这个
ValidatorHandler
设置一个功能。功能可以用来控制一个
ValidatorHandler
解析模式的方式。 功能名称是任何完全限定的URI。SchemaFactory
可以公开特征值,但无法更改当前值。 一些特征值可以是不可变的或可变的仅在特定的上下文中,例如验证之前,期间或之后。所有实现都需要支持
XMLConstants.FEATURE_SECURE_PROCESSING
功能。 当功能是:-
true
:实现将限制XML处理以符合实现限制。 示例包括将消耗大量资源的实体扩展限制和XML模式构造。 如果XML处理由于安全原因而受到限制,则通过对已注册的ErrorHandler.fatalError(SAXParseException exception)
的呼叫进行报告。 见setErrorHandler(ErrorHandler errorHandler)
。 -
false
:实现将根据XML规范处理XML,而不考虑可能的实现限制。
- 参数
-
name
- 功能名称,它是非空的完全限定URI。 -
value
- 要素的值(true或false)。 - 异常
-
SAXNotRecognizedException
- 如果不能分配或检索到特征值。 -
SAXNotSupportedException
- 当ValidatorHandler
识别功能名称但无法设置请求的值时。 -
NullPointerException
-name
是null
。 - 另请参见:
-
getFeature(String)
-
-
setProperty
public void setProperty(String name, Object object) throws SAXNotRecognizedException, SAXNotSupportedException
设置属性的值。属性名称是任何完全限定的URI。
ValidatorHandler
可以识别属性名称,但无法更改当前值。 某些属性值可能仅在特定上下文中是不可变的或可变的,例如验证之前,之中或之后。ValidatorHandler
s不需要识别设置任何特定的属性名称。- 参数
-
name
- 属性名称,它是非空的完全限定URI。 -
object
- 该物业所需的价值。 - 异常
-
SAXNotRecognizedException
- 如果不能分配或检索属性值。 -
SAXNotSupportedException
-ValidatorHandler
识别属性名称但无法设置请求的值时。 -
NullPointerException
-name
是null
。
-
getProperty
public Object getProperty(String name) throws SAXNotRecognizedException, SAXNotSupportedException
查找属性的值。属性名称是任何完全限定的URI。
ValidatorHandler
可以识别属性名称,但暂时无法返回其值。 某些属性值可能仅在特定上下文中可用,例如验证之前,期间或之后。ValidatorHandler
不需要识别任何特定的属性名称。实施者是免费的(并被鼓励)发明自己的属性,使用自己的URI建立的名称。
- 参数
-
name
- 属性名称,它是非空的完全限定URI。 - 结果
- 当前的属性值。
- 异常
-
SAXNotRecognizedException
- 如果不能分配或检索属性值。 -
SAXNotSupportedException
- 当XMLReader当前识别属性名称但无法确定其值时。 -
NullPointerException
-name
为null
。 - 另请参见:
-
setProperty(String, Object)
-
-