Schema
检查XML文档的处理器。
验证器对象不是线程安全的,也不是可重入的。换句话说,应用程序有责任确保一个Validator
对象在任何给定时间内不会被多个线程使用,并且在调用validate
方法时,应用程序不得递归调用validate
方法。
- 自版本:
- 1.5
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionabstract ErrorHandler
获取设置为此Validator
的当前ErrorHandler
。boolean
getFeature
(String name) 查找特性标志的值。getProperty
(String name) 查找属性的值。abstract LSResourceResolver
获取设置为此Validator
的当前LSResourceResolver
。abstract void
reset()
将此Validator
重置为其原始配置。abstract void
setErrorHandler
(ErrorHandler errorHandler) 设置用于在调用validate
方法时接收遇到的错误的ErrorHandler
。void
setFeature
(String name, boolean value) 设置特性标志的值。void
setProperty
(String name, Object object) 设置属性的值。abstract void
setResourceResolver
(LSResourceResolver resourceResolver) 设置为在验证过程中自定义资源解析的LSResourceResolver
。void
验证指定的输入。abstract void
验证指定的输入并将增强的验证结果发送到指定的输出。
-
Constructor Details
-
Validator
protected Validator()派生类的构造函数。构造函数不执行任何操作。
派生类必须创建具有
null
Validator
对象的ErrorHandler
和null
LSResourceResolver
。
-
-
Method Details
-
reset
public abstract void reset()将此Validator
重置为其原始配置。Validator
被重置为使用Schema.newValidator()
创建时的相同状态。reset()
旨在允许重用现有的Validator
,从而节省与创建新Validator
相关的资源。重置后的
Validator
不能保证具有相同的LSResourceResolver
或ErrorHandler
Object
,例如Object.equals(Object obj)
。但它保证具有功能上相等的LSResourceResolver
和ErrorHandler
。 -
validate
验证指定的输入。这只是一个方便方法,用于调用带有
null
result
的validate(Source source, Result result)
。- 参数:
-
source
- 要验证的XML。必须是XML文档或XML元素,不能为null。为了向后兼容,尝试验证除文档或元素之外的任何内容的结果取决于实现。实现必须识别和处理输入,或抛出IllegalArgumentException。 - 抛出:
-
IllegalArgumentException
- 如果Source
是实现无法验证的XML工件(例如处理指令)。 -
SAXException
- 如果ErrorHandler
抛出SAXException
,或者发现致命错误且ErrorHandler
正常返回。 -
IOException
- 如果验证器正在处理SAXSource
且基础的XMLReader
抛出IOException
。 -
NullPointerException
- 如果source
为null
。 - 参见:
-
validate
验证指定的输入并将增强的验证结果发送到指定的输出。Source
/Result
可接受的StreamSource
SAXSource
DOMSource
StAXSource
null
OK OK OK OK StreamResult
OK IllegalArgumentException
IllegalArgumentException
IllegalArgumentException
SAXResult
IllegalArgumentException
OK IllegalArgumentException
IllegalArgumentException
DOMResult
IllegalArgumentException
IllegalArgumentException
OK IllegalArgumentException
StAXResult
IllegalArgumentException
IllegalArgumentException
IllegalArgumentException
OK 要将一个
Source
验证为另一种Result
,请使用身份转换器(参见TransformerFactory.newTransformer()
)。在验证过程中发现的错误将发送到指定的
ErrorHandler
。如果文档有效,或者如果文档包含一些错误但没有一个是致命错误且
ErrorHandler
没有抛出任何异常,则该方法将正常返回。- 参数:
-
source
- 要验证的XML。必须是XML文档或XML元素,不能为null。为了向后兼容,尝试验证除文档或元素之外的任何内容的结果取决于实现。实现必须识别和处理输入,或抛出IllegalArgumentException。 -
result
- 接收(可能增强的)XML的Result
对象。如果调用方对此不感兴趣,则此参数可以为null。请注意,当使用DOMResult
时,验证器可能只是将相同的DOM节点从DOMSource
传递给DOMResult
(在这种情况下source.getNode()==result.getNode()
),它可能复制整个DOM树,或者可能更改源给定的节点。 - 抛出:
-
IllegalArgumentException
- 如果Result
类型与Source
类型不匹配,或者如果Source
是实现无法验证的XML工件(例如处理指令)。 -
SAXException
- 如果ErrorHandler
抛出SAXException
,或者发现致命错误且ErrorHandler
正常返回。 -
IOException
- 如果验证器正在处理SAXSource
且基础的XMLReader
抛出IOException
。 -
NullPointerException
- 如果source
参数为null
。 - 参见:
-
setErrorHandler
设置ErrorHandler
以接收在validate
方法调用期间遇到的错误。错误处理程序可用于在验证过程中自定义错误处理过程。设置了
ErrorHandler
后,验证过程中发现的错误将首先发送到ErrorHandler
。错误处理程序可以通过从处理程序中抛出
SAXException
立即中止进一步验证。或者例如,它可以将错误打印到屏幕并尝试通过从ErrorHandler
中正常返回来继续验证。如果从
ErrorHandler
中抛出任何Throwable
,则调用validate
方法的调用者将抛出相同的Throwable
对象。Validator
不允许在未先向ErrorHandler
报告的情况下抛出SAXException
。当
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
{ // 空操作 } }创建新的
Validator
对象时,最初此字段设置为null。- 参数:
-
errorHandler
- 要设置的新错误处理程序。此参数可以为null。
-
getErrorHandler
获取设置为此Validator
的当前ErrorHandler
。- 返回:
-
此方法返回通过
setErrorHandler(ErrorHandler)
方法最后设置的对象,如果自创建此Validator
以来从未调用过该方法,则返回null。 - 另请参阅:
-
setResourceResolver
设置LSResourceResolver
以在验证过程中自定义资源解析。Validator
在需要在验证过程中定位外部资源时使用LSResourceResolver
,尽管“定位外部资源”的确切含义取决于每种模式语言。当
LSResourceResolver
为null时,实现将表现为已设置以下LSResourceResolver
:class DumbLSResourceResolver implements
LSResourceResolver
{ publicLSInput
resolveResource( String publicId, String systemId, String baseURI) { return null; // 总是返回null } }如果
LSResourceResolver
抛出RuntimeException
(或其派生类的实例),则Validator
将中止解析,并且调用validate
方法的调用者将收到相同的RuntimeException
。创建新的
Validator
对象时,最初此字段设置为null。- 参数:
-
resourceResolver
- 要设置的新资源解析器。此参数可以为null。
-
getResourceResolver
获取设置为此Validator
的当前LSResourceResolver
。- 返回:
-
此方法返回通过
setResourceResolver(LSResourceResolver)
方法最后设置的对象,如果自创建此Validator
以来从未调用过该方法,则返回null。 - 另请参阅:
-
getFeature
查找特性标志的值。特性名称是任何完全限定的URI。
Validator
可能会识别特性名称,但暂时无法返回其值。某些特性值可能仅在特定上下文中可用,例如在验证之前、期间或之后。实现者可以自由(并鼓励)发明自己的特性,使用建立在其自己URI上的名称。
- 参数:
-
name
- 特性名称,非null完全限定的URI。 - 返回:
- 特性的当前值(true或false)。
- 抛出:
-
SAXNotRecognizedException
- 如果无法分配或检索特性值。 -
SAXNotSupportedException
- 当Validator
识别特性名称但此时无法确定其值时。 -
NullPointerException
- 当名称参数为null时。 - 另请参阅:
-
setFeature
public void setFeature(String name, boolean value) throws SAXNotRecognizedException, SAXNotSupportedException 设置特性标志的值。特性可用于控制
Validator
解析模式的方式,尽管Validator
不需要识别任何特定的特性名称。特性名称是任何完全限定的URI。
Validator
可能会公开特性值,但可能无法更改当前值。某些特性值可能在特定上下文中是不可变的或仅在特定上下文中可变,例如在验证之前、期间或之后。- 参数:
-
name
- 特性名称,非null完全限定的URI。 -
value
- 特性的请求值(true或false)。 - 抛出:
-
SAXNotRecognizedException
- 如果无法分配或检索特性值。 -
SAXNotSupportedException
- 当Validator
识别特性名称但无法设置请求的值时。 -
NullPointerException
- 当名称参数为null时。 - 另请参阅:
-
setProperty
public void setProperty(String name, Object object) throws SAXNotRecognizedException, SAXNotSupportedException 设置属性的值。属性名称是任何完全限定的URI。
Validator
可以识别属性名称,但可能无法更改当前值。某些属性值可能是不可变的,或者仅在特定上下文中(例如验证之前、期间或之后)可变。所有实现JAXP 1.5或更新版本的实现都必须支持
XMLConstants.ACCESS_EXTERNAL_DTD
和XMLConstants.ACCESS_EXTERNAL_SCHEMA
属性。-
在源文件或模式文件中访问外部DTD的访问受到
XMLConstants.ACCESS_EXTERNAL_DTD
属性指定的协议的限制。如果由于此属性的限制而在验证期间拒绝访问,则SAXException
将由validate(Source)
方法抛出。由schemaLocation属性设置的外部引用的访问受
XMLConstants.ACCESS_EXTERNAL_SCHEMA
属性指定的协议的限制。如果由于此属性的限制而在验证期间拒绝访问,则SAXException
将由validate(Source)
方法抛出。
- 参数:
-
name
- 属性名称,必须是非空的完全限定URI。 -
object
- 属性的请求值。 - 抛出:
-
SAXNotRecognizedException
- 如果无法分配或检索属性值。 -
SAXNotSupportedException
- 当Validator
可以识别属性名称但无法设置请求的值时。 -
NullPointerException
- 当名称参数为null时。
-
-
getProperty
查找属性的值。属性名称是任何完全限定的URI。
Validator
可以识别属性名称,但暂时可能无法返回其值。某些属性值可能仅在特定上下文中(例如验证之前、期间或之后)可用。Validator
不需要识别任何特定的属性名称。实现者可以自由(并且鼓励)发明自己的属性,使用建立在其自己URI上的名称。
- 参数:
-
name
- 属性名称,必须是非空的完全限定URI。 - 返回:
- 属性的当前值。
- 抛出:
-
SAXNotRecognizedException
- 如果无法分配或检索属性值。 -
SAXNotSupportedException
- 当XMLReader可以识别属性名称但目前无法确定其值时。 -
NullPointerException
- 当名称参数为null时。 - 参见:
-