Spec-Zone.ru › OpenJDK 25

Интерфейс CatalogResolver

Все суперинтерфейсы:
EntityResolver, LSResourceResolver, URIResolver, XMLResolver
public interface CatalogResolver extends EntityResolver, XMLResolver, URIResolver, LSResourceResolver
Резолвер каталогов, реализующий SAX 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(String href, String base)
Реализует URIResolver.
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)
Реализует 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
См. также:
  • InputSource

resolve

Source resolve(String href, String base)
Реализует URIResolver. Метод выполняет поиск в записях основного и альтернативных каталогов, пытаясь найти соответствие указанному атрибуту 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

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, концептуальные обзоры, определения терминов, обходные решения и работающие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API