- 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 描述 protectedValidatorHandler()派生类的构造方法
-
方法摘要
所有方法 接口方法 抽象方法 具体的方法 Modifier and Type 方法 描述 abstract ContentHandlergetContentHandler()获取ContentHandler,它接收增强的验证结果。abstract ErrorHandlergetErrorHandler()获取当前的ErrorHandler设置为ValidatorHandler。booleangetFeature(String name)查找特征标记的值。ObjectgetProperty(String name)查找属性的值。abstract LSResourceResolvergetResourceResolver()获取当前的LSResourceResolver设置为ValidatorHandler。abstract TypeInfoProvidergetTypeInfoProvider()获得TypeInfoProvider实现这一点ValidatorHandler。abstract voidsetContentHandler(ContentHandler receiver)设置接收增强验证结果的ContentHandler。abstract voidsetErrorHandler(ErrorHandler errorHandler)设置ErrorHandler以接收验证期间遇到的错误。voidsetFeature(String name, boolean value)为这个ValidatorHandler设置一个功能。voidsetProperty(String name, Object object)设置属性的值。abstract voidsetResourceResolver(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 implementsErrorHandler{ public void fatalError(SAXParseExceptione ) throwsSAXException{ throw e; } public void error(SAXParseExceptione ) throwsSAXException{ throw e; } public void warning(SAXParseExceptione ) 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 implementsLSResourceResolver{ publicLSInputresolveResource( 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可以识别属性名称,但无法更改当前值。 某些属性值可能仅在特定上下文中是不可变的或可变的,例如验证之前,之中或之后。ValidatorHandlers不需要识别设置任何特定的属性名称。- 参数
-
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)
-
-