Интерфейс EntityResolver
- Все известные подинтерфейсы:
-
CatalogResolver,EntityResolver2
- Все известные реализующие классы:
-
DefaultHandler,DefaultHandler2,HandlerBase,XMLFilterImpl
public interface EntityResolver
Если приложению SAX требуется реализовать настраиваемую обработку внешних сущностей, оно должно реализовать этот интерфейс и зарегистрировать экземпляр с драйвером SAX, используя метод setEntityResolver.
Затем XML-читатель позволит приложению перехватить любые внешние сущности (включая внешний подмножество DTD и внешние параметрические сущности, если таковые имеются) перед их включением.
Многие приложения SAX не нуждаются в реализации этого интерфейса, но он будет особенно полезен для приложений, которые создают XML-документы из баз данных или других специализированных источников ввода, или для приложений, использующих типы URI, отличные от URL.
Следующий разрешитель предоставит приложению специальный поток символов для сущности с идентификатором системы "http://www.myhost.com/today":
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
public class MyResolver implements EntityResolver {
public InputSource resolveEntity (String publicId, String systemId)
{
if (systemId.equals("http://www.myhost.com/today")) {
// return a special input source
MyReader reader = new MyReader();
return new InputSource(reader);
} else {
// use the default behaviour
return null;
}
}
}
Приложение также может использовать этот интерфейс для перенаправления идентификаторов системы на локальные URI или для поиска замен в каталоге (возможно, используя общедоступный идентификатор).
- С:
- 1.4, SAX 1.0
- См. также:
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
InputSource |
resolveEntity |
Разрешить приложению разрешать внешние сущности. |
Подробное описание методов
resolveEntity
InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException
Парсер вызовет этот метод перед открытием любой внешней сущности, кроме основной сущности документа. Такие сущности включают внешнее подмножество DTD и внешние параметрические сущности, на которые ссылается DTD (в обоих случаях, только если парсер читает внешние параметрические сущности), и внешние общие сущности, на которые ссылается элемент документа (если парсер читает внешние общие сущности). Приложение может запросить, чтобы парсер нашел сущность сам, использовал альтернативный URI или использовал данные, предоставленные приложением (как поток символов или байтов).
Авторы приложений могут использовать этот метод для перенаправления внешних идентификаторов системы на защищенные и/или локальные URI, для поиска общедоступных идентификаторов в каталоге или для чтения сущности из базы данных или другого источника ввода (включая, например, диалоговое окно). Ни XML, ни SAX не определяют предпочтительной политики использования общедоступных или системных идентификаторов для разрешения ресурсов. Однако SAX определяет, как интерпретировать любой возвращенный этим методом объект InputSource, и что если он не возвращается, то системный идентификатор будет интерпретирован как URL.
Если идентификатор системы является URL, SAX-парсер должен полностью разрешить его перед сообщением об этом приложению.
- Параметры:
-
publicId- Общедоступный идентификатор внешней сущности, на которую делается ссылка, или null, если он не был предоставлен. -
systemId- Идентификатор системы внешней сущности, на которую делается ссылка. - Возвращает:
- Объект InputSource, описывающий новый источник ввода, или null для запроса открытия обычного соединения URI с идентификатором системы.
- Издает:
-
SAXException- Любая SAX-исключение, возможно, обертывающая другую исключение. -
IOException- Java-специфическое исключение ввода-вывода, возможно, результат создания нового потока InputStream или Reader для InputSource. - См. также:
© 1993, 2021, 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/17/docs/api/java.xml/org/xml/sax/EntityResolver.html