Класс ValidatorHandler
- java.lang.Object
-
- javax.xml.validation.ValidatorHandler
- Все реализуемые интерфейсы:
- ContentHandler
public abstract class ValidatorHandler extends Object implements ContentHandler
Потоковый валидатор, работающий с потоком SAX.
Объект ValidatorHandler не потокобезопасен и не допускает повторного входа. Другими словами, приложение отвечает за обеспечение того, чтобы один объект ValidatorHandler не использовался из более чем одной потоковой нити в любой момент времени.
ValidatorHandler проверяет, следуют ли события SAX набору ограничений, описанных в ассоциированной Schema, и дополнительно может изменять события SAX (например, добавляя значения по умолчанию и т.д.).
ValidatorHandler расширяет ContentHandler, но уточняет базовый ContentHandler следующим образом:
- События startElement/endElement должны получать непустые строки для
uri,localName, иqname, даже если SAX разрешает некоторые из них быть null. Аналогично, заданный пользователемContentHandlerполучит непустые строки для всех трех параметров. - Приложения должны гарантировать, что
ValidatorHandlerправильно вызываютContentHandler.startPrefixMapping(String,String)иContentHandler.endPrefixMapping(String). Аналогично, заданный пользователемContentHandlerполучит события startPrefixMapping/endPrefixMapping. ЕслиValidatorHandlerвводит дополнительные связи пространств имен, заданный пользователемContentHandlerполучит дополнительные события startPrefixMapping/endPrefixMapping. -
Attributesдля методаContentHandler.startElement(String,String,String,Attributes)может или не может содержать атрибуты xmlns*.
Объект ValidatorHandler автоматически сбрасывается каждый раз при вызове метода startDocument.
Распознаваемые свойства и функции
Этот стандарт определяет следующую функцию, которую должны распознавать все реализации ValidatorHandler.
http://xml.org/sax/features/namespace-prefixes
Эта функция контролирует, как ValidatorHandler вводит связи пространств имен, которые отсутствовали в исходном потоке событий SAX. При установке этой функции в значение true, необходимо убедиться, что пользовательский ContentHandler увидит соответствующий атрибут xmlns* в объекте Attributes обратного вызова ContentHandler.startElement(String,String,String,Attributes). В противном случае, атрибуты xmlns* не должны добавляться к Attributes, переданному указанному пользователем ContentHandler.
(Обратите внимание, что независимо от этого переключателя, связи пространств имен всегда сообщаются приложениям через методы ContentHandler.startPrefixMapping(String,String) и ContentHandler.endPrefixMapping(String) заданного пользователем ContentHandler.)
Обратите внимание, что эта функция НЕ влияет на способ получения ValidatorHandler событий SAX. Она просто изменяет способ дополнения им событий SAX.
Эта функция установлена в значение false по умолчанию.
- С тех пор:
- 1.5
Конструкторы
| Модификатор | Конструктор и описание |
|---|---|
protected |
ValidatorHandler() Конструктор для производных классов. |
Методы
| Модификатор и тип | Метод и описание |
|---|---|
abstract ContentHandler |
getContentHandler() Получает |
abstract ErrorHandler |
getErrorHandler() Получает текущий |
boolean |
getFeature(String name) Получает значение флага функции. |
Object |
getProperty(String name) Получает значение свойства. |
abstract LSResourceResolver |
getResourceResolver() Получает текущий |
abstract TypeInfoProvider |
getTypeInfoProvider() Получает реализацию |
abstract void |
setContentHandler(ContentHandler receiver) Устанавливает |
abstract void |
setErrorHandler(ErrorHandler errorHandler) Устанавливает |
void |
setFeature(String name,
boolean value) Устанавливает функцию для данного |
void |
setProperty(String name,
Object object) Устанавливает значение свойства. |
abstract void |
setResourceResolver(LSResourceResolver resourceResolver) Устанавливает |
Методы, унаследованные от класса java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait Методы, унаследованные от интерфейса org.xml.sax.ContentHandler
characters, endDocument, endElement, endPrefixMapping, ignorableWhitespace, processingInstruction, setDocumentLocator, skippedEntity, startDocument, startElement, startPrefixMapping Конструкторы
ValidatorHandler
protected ValidatorHandler()
Конструктор для производных классов.
Конструктор ничего не делает.
Производные классы должны создать объекты ValidatorHandler, которые имеют null ErrorHandler и null LSResourceResolver.
Методы
setContentHandler
public abstract void setContentHandler(ContentHandler receiver)
Устанавливает ContentHandler, который получает результат расширенной валидации.
Когда указан ContentHandler, ValidatorHandler будет работать как фильтр и по сути скопирует входящие события в указанный ContentHandler.
При этом ValidatorHandler может изменять события, например, добавляя атрибуты по умолчанию.
ValidatorHandler может буферизовать события до определенного предела, но чтобы ValidatorHandler можно было использовать парсером, необходимо выполнить следующее требование.
- Когда вызываются
ContentHandler.startElement(String, String, String, Attributes),ContentHandler.endElement(String, String, String),ContentHandler.startDocument()илиContentHandler.endDocument()наValidatorHandler, тот же метод для указанногоContentHandlerдолжен быть вызван для того же события до возврата вызова. -
ValidatorHandlerне должен вводить новые элементы, которые отсутствовали во входных данных. -
ValidatorHandlerне должен удалять атрибуты, которые присутствовали во входных данных.
Если метод обратного вызова для указанного ContentHandler вызывает исключение, то тот же объект исключения должен быть сгенерирован ValidatorHandler. ErrorHandler не должен получать уведомление об этом исключении.
Этот метод может вызываться даже в середине процесса валидации.
- Параметры:
-
receiver-ContentHandlerили значение null.
getContentHandler
public abstract ContentHandler getContentHandler()
Получает ContentHandler, который получает результат расширенной валидации.
- Возвращает:
- Этот метод возвращает объект, который был в последний раз задан с помощью метода
getContentHandler(), или null, если этот метод никогда не вызывался с момента создания этогоValidatorHandler. - См. также:
setContentHandler(ContentHandler)
setErrorHandler
public abstract void setErrorHandler(ErrorHandler errorHandler)
Устанавливает ErrorHandler для получения ошибок, возникших во время валидации.
Обработчик ошибок может использоваться для настройки процесса обработки ошибок во время валидации. Когда установлен ErrorHandler, ошибки, обнаруженные во время валидации, сначала будут отправлены в ErrorHandler.
Обработчик ошибок может немедленно прервать дальнейшую валидацию, выбросив SAXException из обработчика. Или, например, он может вывести ошибку на экран и попытаться продолжить валидацию, нормально вернувшись из ErrorHandler.
Если любое исключение Throwable выбрасывается из ErrorHandler, то тот же объект Throwable будет переброшен в корень стека вызовов.
ValidatorHandler запрещается выбрасывать SAXException без предварительного сообщения об этом в ErrorHandler.
Если ErrorHandler равен null, реализация будет вести себя так, как если бы был установлен следующий ErrorHandler:
class DraconianErrorHandler implements ErrorHandler {
public void fatalError( SAXParseException e ) throws SAXException {
throw e;
}
public void error( SAXParseException e ) throws SAXException {
throw e;
}
public void warning( SAXParseException e ) throws SAXException {
// noop
}
} При создании нового объекта ValidatorHandler, это поле по умолчанию устанавливается в null.
- Параметры:
-
errorHandler- Новый обработчик ошибок для установки. Этот параметр может быть null.
getErrorHandler
public abstract ErrorHandler getErrorHandler()
Возвращает текущего ErrorHandler, установленного для этого ValidatorHandler.
- Возвращает:
- Этот метод возвращает объект, который был в последний раз задан с помощью метода
setErrorHandler(ErrorHandler), или null, если этот метод никогда не вызывался с момента создания этогоValidatorHandler. - См. также:
setErrorHandler(ErrorHandler)
setResourceResolver
public abstract void setResourceResolver(LSResourceResolver resourceResolver)
Устанавливает LSResourceResolver для настройки разрешения ресурсов во время валидации.
ValidatorHandler использует LSResourceResolver при необходимости поиска внешних ресурсов во время валидации, хотя то, что именно составляет "поиск внешних ресурсов", зависит от каждого языка схем.
Если LSResourceResolver равно null, реализация будет вести себя так, как если бы был установлен следующий LSResourceResolver:
class DumbLSResourceResolver implements LSResourceResolver {
public LSInput resolveResource(
String publicId, String systemId, String baseURI) {
return null; // always return null
}
} Если LSResourceResolver вызывает исключение RuntimeException (или экземпляры его производных классов), то ValidatorHandler прервет парсинг, и вызывающий метод validate получит то же исключение RuntimeException.
При создании нового объекта ValidatorHandler, это поле по умолчанию устанавливается в null.
- Параметры:
-
resourceResolver- Новый разрешитель ресурсов для установки. Этот параметр может быть null.
getResourceResolver
public abstract LSResourceResolver getResourceResolver()
Возвращает текущего LSResourceResolver, установленного для этого ValidatorHandler.
- Возвращает:
- Этот метод возвращает объект, который был в последний раз задан с помощью метода
setResourceResolver(LSResourceResolver), или null, если этот метод никогда не вызывался с момента создания этогоValidatorHandler. - См. также:
setErrorHandler(ErrorHandler)
getTypeInfoProvider
public abstract TypeInfoProvider getTypeInfoProvider()
Получает реализацию TypeInfoProvider для этого ValidatorHandler.
Полученный TypeInfoProvider можно запросить во время парсинга для доступа к информации о типах, определенных валидатором.
Некоторые языки схем не определяют понятие типа; для таких языков этот метод может не поддерживаться. Однако для соответствия данному спецификации, реализации для W3C XML Schema 1.0 должны поддерживать эту операцию.
- Возвращает:
- null, если валидатор/язык схемы не поддерживает понятие
TypeInfo. В противном случае возвращается непустой действительныйTypeInfoProvider.
getFeature
public boolean getFeature(String name)
throws SAXNotRecognizedException,
SAXNotSupportedException Получает значение флага функции.
Имя функции — это любой полностью квалифицированный URI. ValidatorHandler может распознать имя функции, но временно не сможет вернуть его значение. Некоторые значения функций могут быть доступны только в определенных контекстах, таких как до, во время или после валидации.
Реализаторы могут (и должны) изобретать свои собственные функции, используя имена, основанные на своих собственных URI.
- Параметры:
-
name- Имя функции, которое представляет собой непустой полностью квалифицированный URI. - Возвращает:
- Текущее значение функции (true или false).
- Исключения:
-
SAXNotRecognizedException- Если значение функции не может быть присвоено или получено. -
SAXNotSupportedException- ЕслиValidatorHandlerраспознаёт имя функции, но не может определить его значение в данный момент. -
NullPointerException- Когдаnameимеет значениеnull. - См. также:
setFeature(String, boolean)
setFeature
public void setFeature(String name,
boolean value)
throws SAXNotRecognizedException,
SAXNotSupportedException Установите функцию для этого ValidatorHandler.
Функция может использоваться для управления способом, которым ValidatorHandler анализирует схемы. Имя функции — любой полностью квалифицированный URI. Возможно, SchemaFactory может экспонировать значение функции, но не сможет изменить текущее значение. Некоторые значения функций могут быть неизменяемыми или изменяемыми только в определенных контекстах, таких как до, во время или после валидации.
Все реализации обязаны поддерживать функцию XMLConstants.FEATURE_SECURE_PROCESSING. Когда функция:
-
true: реализация ограничит обработку XML в соответствии с пределами реализации. Примеры включают пределы расширения сущностей и конструкции XML Schema, которые потребляют большое количество ресурсов. Если обработка XML ограничена по соображениям безопасности, это будет сообщено с помощью вызова зарегистрированногоErrorHandler.fatalError(SAXParseException exception). См.setErrorHandler(ErrorHandler errorHandler). -
false: реализация будет обрабатывать XML в соответствии со спецификациями XML без учета возможных ограничений реализации.
- Параметры:
-
name- Имя функции, которое является непустым полностью квалифицированным URI. -
value- Запрашиваемое значение функции (true или false). - Исключения:
-
SAXNotRecognizedException- Если значение функции не может быть назначено или получено. -
SAXNotSupportedException- КогдаValidatorHandlerраспознает имя функции, но не может установить запрашиваемое значение. -
NullPointerException- Когдаnameравноnull. - См. также:
getFeature(String)
setProperty
public void setProperty(String name,
Object object)
throws SAXNotRecognizedException,
SAXNotSupportedException Установите значение свойства.
Имя свойства — любой полностью квалифицированный URI. Возможно, ValidatorHandler распознает имя свойства, но не сможет изменить текущее значение. Некоторые значения свойств могут быть неизменяемыми или изменяемыми только в определенных контекстах, например, до, во время или после валидации.
Для ValidatorHandler не требуется распознавание задания каких-либо конкретных имён свойств.
- Параметры:
-
name- Имя свойства, которое является непустым полностью квалифицированным URI. -
object- Запрашиваемое значение свойства. - Исключения:
-
SAXNotRecognizedException- Если значение свойства нельзя назначить или получить. -
SAXNotSupportedException- КогдаValidatorHandlerраспознаёт имя свойства, но не может установить запрашиваемое значение. -
NullPointerException- Когдаnameравноnull.
getProperty
public Object getProperty(String name)
throws SAXNotRecognizedException,
SAXNotSupportedException Получение значения свойства.
Имя свойства — любой полностью квалифицированный URI. Возможно, ValidatorHandler распознает имя свойства, но временно не сможет вернуть его значение. Некоторые значения свойств могут быть доступны только в определённых контекстах, таких как до, во время или после валидации.
Для ValidatorHandler не требуется распознавание каких-либо конкретных имён свойств.
Реализаторы могут (и должны) изобретать свои собственные свойства, используя имена, основанные на своих собственных URI.
- Параметры:
-
name- Имя свойства, которое является непустым полностью квалифицированным URI. - Возвращает:
- Текущее значение свойства.
- Исключения:
-
SAXNotRecognizedException- Если значение свойства нельзя назначить или получить. -
SAXNotSupportedException- Когда XMLReader распознаёт имя свойства, но не может определить его значение в данный момент. -
NullPointerException- Когдаnameравноnull. - См. также:
setProperty(String, Object)
© 1993, 2020, 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.