public abstract class ValidatorHandler extends Object implements ContentHandler
一个ValidatorHandler
对象不是线程安全的,不能重入。 换句话说,应用程序的责任是确保在任何给定时间从多个线程中使用一个ValidatorHandler
对象。
ValidatorHandler
检查SAX事件是否遵循相关联的Schema
中描述的约束集 ,此外,它可以修改SAX事件(例如通过添加默认值等)
ValidatorHandler
从延伸ContentHandler
,但它细化了基本ContentHandler
按以下方式:
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 *属性。 甲ValidatorHandler
自动复位每次调用startDocument方法时间。
该规范定义了所有ValidatorHandler
实现必须识别的以下功能。
http://xml.org/sax/features/namespace-prefixes
此功能控制ValidatorHandler
如何引入原始SAX事件流中不存在的命名空间绑定。 当此功能设置为true,则必须确保用户ContentHandler
会看到相应xmlns*
属性在Attributes
的对象ContentHandler.startElement(String,String,String,Attributes)
回调。 否则, xmlns*
属性不能被添加到Attributes
则传递到用户指定的ContentHandler
。
(请注意,无论此开关的,名称空间绑定总是通过通知应用程序ContentHandler.startPrefixMapping(String,String)
种ContentHandler.endPrefixMapping(String)
所述的方法ContentHandler
由用户指定)。
请注意,此功能不影响的方式ValidatorHandler
接收SAX事件。 它只是改变了增加SAX事件的方式。
此功能默认设置为false
。
Modifier | Constructor and Description |
---|---|
protected |
ValidatorHandler()
派生类的构造方法
|
Modifier and Type | Method and Description |
---|---|
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()
获得这 ValidatorHandler 的 TypeInfoProvider 实现 。
|
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 以在验证集中自定义资源分辨率。
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
characters, endDocument, endElement, endPrefixMapping, ignorableWhitespace, processingInstruction, setDocumentLocator, skippedEntity, startDocument, startElement, startPrefixMapping
public abstract void setContentHandler(ContentHandler receiver)
ContentHandler
接收扩充的验证结果。
当指定ContentHandler
时, ValidatorHandler
将作为过滤器使用,基本上将传入的事件复制到指定的ContentHandler
。
在这样做时, ValidatorHandler
可以修改事件,例如通过添加默认属性。
甲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
- A ContentHandler
或空值。
public abstract ContentHandler getContentHandler()
ContentHandler
接收扩充的验证结果。
getContentHandler()
方法最后设置的对象,如果该方法从未调用,则为null,因为此ValidatorHandler
已创建。
setContentHandler(ContentHandler)
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 ) throws SAXException
{
throw e;
}
public void error( SAXParseException
e ) throws SAXException
{
throw e;
}
public void warning( SAXParseException
e ) throws SAXException
{
// noop
}
}
当创建一个新的ValidatorHandler
对象时,最初该字段设置为null。
errorHandler
- 要设置的新的错误处理程序。
此参数可以为null。
public abstract ErrorHandler getErrorHandler()
ErrorHandler
设置为ValidatorHandler
。
setErrorHandler(ErrorHandler)
方法,则返回null,因为这是方法从未被称为ValidatorHandler
创造。
setErrorHandler(ErrorHandler)
public abstract void setResourceResolver(LSResourceResolver resourceResolver)
LSResourceResolver
以在验证集中定制资源分辨率。
ValidatorHandler
使用LSResourceResolver
,当需要定位外部资源的同时进行验证,虽然完全是什么构成“定位外部资源”取决于每种架构语言。
当LSResourceResolver
为null时,实现将表现为如下设置以下LSResourceResolver
:
class DumbLSResourceResolver implements LSResourceResolver
{
public LSInput
resolveResource(
String publicId, String systemId, String baseURI) {
return null; // always return null
}
}
如果一个RuntimeException
(或其派生类的实例)抛出RuntimeException
,那么ValidatorHandler
将中止解析,并且validate
方法的调用者将收到相同的RuntimeException
。
当创建一个新的ValidatorHandler
对象时,最初该字段设置为null。
resourceResolver
- 要设置的新资源解析器。
此参数可以为null。
public abstract LSResourceResolver getResourceResolver()
LSResourceResolver
设置为ValidatorHandler
。
setResourceResolver(LSResourceResolver)
方法,则返回null,因为这是方法从未被称为ValidatorHandler
创造。
setErrorHandler(ErrorHandler)
public abstract TypeInfoProvider getTypeInfoProvider()
TypeInfoProvider
这个ValidatorHandler
的实现 。
获得的TypeInfoProvider
可以在解析期间查询以访问由验证器确定的类型信息。
某些模式语言没有定义类型的概念,对于这些语言,可能不支持此方法。 然而,为了符合本规范,W3C XML Schema 1.0的实现必须支持此操作。
TypeInfo
的概念, 则为null 。
否则为非空有效TypeInfoProvider
。
public boolean getFeature(String name) throws SAXNotRecognizedException, SAXNotSupportedException
功能名称是任何完全限定的URI。 ValidatorHandler
可以识别功能名称,但暂时无法返回其值。 某些特征值可能仅在特定上下文中可用,例如在验证之前,期间或之后。
实施者是免费(并被鼓励)发明自己的功能,使用自己的URI建立的名称。
name
- 特征名称,它是非空的完全限定URI。
SAXNotRecognizedException
- 如果不能分配或检索到特征值。
SAXNotSupportedException
- 当ValidatorHandler
识别功能名称,但此时无法确定其值。
NullPointerException
-
name
为
null
。
setFeature(String, boolean)
public void setFeature(String name, boolean value) throws SAXNotRecognizedException, SAXNotSupportedException
为这个ValidatorHandler
设置一个功能。
功能可以用来控制一个ValidatorHandler
解析模式的方式。 功能名称是任何完全限定的URI。 SchemaFactory
可以公开特征值,但无法更改当前值。 一些特征值可以是不可变的或可变的仅在特定的上下文中,例如验证之前,期间或之后。
所有实现都需要支持XMLConstants.FEATURE_SECURE_PROCESSING
功能。 当功能是:
true
:实现将限制XML处理以符合实施限制。 示例包括enity扩展限制和消耗大量资源的XML Schema结构。 如果出于安全考虑,XML处理受到限制,将通过对已注册的ErrorHandler.fatalError(SAXParseException exception)
的呼叫进行报告。 见setErrorHandler(ErrorHandler errorHandler)
。 false
:实现将根据XML规范处理XML,而不考虑可能的实现限制。 name
- 特征名称,它是非空的完全限定的URI。
value
- 要素的值(true或false)。
SAXNotRecognizedException
- 如果无法分配或检索到特征值。
SAXNotSupportedException
- 当ValidatorHandler
识别功能名称但无法设置请求的值时。
NullPointerException
- 当
name
是
null
。
getFeature(String)
public void setProperty(String name, Object object) throws SAXNotRecognizedException, SAXNotSupportedException
属性名称是任何完全限定的URI。 ValidatorHandler
可以识别属性名称,但无法更改当前值。 某些属性值可能仅在特定上下文中是不可变的或可变的,例如验证之前,之中或之后。
ValidatorHandler
不需要识别设置任何特定的属性名称。
name
- 属性名称,它是非空的完全限定的URI。
object
- 该属性的请求的值。
SAXNotRecognizedException
- 如果属性值无法分配或检索。
SAXNotSupportedException
- ValidatorHandler
识别属性名称但无法设置请求的值时。
NullPointerException
- 当
name
是
null
。
public Object getProperty(String name) throws SAXNotRecognizedException, SAXNotSupportedException
属性名称是任何完全限定的URI。 ValidatorHandler
可以识别属性名称,但暂时无法返回其值。 某些属性值可能仅在特定上下文中可用,例如验证之前,期间或之后。
ValidatorHandler
不需要识别任何特定的属性名称。
实施者是免费的(并被鼓励)发明自己的属性,使用自己的URI建立的名称。
name
- 属性名称,它是非空的完全限定的URI。
SAXNotRecognizedException
- 如果不能分配或检索属性值。
SAXNotSupportedException
- 当XMLReader识别属性名称,但此时无法确定其值。
NullPointerException
- 当时
name
是
null
。
setProperty(String, Object)