- 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按以下方式:- 的startElement /事件的endElement必须接收非空字符串为
uri,localName,并qname,即使SAX允许他们中的一些是空的。 同样,用户指定的ContentHandler将为所有三个参数接收非null字符串。 - 应用程序必须确保正确调用
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将在5144681112613回调的Attributes对象中看到相应的xmlns*属性。 否则,xmlns*属性不能被添加到Attributes则传递到用户指定ContentHandler。(请注意,无论此切换如何,命名空间绑定始终通过
ContentHandler.startPrefixMapping(String,String)和用户指定的51446812323671的ContentHandler.endPrefixMapping(String)方法通知应用程序。)请注意,此功能不影响的方式
ValidatorHandler接收SAX事件。 它只是改变了它增加SAX事件的方式。默认情况下,此功能设置为
false。- 从以下版本开始:
- 1.5
-
-
构造方法摘要
构造方法 变量 构造器 描述 protectedValidatorHandler()派生类的构造函数。
-
方法摘要
所有方法 实例方法 抽象方法 具体的方法 变量和类型 方法 描述 abstract ContentHandlergetContentHandler()获取ContentHandler,它接收增强的验证结果。abstract ErrorHandlergetErrorHandler()获取当前ErrorHandler设置为这个ValidatorHandler。booleangetFeature(String name)查找功能标志的值。ObjectgetProperty(String name)查找属性的值。abstract LSResourceResolvergetResourceResolver()获取当前LSResourceResolver设置为这个ValidatorHandler。abstract TypeInfoProvidergetTypeInfoProvider()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以在验证剧集中自定义资源分辨率。
-
-
-
方法详细信息
-
setContentHandler
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- AContentHandler或空值。
- 当
-
getContentHandler
public abstract ContentHandler getContentHandler()
获取ContentHandler,它接收增强的验证结果。- 结果
-
此方法返回通过
getContentHandler()方法最后设置的对象,如果自ValidatorHandler创建以来从未调用过该方法,则返回null。 - 另请参见:
-
setContentHandler(ContentHandler)
-
setErrorHandler
public abstract void setErrorHandler(ErrorHandler errorHandler)
设置ErrorHandler以接收验证期间遇到的错误。错误处理程序可用于在验证期间自定义错误处理过程。 设置
ErrorHandler时,验证期间发现的错误将首先发送到ErrorHandler。错误处理程序可以通过从处理程序中抛出
SAXException来立即中止进一步的验证。 或者例如,它可以向屏幕打印错误,并尝试通过从ErrorHandler正常返回来继续验证如果任何
Throwable选自抛出ErrorHandler,同样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)方法最后设置的对象,如果自ValidatorHandler创建以来从未调用过该方法,则返回null。 - 另请参见:
-
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)方法最后设置的对象,如果从ValidatorHandler创建以来从未调用过该方法,则返回null。 - 另请参见:
-
setErrorHandler(ErrorHandler)
-
getTypeInfoProvider
public abstract TypeInfoProvider getTypeInfoProvider()
获得此ValidatorHandler的TypeInfoProvider实现。可以在解析期间查询所获得的
TypeInfoProvider以访问由验证器确定的类型信息。某些模式语言没有定义类型的概念,对于这些语言,可能不支持此方法。 但是,为了符合此规范,W3C XML Schema 1.0的实现必须支持此操作。
- 结果
-
如果验证器/模式语言不支持
TypeInfo的概念,则返回null 。 否则为非null有效TypeInfoProvider。
-
getFeature
public boolean getFeature(String name) throws SAXNotRecognizedException, SAXNotSupportedException
查找功能标志的值。功能名称是任何完全限定的URI。
ValidatorHandler可以识别功能名称,但暂时无法返回其值。 某些特征值可能仅在特定上下文中可用,例如在验证之前,期间或之后。实现者可以免费(并鼓励)使用基于自己的URI构建的名称来发明自己的功能。
- 参数
-
name- 功能名称,它是一个非null的完全限定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 Schema构造。 如果出于安全原因限制XML处理,则将通过对已注册的ErrorHandler.fatalError(SAXParseException exception)的调用来报告。 见setErrorHandler(ErrorHandler errorHandler)。 -
false:实现将根据XML规范处理XML,而不考虑可能的实现限制。
- 参数
-
name- 功能名称,它是一个非null的完全限定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- 属性名称,它是一个非null的完全限定URI。 -
object- 属性的请求值。 - 异常
-
SAXNotRecognizedException- 如果无法分配或检索属性值。 -
SAXNotSupportedException- 当ValidatorHandler识别属性名称但无法设置请求的值时。 -
NullPointerException- 时name是null。
-
getProperty
public Object getProperty(String name) throws SAXNotRecognizedException, SAXNotSupportedException
查找属性的值。属性名称是任何完全限定的URI。
ValidatorHandler可以识别属性名称,但暂时无法返回其值。 某些属性值可能仅在特定上下文中可用,例如在验证之前,期间或之后。ValidatorHandlers不需要识别任何特定的属性名称。实现者可以免费(并鼓励)使用基于自己的URI构建的名称来创建自己的属性。
- 参数
-
name- 属性名称,它是一个非null的完全限定URI。 - 结果
- 属性的当前值。
- 异常
-
SAXNotRecognizedException- 如果无法分配或检索属性值。 -
SAXNotSupportedException- 当XMLReader识别属性名称但此时无法确定其值时。 -
NullPointerException- 时name是null。 - 另请参见:
-
setProperty(String, Object)
-
-