|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 上一个类 下一个类 | 框架 无框架 | |||||||||
| 摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 | |||||||||
java.lang.Objectjavax.xml.validation.ValidatorHandler
public abstract class ValidatorHandler
处理 SAX 流的流验证器。
ValidatorHandler 对象不是线程安全的,也不能重入。换句话说,应用程序负责确保在任何给定时刻使用 ValidatorHandler 对象的线程不多于一个。
ValidatorHandler 检查 SAX 事件是否遵守关联的 Schema 中所描述的约束集,此外它可以修改 SAX 事件(例如添加默认值等)。
ValidatorHandler 扩展自 ContentHandler,但它按以下方式修改了底层 ContentHandler:
uri、localName 和 qname,即使 SAX 允许当中一些值为 null,startElement/endElement 事件也必须接收非 null String。类似地,对于这 3 个参数,用户指定的 ContentHandler 也将接收非 null String。
ValidatorHandler 的 ContentHandler.startPrefixMapping(String,String) 和 ContentHandler.endPrefixMapping(String)。类似地,用户指定的 ContentHandler 将接收 startPrefixMapping/endPrefixMapping 事件。如果 ValidatorHandler 引入了额外的名称空间绑定,则用户指定的 ContentHandler 将接收额外的 startPrefixMapping/endPrefixMapping 事件。
ContentHandler.startElement(String,String,String,Attributes) 的 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* 属性添加到传递给用户指定的 ContentHandler 的 Attributes。
(注意,无论特性如何切换,名称空间绑定总是通过用户所指定的 ContentHandler 的 ContentHandler.startPrefixMapping(String,String) 和 ContentHandler.endPrefixMapping(String) 方法通知应用程序。)
注意,此特性不 影响 ValidatorHandler 接收 SAX 事件的方式。它仅更改其扩充 SAX 事件的方式。
此特性默认设置为 false。
| 构造方法摘要 | |
|---|---|
protected |
ValidatorHandler()
派生类的构造方法。 |
| 方法摘要 | |
|---|---|
abstract ContentHandler |
getContentHandler()
获取接收扩充的验证结果的 ContentHandler。 |
abstract ErrorHandler |
getErrorHandler()
获取设置为此 ValidatorHandler 的当前 ErrorHandler。 |
boolean |
getFeature(String name)
查找特性标志的值。 |
Object |
getProperty(String name)
查找属性值。 |
abstract LSResourceResolver |
getResourceResolver()
获取设置到此 ValidatorHandler 的当前 LSResourceResolver。 |
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 以自定义验证期间的资源解析。 |
| 从类 java.lang.Object 继承的方法 |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| 构造方法详细信息 |
|---|
protected ValidatorHandler()
派生类的构造方法。
该构造方法不执行任何操作。
派生类必须创建具有 null ErrorHandler 和 null LSResourceResolver 的 ValidatorHandler 对象。
| 方法详细信息 |
|---|
public abstract void setContentHandler(ContentHandler receiver)
ContentHandler,它接收扩充的验证结果。
当指定了 ContentHandler 时,ValidatorHandler 将充当过滤器,实际上是将输入事件复制到指定的 ContentHandler。
在复制过程中,ValidatorHandler 可以修改事件,例如添加默认属性。
ValidatorHandler 可以对事件进行一定程度的缓冲,但要使解析器使用 ValidatorHandler,必须满足以下要求。
ValidatorHandler 调用 ContentHandler.startElement(String, String, String, Attributes)、ContentHandler.endElement(String, String, String)、ContentHandler.startDocument() 或 ContentHandler.endDocument() 时,在回调返回之前,必须针对相同事件对用户指定的 ContentHandler 调用相同的方法。
ValidatorHandler 不能引入输入中不存在的新元素。
ValidatorHandler 不能移除输入中存在的属性。
当对指定的 ContentHandler 调用回调方法抛出异常时,必须从 ValidatorHandler 抛出相同的异常对象。ErrorHandler 不应该获得此类异常的通知。
甚至在验证期间也可以调用此方法。
receiver - ContentHandler 或 null 值。public abstract ContentHandler getContentHandler()
ContentHandler。
getContentHandler() 方法设置的最后一个对象;如果自从创建此 ValidatorHandler 以来一直未调用该方法,则返回 null。setContentHandler(ContentHandler)public abstract void setErrorHandler(ErrorHandler errorHandler)
ErrorHandler 以接收验证期间遇到的错误。
错误处理程序可用于自定义验证期间的错误处理过程。设置了 ErrorHandler 时,验证期间发现的错误将首先被发送到 ErrorHandler。
错误处理程序通过抛出来自处理程序的 SAXException 可以立即中止进一步验证。或者,它可以将错误打印到屏幕上,并尝试通过从 ErrorHandler 正常返回来继续该验证。
如果从 ErrorHandler 抛出任何 Throwable,则将向调用堆栈的根抛出相同的 Throwable 对象。
在 ValidatorHandler 首先向 ErrorHandler 报告之前,不允许抛出 SAXException。
当 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。public abstract ErrorHandler getErrorHandler()
ValidatorHandler 的当前 ErrorHandler。
setErrorHandler(ErrorHandler) 方法设置的最后一个对象;如果自从创建此 ValidatorHandler 以来一直未调用该方法,则返回 null。setErrorHandler(ErrorHandler)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。public abstract LSResourceResolver getResourceResolver()
ValidatorHandler 的当前 LSResourceResolver。
setResourceResolver(LSResourceResolver) 方法设置的最后一个对象;如果自从创建此 ValidatorHandler 以来一直未调用该方法,则返回 null。setErrorHandler(ErrorHandler)public abstract TypeInfoProvider getTypeInfoProvider()
ValidatorHandler 的 TypeInfoProvider 实现。
在解析期间可以查询所获取的 TypeInfoProvider,以访问验证器确定的类型信息。
某些模式语言未定义类型概念,对于这些语言,此方法可能不受支持。但是,为了遵守此规范,W3C XML 模式 1.0 实现必须支持此操作。
TypeInfo 概念,则返回 null。否则返回非 null 的有效 TypeInfoProvider。
public boolean getFeature(String name)
throws SAXNotRecognizedException,
SAXNotSupportedException
特性名称是任何完全限定的 URI。ValidatorHandler 可以识别特性名称,但暂时不能返回其值。某些特性值只有在特定上下文中才能使用,例如在验证前、验证中或验证之后。
使用在自己的 URI 上构建的名称,实现者可随意选择(鼓励)创建自己的特性。
name - 特性名称,它是非 null 的完全限定 URI。
SAXNotRecognizedException - 如果不能分配或检索特性值。
SAXNotSupportedException - 当 ValidatorHandler 可以识别特性名称但不能确定其此时的值时。
NullPointerException - 当 name 为 null 时。setFeature(String, boolean)
public void setFeature(String name,
boolean value)
throws SAXNotRecognizedException,
SAXNotSupportedException
设置此 ValidatorHandler 的特性。
特性可用于控制 ValidatorHandler 解析模式的方式。特性名称是任何完全限定的 URI。ValidatorHandler 可以公开特性值,但不能更改当前值。某些特性值只有在特定上下文中才是不可变的或可变的,例如在验证前、验证中或验证之后。
所有实现必须支持 XMLConstants.FEATURE_SECURE_PROCESSING 特性。当特性为以下情况时:
true:该实现将限制 XML 处理遵守实现限制。示例包括实体扩展限制和将使用大量资源的 XML 模式构造。如果由于安全原因 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)
public void setProperty(String name,
Object object)
throws SAXNotRecognizedException,
SAXNotSupportedException
属性名称是任何完全限定的 URI。ValidatorHandler 可以识别属性名称,但不能更改当前值。某些属性值只有在特定上下文中才是不可变的或可变的,例如在验证前、验证中或验证之后。
ValidatorHandler 无需识别设置任何特定的属性名称。
name - 属性名称,它是非 null 的完全限定 URI。object - 所请求的属性值。
SAXNotRecognizedException - 如果不能分配或检索属性值。
SAXNotSupportedException - 当 ValidatorHandler 可以识别属性名称,但不能设置请求的值时。
NullPointerException - 当 name 为 null 时。
public Object getProperty(String name)
throws SAXNotRecognizedException,
SAXNotSupportedException
属性名称是任何完全限定的 URI。ValidatorHandler 可以识别属性名称,但暂时不能返回其值。某些属性值只有在特定上下文中才能使用,例如在验证前、验证中或验证之后。
ValidatorHandler 无需识别任何指定的属性名称。
使用在自己 URI 上构建的名称,实现者可随意选择(鼓励)创建自己的属性。
name - 属性名称,它是非 null 的完全限定 URI。
SAXNotRecognizedException - 如果不能分配或检索属性值。
SAXNotSupportedException - 当 XMLReader 可以识别属性名称,但不能确定其此时的值时。
NullPointerException - 当 name 为 null 时。setProperty(String, Object)
|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 上一个类 下一个类 | 框架 无框架 | |||||||||
| 摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 | |||||||||
版权所有 2007 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策。