Интерфейс CatalogResolver
- Все суперинтерфейсы:
EntityResolver, LSResourceResolver, URIResolver, XMLResolver
public interface CatalogResolver extends EntityResolver, XMLResolver, URIResolver, LSResourceResolver
EntityResolver, StAX XMLResolver, DOM LS LSResourceResolver, используемый при проверке схем, и Transform URIResolver; выполняет разрешение внешних ссылок с помощью каталогов. Стандарт каталогов различает external identifiers и uri entries: первые используются исключительно для идентификации DTD, тогда как uri entries предназначены для других ресурсов, таких как таблицы стилей и схемы. Однако в Java API, например XMLResolver и LSResourceResolver, такого различия нет. В соответствии с существующим Java API этот CatalogResolver распознаёт системный идентификатор как URI и выполняет поиск записей system и uri в каталоге, чтобы найти соответствующую запись.
Поиск начинается в текущем каталоге. Если соответствие найдено, дальнейший поиск не выполняется. Только если в текущем каталоге соответствие не найдено, рассматриваются альтернативные каталоги, включая делегирующие каталоги и следующие каталоги.
Порядок поиска
Сначала резолвер ищет записи типа system с указаннымsystemId. К системным записям относятся записи system, rewriteSystem и systemSuffix. Если соответствие не найдено, могут быть найдены записи public в соответствии с атрибутом prefer.
Атрибут prefer: если prefer является public и в системных записях соответствие не найдено, рассматриваются записи public. Если атрибут не задан, по умолчанию prefer имеет значение public (Обратите внимание: согласно стандарту OASIS, системные записи всегда рассматриваются перед публичными. При значении prefer public публичные записи будут сопоставляться, если указаны оба идентификатора — системный и публичный. Поэтому обычно рекомендуется использовать prefer public.)
Если соответствие не найдено по идентификаторам systemId и public, резолвер продолжает поиск среди записей uri с указанным systemId или href. К записям 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
Краткое описание вложенных классов
| Модификатор и тип | Интерфейс | Описание |
|---|---|---|
static enum |
CatalogResolver.NotFoundAction |
Определяет действия, которые CatalogResolver может выполнить, если ему не удаётся разрешить внешнюю ссылку. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
Source |
resolve |
Реализует URIResolver. |
InputSource |
resolveEntity |
Реализует EntityResolver. |
InputStream |
resolveEntity |
Реализует XMLResolver. |
LSInput |
resolveResource |
Реализует LSResourceResolver. |
Подробное описание методов
resolveEntity
InputSource resolveEntity(String publicId, String systemId)
EntityResolver. Метод выполняет поиск в записях основного и альтернативных каталогов, пытаясь найти соответствие указанному publicId или systemId.- Определено в:
-
resolveEntityв интерфейсеEntityResolver - Параметры:
-
publicId— публичный идентификатор внешней сущности, на которую ссылаются, или null, если он не был указан -
systemId— системный идентификатор внешней сущности, на которую ссылаются. Для всех внешних сущностей требуется системный идентификатор. XML требует системный идентификатор для всех внешних сущностей, поэтому это значение всегда указано. - Возвращает:
- объект
InputSource, если соответствие найдено. Если соответствие не найдено, возвращает объектInputSource, содержащий пустойReader, если свойствоjavax.xml.catalog.resolveимеет значениеignore; возвращает null, если свойствоjavax.xml.catalog.resolveимеет значениеcontinue. - Выбрасывает:
-
CatalogException— если соответствие не найдено иjavax.xml.catalog.resolveзадано какstrict - См. также:
resolve
Source resolve(String href, String base)
href. Атрибут href используется буквально; попытка преобразовать его в абсолютный URI относительно base не выполняется. Если значение является URN, атрибут href распознаётся как publicId и используется для поиска записей public. Если значение является URI, оно рассматривается как systemId и используется для поиска записей system и uri.
- Определено в:
-
resolveв интерфейсеURIResolver - Параметры:
-
href— атрибут href, задающий URI таблицы стилей; он может быть относительным или абсолютным -
base— базовый URI, относительно которого атрибут href будет преобразован в абсолютный, если требуется абсолютный URI - Возвращает:
- объект
Source, если соответствие найдено. Если соответствие не найдено, возвращает пустой объектSource, если свойствоjavax.xml.catalog.resolveимеет значениеignore; возвращает объектSourceс исходным URI (href или href, разрешённым относительно base, если base не равен null), если свойствоjavax.xml.catalog.resolveимеет значениеcontinue. - Выбрасывает:
-
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 используется буквально; попытка преобразовать его в абсолютный URI относительно baseUri не выполняется. baseUri и namespace не используются при поиске соответствия в каталоге. Однако парсер мог преобразовать относительный systemId в XML-источнике в абсолютный, используя baseURI, из-за чего не удаётся найти запись system. В таком случае вместо записи system рекомендуется использовать запись systemSuffix.
- Определено в:
-
resolveEntityв интерфейсеXMLResolver - Параметры:
-
publicId— публичный идентификатор внешней сущности, на которую ссылаются, или null, если он не был указан -
systemId— системный идентификатор внешней сущности, на которую ссылаются. Для всех внешних сущностей требуется системный идентификатор. XML требует системный идентификатор для всех внешних сущностей, поэтому это значение всегда указано. -
baseUri— абсолютный базовый URI, не используется CatalogResolver -
namespace— пространство имён сущности, которую нужно разрешить; не используется CatalogResolver. - Возвращает:
- объект
InputStream, если соответствие найдено; null, если соответствие не найдено и свойствоjavax.xml.catalog.resolveимеет значение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 используется буквально; попытка преобразовать его в абсолютный URI относительно baseUri не выполняется. baseUri, namespaceUri и type не используются при поиске соответствия в каталоге. Однако парсер мог преобразовать относительный systemId в источнике в абсолютный, используя baseURI, из-за чего не удаётся найти запись system. В таком случае вместо записи system рекомендуется использовать запись systemSuffix.
- Определено в:
-
resolveResourceв интерфейсеLSResourceResolver - Параметры:
-
type— тип разрешаемого ресурса; не используется CatalogResolver -
namespaceUri— пространство имён разрешаемого ресурса; не используется CatalogResolver -
publicId— публичный идентификатор внешней сущности, на которую ссылаются, илиnull, если публичный идентификатор не указан или ресурс не является сущностью. -
systemId— системный идентификатор, ссылка URI на внешний ресурс, на который ссылаются -
baseUri— абсолютный базовый URI, не используется CatalogResolver - Возвращает:
- объект
LSInput, если соответствие найдено; null, если соответствие не найдено и свойствоjavax.xml.catalog.resolveимеет значениеcontinueилиignore. Обратите внимание: дляLSResourceResolverневозможно проигнорировать ссылку, поэтомуignoreобрабатывается так же, какcontinue. - Выбрасывает:
-
CatalogException— если соответствие не найдено иjavax.xml.catalog.resolveзадано какstrict
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.xml/javax/xml/catalog/CatalogResolver.html