-
- 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或hrefuri条目。 该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 方法 描述 Sourceresolve(String href, String base)实施URIRsolver。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)
实施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,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在寻求一种产品目录中的比赛没有被使用。 但是,源代码中的相对值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,continueignore。 请注意,对于LSResourceResolver,不可能忽略引用,因此ignore因此处理与continue相同。 - 异常
-
CatalogException- if no mapping is found andjavax.xml.catalog.resolveis specified asstrict
-
-