-
- All Superinterfaces:
-
EntityResolver
,LSResourceResolver
,URIResolver
,XMLResolver
public interface CatalogResolver extends EntityResolver, XMLResolver, URIResolver, LSResourceResolver
实现SAX的目录解析器EntityResolver
,StAXXMLResolver
,Schema Validation使用的DOM LSLSResourceResolver
和转换URIResolver
,并使用目录解析外部引用。所述Catalog Standard区分
external identifiers
从uri entries
为用于单独识别的DTD,而uri entries
用于其他资源,如样式表和架构。 然而,Java API(例如XMLResolver
和LSResourceResolver
)没有这样的区别。 与现有的Java API一致,该CatalogResolver将系统标识符识别为URI,并将搜索目录中的system
和uri
条目,以便找到匹配的条目。搜索在当前目录中开始。 如果找到匹配,则不再进行尝试。 只有当前目录中没有匹配项,将考虑包括委托和下一目录在内的备用目录。
搜索订单
解析器将首先使用指定的systemId
搜索系统类型的条目。 该系统条目包括system
,rewriteSystem
和systemSuffix
条目。如果没有找到匹配,
public
可以根据prefer
属性搜索public
条目。prefer
属性 :如果prefer
是公开的,并且通过系统条目找不到匹配项,将考虑public
条目。 如果未指定,则默认情况下为prefer
(请注意,通过OASIS标准,系统条目始终在公开条目之前被考虑,公共意味着在指定系统和公共标识符时公共条目将被匹配。因此,推荐使用公众。)如果与
systemId
和public
标识符不匹配,解析器将继续搜索systemId
或href
uri
条目。 该uri
条目包括uri
,rewriteURI
,并uriSuffix
条目。错误处理
CatalogResolver扩展指定的检查异常的接口,包括:-
SAXException
和IOException
,由EntityResolver.resolveEntity(java.lang.String, java.lang.String)
-
XMLStreamException
,由XMLResolver.resolveEntity(java.lang.String, java.lang.String, java.lang.String, java.lang.String)
-
TransformerException
由URIResolver.resolve(java.lang.String, java.lang.String)
发表
该CatalogResolver然而,将抛出
CatalogException
只有当javax.xml.catalog.resolve
被指定为strict
。 对于期望处理检查的异常的应用程序,可能需要使用自定义解析器来包装CatalogResolver或使用Catalog
对象实现它。- 从以下版本开始:
- 9
-
-
方法摘要
所有方法 接口方法 抽象方法 Modifier and Type 方法 描述 Source
resolve(String href, String base)
实施URIRsolver。InputSource
resolveEntity(String publicId, String systemId)
实现EntityResolver
。InputStream
resolveEntity(String publicId, String systemId, String baseUri, String namespace)
实施XMLResolver
。LSInput
resolveResource(String type, String namespaceUri, String publicId, String systemId, String baseUri)
-
-
-
方法详细信息
-
resolveEntity
InputSource resolveEntity(String publicId, String systemId)
实现EntityResolver
。 该方法搜索主目录和备用目录中的目录条目,以尝试找到与指定的publicId
或systemId的匹配项。- Specified by:
-
resolveEntity
在接口EntityResolver
- 参数
-
publicId
- 被引用的外部实体的公共标识符,如果没有提供,则为null -
systemId
- 被引用的外部实体的系统标识符。 所有外部实体都需要系统标识符。 XML需要所有外部实体上的系统标识符,因此始终指定此值。 - 结果
-
一个
InputSource
对象,如果找到一个映射。 如果没有找到映射,返回一个InputSource
含有一个空对象Reader
如果javax.xml.catalog.resolve
属性设置为ignore
; 如果javax.xml.catalog.resolve
属性设置为continue
则返回null。 - 异常
-
CatalogException
- 如果没有找到映射,并且javax.xml.catalog.resolve
被指定为strict
- 另请参见:
-
InputSource
-
resolve
Source resolve(String href, String base)
实施URIRsolver。 该方法搜索主目录和备用目录中的目录条目,以尝试找到与指定的href
属性的匹配。href
属性将被字面上使用,绝对不会对base
。如果值为URN,则
href
属性被识别为publicId
,用于搜索public
条目。 如果该值为URI,则将其视为systemId
,并用于搜索system
和uri
条目。- Specified by:
-
resolve
接口URIResolver
- 参数
-
href
- 指定样式表的URI的href属性,可以是相对的或绝对的 -
base
- 如果需要绝对URI,则href属性将被绝对地使用的基本URI - 结果
-
一个
Source
对象,如果找到一个映射。 如果没有找到映射,如果javax.xml.catalog.resolve
属性设置为ignore
,则返回一个空的Source
对象; 如果javax.xml.catalog.resolve
属性设置为continue
,则返回一个Source
对象,其中包含原始URI(href或href用base解析,如果base不为null)。 - 异常
-
CatalogException
- 如果没有找到映射,并且javax.xml.catalog.resolve
被指定为strict
-
resolveEntity
InputStream resolveEntity(String publicId, String systemId, String baseUri, String namespace)
实施XMLResolver
。 为了解决publicId
和systemId
,该方法相当于resolveEntity(java.lang.String, java.lang.String)
。systemId
将用于字面上,而不是绝对的baseUri
。baseUri
和namespace
不用于搜索目录中的匹配项。 但是,xml源中的systemId
相对于systemId
的解析器可能已被绝对地baseURI
,因此无法找到system
条目。 在这种情况下,一个systemSuffix
项建议在system
条目。- Specified by:
-
resolveEntity
在接口XMLResolver
- 参数
-
publicId
- 被引用的外部实体的公共标识符,如果没有提供,则为null -
systemId
- 被引用的外部实体的系统标识符。 所有外部实体都需要系统标识符。 XML需要所有外部实体上的系统标识符,因此始终指定此值。 -
baseUri
- CatalogResolver未使用的绝对基本URI -
namespace
- 要解析的实体的名称空间,不被CatalogResolver使用。 - 结果
-
一个
InputStream
对象,如果找到一个映射; 如果没有找到映射并且javax.xml.catalog.resolve
属性设置为continue
或ignore
,continue
ignore
。 请注意,对于XMLResolver,不可能忽略引用,因此ignore
被视为与continue
相同。 - 异常
-
CatalogException
- 如果没有找到映射,并且javax.xml.catalog.resolve
被指定为strict
-
resolveResource
LSInput resolveResource(String type, String namespaceUri, String publicId, String systemId, String baseUri)
实现LSResourceResolver
。 为了解决publicId
和systemId
,此方法相当于resolveEntity(java.lang.String, java.lang.String)
。systemId
将按字面使用,绝对不会被绝对的baseUri
。 该baseUri
,namespaceUri
和type
在寻求一种产品目录中的比赛没有被使用。 但是,源代码中的相对值systemId
可能已由baseURI
的解析器确定为baseURI
,因此无法找到system
条目。 在这种情况下,一个systemSuffix
项建议在system
条目。- Specified by:
-
resolveResource
在接口LSResourceResolver
- 参数
-
type
- 正在解析的资源类型,不被CatalogResolver使用 -
namespaceUri
- 正在解析的资源的名称空间,不被CatalogResolver使用 -
publicId
- 被引用的外部实体的公共标识符,如果没有提供公共标识符,或者资源不是实体,null
。 -
systemId
- 系统标识符,被引用的外部资源的URI引用 -
baseUri
- CatalogResolver未使用的绝对基本URI - 结果
-
一个
LSInput
对象,如果找到一个映射; 如果没有找到映射并且javax.xml.catalog.resolve
属性设置为continue
或ignore
,continue
ignore
。 请注意,对于LSResourceResolver
,不可能忽略引用,因此ignore
因此处理与continue
相同。 - 异常
-
CatalogException
- if no mapping is found andjavax.xml.catalog.resolve
is specified asstrict
-
-