-
- All Superinterfaces:
-
EntityResolver,LSResourceResolver,URIResolver,XMLResolver
public interface CatalogResolver extends EntityResolver, XMLResolver, URIResolver, LSResourceResolver
目录解析器,实现SAXEntityResolver,StAXXMLResolver,Schema Validation使用的DOM LSLSResourceResolver和TransformURIResolver,并使用目录解析外部引用。所述Catalog Standard分辨
external identifiers从uri entries为用于单独识别的DTD,而uri entries用于其他资源,如样式表和架构。 然而,Java API(例如XMLResolver和LSResourceResolver)没有这样的区别。 与现有Java API一致,此CatalogResolver将系统标识符识别为URI,并将搜索目录中的system和uri条目以查找匹配的条目。搜索在当前目录中开始。 如果找到匹配项,则不再进行任何尝试。 只有当前目录中没有匹配项时,才会考虑备用目录,包括委托和下一个目录。
搜索订单
解析器将首先使用指定的systemId搜索系统类型的条目。 该系统条目包括system,rewriteSystem和systemSuffix条目。如果未找到匹配项,则可以根据
prefer属性搜索public条目。prefer字段 :如果prefer是公共的,并且通过系统条目找不到匹配项,public考虑public条目。 如果未指定,则默认情况下prefer是公共的(请注意,根据OASIS标准,系统条目将始终在公共条目之前考虑。首选公共意味着在指定系统和公共标识符时将匹配公共条目。因此,建议更喜欢公众。)如果未找到
systemId和public标识符的uri项,则解析程序将继续使用指定的systemId或href搜索uri条目。 该uri条目包括uri,rewriteURI和uriSuffix条目。错误处理
CatalogResolver扩展指定的已检查异常的接口,包括:-
SAXException和IOExceptionbyEntityResolver.resolveEntity(java.lang.String, java.lang.String) -
XMLStreamExceptionbyXMLResolver.resolveEntity(java.lang.String, java.lang.String, java.lang.String, java.lang.String) -
TransformerExceptionbyURIResolver.resolve(java.lang.String, java.lang.String)
该CatalogResolver然而,将抛出
CatalogException只有当javax.xml.catalog.resolve被指定为strict。 对于期望处理已检查的Exceptions的应用程序,可能需要使用自定义解析程序来包装CatalogResolver或使用Catalog对象实现它。- 从以下版本开始:
- 9
-
-
方法摘要
所有方法 实例方法 抽象方法 变量和类型 方法 描述 Sourceresolve(String href, String base)实现URIResolver。InputSourceresolveEntity(String publicId, String systemId)实现EntityResolver。InputStreamresolveEntity(String publicId, String systemId, String baseUri, String namespace)实现XMLResolver。LSInputresolveResource(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)
实现URIResolver。 该方法搜索主目录和备用目录中的商品,以尝试查找与指定的href属性匹配的href。href属性将按字面意思使用,不会尝试对base进行绝对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,或者如果base不为null,则使用base解析href)。 - 异常
-
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可能已由解析器使用baseURI进行绝对,因此无法找到system条目。 在这种情况下,一个systemSuffix项建议在system条目。- Specified by:
-
resolveEntity接口XMLResolver - 参数
-
publicId- 正在引用的外部实体的公共标识符,如果未提供,则为null -
systemId- 被引用的外部实体的系统标识符。 所有外部实体都需要系统标识符。 XML需要所有外部实体上的系统标识符,因此始终指定此值。 -
baseUri- CatalogResolver未使用的绝对基URI -
namespace- 要解析的实体的名称空间,而不是CatalogResolver使用的名称空间。 - 结果
-
如果找到映射,则为
InputStream对象; 如果未找到映射且javax.xml.catalog.resolve属性设置为continue或ignore,则continueignore。 请注意,对于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在寻求一种产品目录中的比赛没有被使用。 但是,解析器使用baseURI可能已使源中的相对systemId成为绝对,因此无法找到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,则continueignore。 请注意,对于LSResourceResolver,无法忽略引用,因此ignore被视为与continue相同。 - 异常
-
CatalogException- if no mapping is found andjavax.xml.catalog.resolveis specified asstrict
-
-