public abstract class SchemaFactory extends Object
Schema对象。验证接口的入口点。
SchemaFactory是架构的编译器。它读取模式的外部表示,并准备它们进行验证。
SchemaFactory类不是线程安全的。换句话说,它是应用程序的责任保证最多只有一个线程在任何时候使用SchemaFactory对象。实施鼓励synchronized标记方法来保护自己从破碎的客户。
SchemaFactory是不可重入。而其中的newSchema方法被调用时,应用程序可能不会尝试递归调用newSchema方法,即使在同一个线程。
本规范使用命名空间URI指定的模式语言。下表显示了本规范所定义的值。
为了符合规格,实现只需支持W3C XML Schema 1。然而,如果它选择支持其他模式语言在这里上市,必须符合本规范所描述的相关行为
模式语言没有列在这里将介绍自己的URI来代表自己。的SchemaFactory类可定位为在运行时其他模式语言实现。
注意,因为XML DTD是紧密相连的解析过程,在解析的过程中效果显著,它是不可能定义的DTD验证作为一个独立的解析过程。为此,本规范没有定义XML DTD的语义。这并不禁止实施与执行在一个他们认为合适的方式,但用户警告说任何DTD验证实现此接口的一定偏离XML DTD的XML语义定义1。
| value | language |
|---|---|
XMLConstants.W3C_XML_SCHEMA_NS_URI ("http://www.w3.org/2001/XMLSchema") |
W3C XML Schema 1.0 |
XMLConstants.RELAXNG_NS_URI ("http://relaxng.org/ns/structure/1.0") |
RELAX NG 1.0 |
| Modifier | Constructor and Description |
|---|---|
protected |
SchemaFactory()
派生类的构造函数。
|
| Modifier and Type | Method and Description |
|---|---|
abstract ErrorHandler |
getErrorHandler()
被设置为这
SchemaFactory当前
ErrorHandler。
|
boolean |
getFeature(String name)
查找功能标志的值。
|
Object |
getProperty(String name)
查找属性的值。
|
abstract LSResourceResolver |
getResourceResolver()
被设置为这
SchemaFactory当前
LSResourceResolver。
|
abstract boolean |
isSchemaLanguageSupported(String schemaLanguage)
指定架构的
SchemaFactory支持?
|
static SchemaFactory |
newInstance(String schemaLanguage)
查找支持指定的模式语言的
SchemaFactory执行并返回它。
|
static SchemaFactory |
newInstance(String schemaLanguage, String factoryClassName, ClassLoader classLoader)
从中获得的一个新实例类的名称
SchemaFactory。
|
abstract Schema |
newSchema()
创建一个特殊的
Schema对象。
|
Schema |
newSchema(File schema)
将指定的
File作为一个模式,并将其作为
Schema。
|
Schema |
newSchema(Source schema)
将指定的源作为一个模式,并将其作为模式。
|
abstract Schema |
newSchema(Source[] schemas)
将指定的源(S)作为一个模式,并将其作为模式。
|
Schema |
newSchema(URL schema)
将指定的
URL作为一个模式,并将其作为
Schema。
|
abstract void |
setErrorHandler(ErrorHandler errorHandler)
设置接收
newSchema方法调用期间遇到错误的
ErrorHandler。
|
void |
setFeature(String name, boolean value)
|
void |
setProperty(String name, Object object)
设置属性的值。
|
abstract void |
setResourceResolver(LSResourceResolver resourceResolver)
设置自定义资源解析解析模式的
LSResourceResolver。
|
public static SchemaFactory newInstance(String schemaLanguage)
查找支持指定的模式语言的SchemaFactory执行并返回它。
发现对于一个给定的模式语言的SchemaFactory对象,这种方法看起来以下依次为“类装载器”指的是上下文类加载器的地方:
"javax.xml.validation.SchemaFactory:schemaLanguage"存在(在schemalanguage是这个方法的参数),那么它的价值是理解为一个类的名字。该方法将尝试使用类装载器来创建这个类的一个新实例,并返回它如果它成功创建。$java.home/lib/jaxp.properties是阅读的关键是在系统属性关联的值是找。如果存在,值被处理就像上面一样。ServiceLoader类定义,试图定位和加载使用default loading mechanism服务的实现:服务提供者装载设备将使用current thread's context class loader尝试加载服务。如果上下文类加载器是空的,将使用的system class loader。isSchemaLanguageSupported(String schemaLanguage)。SchemaFactoryConfigurationError ServiceConfigurationError将抛出的情况下SchemaFactory坐落在一个具体实施方式。必须有一个默认的SchemaFactory W3C XML架构平台。如果一切都失败了,IllegalArgumentException将抛出。
解决问题的技巧:
看到Properties.load(java.io.InputStream)究竟属性文件解析。特别是,冒号“:”需要在属性文件中逃脱,所以确保语言图式的URI是正确转义它。例如:
HTTP:/ /两。org / 2001 /模式= org.acme.foo.xsschemafactory
schemaLanguage -指定的模式语言,返回的schemafactory会理解的。看到的可能值
the list of available schema languages。
SchemaFactory新实例
IllegalArgumentException -如果没有实现的模式语言是可用的。
NullPointerException -如果
schemaLanguage参数为空。
SchemaFactoryConfigurationError -如果遇到一个配置错误。
newInstance(String schemaLanguage, String factoryClassName, ClassLoader classLoader)
public static SchemaFactory newInstance(String schemaLanguage, String factoryClassName, ClassLoader classLoader)
从中获得的一个新实例类的名称SchemaFactory。如果指定的工厂SchemaFactory类名支持指定的模式语言返回。此功能是有用的当有多个供应商在类路径。它给应用程序提供了更多的控制,因为它可以指定要加载哪个提供程序。
设置jaxp.debug系统属性将导致这种方法印制大量的调试消息System.err关于它是什么做的,是在看。
如果你有问题的话:
java djaxp。调试= 1你的…
schemaLanguage -指定的模式语言,返回的
SchemaFactory会理解的。看到的可能值
the list of available schema languages。
factoryClassName完全合格的工厂类的名称,提供了实现
javax.xml.validation.SchemaFactory。
classLoader用于负荷工厂类
ClassLoader。如果
null电流
Thread上下文类加载器来加载工厂类。
SchemaFactory新实例
IllegalArgumentException -如果
factoryClassName是
null,或工厂类不能被实例化负载,或不支持在
schemLanguage参数指定的模式语言。
NullPointerException -如果
schemaLanguage参数为空。
newInstance(String schemaLanguage)
public abstract boolean isSchemaLanguageSupported(String schemaLanguage)
指定架构的SchemaFactory支持?
schemaLanguage -指定的模式语言,返回的
SchemaFactory会理解的。
schemaLanguage必须指定一个
valid图式语言。
true如果
SchemaFactory支持
schemaLanguage,其他
false。
null
schemaLanguage
NullPointerException。
IllegalArgumentException -如果
schemaLanguage.length() == 0或
schemaLanguage不指定
valid图式语言。
public boolean getFeature(String name) throws SAXNotRecognizedException, SAXNotSupportedException
功能名称是完全合格的URI。一SchemaFactory识别特征的名字,但暂时无法返回它的值是可能的。
实施者是自由的(鼓励)来创造自己的特色,以建立自己的URI的名字。
name特点的名字,这是一个非空的完全合格的URI。
SAXNotRecognizedException -如果特征值不能被分配或检索。
SAXNotSupportedException -当
SchemaFactory识别特征名称,但不能确定它的价值在这个时候。
null
name
NullPointerException。
setFeature(String, boolean)
public void setFeature(String name, boolean value) throws SAXNotRecognizedException, SAXNotSupportedException
设置这一SchemaFactory特征,Schemas这个工厂创建,并推而广之,Validators和ValidatorHandlers那些Schemas创建。
同时,开发商应特别注意如何返回newSchema()特殊Schema对象处理。在某些情况下,例如,当SchemaFactory和班级实际加载模式来自不同的实现,也许不可能SchemaFactory特征是遗传的自动。开发人员应该确保在两个地方显式设置的功能,如安全处理。
功能名称是完全合格的URI。一SchemaFactory暴露特征值,但无法改变目前的价值是可能的。
所有的实现都必须支持的XMLConstants.FEATURE_SECURE_PROCESSING特征。当功能是:
true:实施将限制XML处理符合实施限制。例子包括该扩展范围和XML Schema结构,会消耗大量的资源。如果XML处理有限,出于安全原因,它将报告通过电话注册ErrorHandler.fatalError(SAXParseException exception)。看到setErrorHandler(ErrorHandler errorHandler)。false:实施将根据XML规范不考虑可能实施限制XML处理。name特点的名字,这是一个非空的完全合格的URI。
value特征的请求的值(true或false)。
SAXNotRecognizedException -如果特征值不能被分配或检索。
SAXNotSupportedException -当
SchemaFactory识别特征的名字,但不能设置请求的值。
null
name
NullPointerException。
getFeature(String)
public void setProperty(String name, Object object) throws SAXNotRecognizedException, SAXNotSupportedException
属性名称是完全合格的URI。一SchemaFactory识别属性名称,但无法改变当前值,它是可能的。
实现JAXP 1.5或更新版本的所有实现都必须支持的XMLConstants.ACCESS_EXTERNAL_DTD和XMLConstants.ACCESS_EXTERNAL_SCHEMA性质。
在架构文件访问外部DTD是限制由XMLConstants.ACCESS_EXTERNAL_DTD属性指定的协议。如果访问被拒绝,因此属性的限制,新模式的建立过程中,SAXException将由newSchema(Source)或newSchema(File)或newSchema(URL)或newSchema(Source[])方法引发。
在XML源文件访问外部DTD是限制由XMLConstants.ACCESS_EXTERNAL_DTD属性指定的协议。如果拒绝访问验证由于这种性质的限制时,SAXException将抛出的Validator.validate(Source)或Validator.validate(Source, Result)方法。
访问外部参考集的schemaLocation属性限制的XMLConstants.ACCESS_EXTERNAL_SCHEMA属性指定的协议。如果拒绝访问验证由于这种性质的限制时,SAXException将抛出的Validator.validate(Source)或Validator.validate(Source, Result)方法。
访问外部参考的进口包括元素限制的XMLConstants.ACCESS_EXTERNAL_SCHEMA属性指定的协议。如果访问被拒绝,因此属性的限制,新模式的建立过程中,SAXException将抛出的newSchema(Source)或newSchema(File)或newSchema(URL)或newSchema(Source[])方法。
name -属性的名字,这是一个非空的完全合格的URI。
object -请求的性能值。
SAXNotRecognizedException -如果属性值不能被分配或检索。
SAXNotSupportedException -当
SchemaFactory识别属性名称,但不能设置请求的值。
null
name
NullPointerException。
public Object getProperty(String name) throws SAXNotRecognizedException, SAXNotSupportedException
属性名称是完全合格的URI。一SchemaFactory识别属性名称,但暂时无法返回它的值是可能的。
SchemaFactorys不需要承认任何特定的属性名称。
实施者是自由的(鼓励)来创造他们自己的特性,以建立自己的URI的名字。
name -属性的名字,这是一个非空的完全合格的URI。
SAXNotRecognizedException -如果属性值不能被分配或检索。
SAXNotSupportedException当XmlReader识别属性名称,但不能确定它的价值在这个时候。
null
name
NullPointerException。
setProperty(String, Object)
public abstract void setErrorHandler(ErrorHandler errorHandler)
newSchema方法调用期间遇到错误的
ErrorHandler。
错误处理程序可以用于自定义模式分析过程中的错误处理过程。当一个ErrorHandler设置,发现错误在分析模式将首先发送到ErrorHandler。
错误处理程序可以中止解析架构立即从处理扔SAXException。或例如可以打印一个错误的屏幕,试图通过正常的ErrorHandler返回继续处理
如果任何Throwable(或其派生类的实例)是从一个ErrorHandler抛出,这newSchema方法调用者会泛起同样的Throwable对象。
SchemaFactory不允许扔SAXException不先报告给ErrorHandler。
应用程序可以调用此方法,即使在Schema被解析。
当ErrorHandler是null,实施将有如以下ErrorHandler设置:
类draconianerrorhandler实现ErrorHandler{公共无效的致命错误(SAXParseExceptionE)抛出SAXException{把E;}公共无效错误(SAXParseExceptionE)抛出SAXException{把E;}公共无效报警(SAXParseExceptionE)抛出SAXException{/ /空}}
当一个新的SchemaFactory对象被创建,最初该字段设置为null。这场会不会遗传给Schemas,Validators,或ValidatorHandlers是从这SchemaFactory创建。
errorHandler -一个新的错误处理程序将。这个参数可以是
null。
public abstract ErrorHandler getErrorHandler()
SchemaFactory当前
ErrorHandler。
setErrorHandler(ErrorHandler)方法,或null如果方法从来没有所谓的因为这
SchemaFactory创造了。
setErrorHandler(ErrorHandler)
public abstract void setResourceResolver(LSResourceResolver resourceResolver)
LSResourceResolver。
SchemaFactory使用LSResourceResolver当需要定位的外部资源,在分析模式,但到底什么是“定位外部资源”是由每个模式语言。例如,W3C XML Schema模式,这包括文件<include>d或<import>ed,和DTD模式文件引用,等等。
应用程序可以调用此方法,即使在Schema被解析。
当LSResourceResolver是null,实施将有如以下LSResourceResolver设置:
类dumbdomresourceresolver实现LSResourceResolver{公共LSInputresolveresource(publicid字符串,字符串的字符串systemid,baseuri){返回空;/ /始终返回空值}}
如果一个LSResourceResolver抛出一个RuntimeException(或其派生类的实例),然后SchemaFactory将中止的解析和newSchema方法调用者会得到相同的RuntimeException。
当一个新的SchemaFactory对象被创建,最初该字段设置为null。这场会不会遗传给Schemas,Validators,或ValidatorHandlers是从这SchemaFactory创建。
resourceResolver -新资源解析器将。此参数可以为空。
public abstract LSResourceResolver getResourceResolver()
SchemaFactory当前
LSResourceResolver。
setResourceResolver(LSResourceResolver)方法,或null如果方法从来没有所谓的因为这
SchemaFactory创造了。
setErrorHandler(ErrorHandler)
public Schema newSchema(Source schema) throws SAXException
将指定的源作为一个模式,并将其作为模式。
这是一个newSchema(Source[] schemas)便利的方法。
schema源代表模式。
schema新
Schema。
SAXException SAX误差。
NullPointerException -如果
schema是空的。
public Schema newSchema(File schema) throws SAXException
将指定的File作为一个模式,并将其作为Schema。
这是一个newSchema(Source schema)便利的方法。
schema文件代表一个模式。
schema新
Schema。
SAXException SAX误差。
NullPointerException -如果
schema是空的。
public Schema newSchema(URL schema) throws SAXException
将指定的URL作为一个模式,并将其作为Schema。
这是一个newSchema(Source schema)便利的方法。
schema -
URL表示模式。
schema新
Schema。
SAXException SAX误差。
NullPointerException -如果
schema是空的。
public abstract Schema newSchema(Source[] schemas) throws SAXException
调用者会阅读所有的Sources并将它们组合成一个单一的模式。该组合的精确的语义取决于模式语言,这SchemaFactory对象创建。
当一个ErrorHandler设置,调用者将报告所有发现的错误在源的处理程序。如果处理程序抛出一个异常,它将中止模式编译,并将从该方法中抛出相同的异常。另外,在错误报告的处理程序,被调用方可以中止进一步处理扔。如果没有设置错误处理程序是,调用者将发现第一个错误的来源。
由此产生的架构包含来自指定来源的组件。同样的结果,如果将所有这些来源是进口的实现,使用schemaLocation和命名空间的适当值,到一个不同的目标,没有自己的成分单一的架构文档,如果引进的元素被在同一顺序的来源。的XML Schema推荐4.2.3节描述选项处理器已经在这方面。当处理器应该在JAXP的图式来源和XML Schema的进口处理一致,JAXP兼容的解析器之间的行为可能会有所不同;特别是,解析器可以选择忽略除了第一个 <进口> 对于一个给定的命名空间,无论在schemaLocation提供信息。 进口>
如果解析的模式包括误差(S)在XML Schema规范5.1节的规定,那么错误必须报告给ErrorHandler。
relax ng,这个方法必须把UnsupportedOperationException如果schemas.length!=1。
schemas输入进行解析。
SchemaFactory需要认识到
SAXSource,
StreamSource,
StAXSource,和
DOMSource。输入模式必须是XML文档或XML元素,不能为空。对于向后兼容性,传递任何其他文档或元素的结果都是依赖于实现的。实现必须认识和处理输入或扔IllegalArgumentException。
Schema对象。请注意,当一个错误被报道,也不能保证返回的
Schema对象是有意义的。
SAXException如果处理特定的输入过程中发现一个错误。当一个
ErrorHandler设置错误报告在第一。看到
setErrorHandler(ErrorHandler)。
NullPointerException -如果
schemas参数本身在数组为空或任何一项是空的。
IllegalArgumentException -如果数组中任何一项不通过这种方法识别。
UnsupportedOperationException如果语言不支持此操作。
public abstract Schema newSchema() throws SAXException
Schema对象。
返回的Schema对象依赖的模式语言,这SchemaFactory创建精确的语义。
此外,实现允许使用实现特定的属性/功能,以改变这种方法的语义。
同时,开发商应特别注意如何功能设置该SchemaFactory都用这种特殊Schema处理。在某些情况下,例如,当SchemaFactory和班级实际加载模式来自不同的实现,也许不可能SchemaFactory特征是遗传的自动。开发人员应该确保在两个地方显式设置的功能,如安全处理。
XML架构,此方法创建一个Schema对象的位置提示指定文件进行验证。
返回的Schema对象假设如果文件参考架构中的位置提示相同的URL,他们总是会解析到相同的架构文档。这asusmption允许实现重用解析结果模式文档,多重验证对相同的模式将运行得更快。
请注意,使用模式位置提示介绍了拒绝服务攻击的一个漏洞。
放松不支持此操作。
Schema对象。
UnsupportedOperationException -如果该操作是不被支持的。
SAXException操作支持,但由于某种原因失败。
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.