Класс SchemaFactory
public abstract class SchemaFactory extends Object
Schema. Точка входа в API валидации. SchemaFactory — это компилятор схем. Он считывает внешние представления схем и подготавливает их для валидации.
Класс SchemaFactory не потокобезопасен. Другими словами, приложение отвечает за обеспечение того, чтобы в любой момент времени не более одного потока использовало объект SchemaFactory. Реализации рекомендуется помечать методы как synchronized для защиты от ошибок клиентов.
SchemaFactory не рекурсивен. В то время как один из методов newSchema вызывается, приложения не должны пытаться рекурсивно вызвать метод newSchema, даже из того же потока.
Язык схем
Этот стандарт использует URI пространства имён для обозначения языка схемы. Следующая таблица показывает значения, определённые этим стандартом.
Для соответствия стандарту реализация должна поддерживать только W3C XML Schema 1.0. Однако, если она выберет поддержку других языков схем, перечисленных здесь, она должна соответствовать соответствующим правилам поведения, описанным в этом стандарте.
Языки схем, не указанные здесь, должны будут использовать свои собственные URI для представления себя. Класс SchemaFactory способен находить другие реализации для других языков схем во время выполнения.
Обратите внимание, что, поскольку XML DTD тесно связан с процессом разбора и оказывает существенное влияние на процесс разбора, невозможно определить валидацию DTD как процесс, независимый от разбора. По этой причине этот стандарт не определяет семантику для XML DTD. Это не запрещает разработчикам реализовывать её по своему усмотрению, но пользователям следует помнить, что любая валидация DTD, реализованная на этом интерфейсе, неизбежно отличается от семантики XML DTD, определённой в XML 1.0.
| значение | язык |
|---|---|
XMLConstants.W3C_XML_SCHEMA_NS_URI ("http://www.w3.org/2001/XMLSchema") | W3C XML Schema 1.0 |
XMLConstants.RELAXNG_NS_URI ("http://relaxng.org/ns/structure/1.0") | RELAX NG 1.0 |
- С момента:
- 1.5
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Конструктор для производных классов. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
abstract ErrorHandler |
getErrorHandler() |
Получение текущего ErrorHandler, установленного для этого SchemaFactory. |
boolean |
getFeature |
Получение значения флага функции. |
Object |
getProperty |
Получение значения свойства. |
abstract LSResourceResolver |
getResourceResolver() |
Получение текущего LSResourceResolver, установленного для этого SchemaFactory. |
abstract boolean |
isSchemaLanguageSupported |
Поддерживается ли указанная схема этим SchemaFactory? |
static SchemaFactory |
newDefaultInstance() |
Создаёт новую инстанцию встроенной реализации по умолчанию SchemaFactory. |
static SchemaFactory |
newInstance |
Получение новой инстанции SchemaFactory, поддерживающей указанный язык схемы. |
static SchemaFactory |
newInstance |
Получение новой инстанции SchemaFactory по имени класса. |
abstract Schema |
newSchema() |
Создаёт специальный объект Schema. |
Schema |
newSchema |
Парсит указанный File как схему и возвращает его как Schema. |
Schema |
newSchema |
Парсит указанный URL как схему и возвращает его как Schema. |
Schema |
newSchema |
Парсит указанный источник как схему и возвращает её как схему. |
abstract Schema |
newSchema |
Парсит указанный(ые) источник(и) как схему и возвращает её как схему. |
abstract void |
setErrorHandler |
Устанавливает ErrorHandler для получения ошибок, возникших во время вызова метода newSchema. |
void |
setFeature |
Устанавливает функцию для этого SchemaFactory, Schema, созданных этой фабрикой, и, как следствие, Validator и ValidatorHandler, созданных этими Schema. |
void |
setProperty |
Устанавливает значение свойства. |
abstract void |
setResourceResolver |
Устанавливает LSResourceResolver для настройки разрешения ресурсов при разборе схем. |
Подробное описание конструкторов
SchemaFactory
protected SchemaFactory()
Конструктор ничего не делает.
Производные классы должны создавать объекты SchemaFactory, которые имеют null обработчик ошибок ErrorHandler и null обработчик ресурсов LSResourceResolver.
Подробное описание методов
newDefaultInstance
public static SchemaFactory newDefaultInstance()
SchemaFactory встроенной реализации по умолчанию системы.- Требования к реализации:
- Встроенная реализация по умолчанию системы
SchemaFactoryдолжна поддерживать только W3C XML Schema 1.0, но может поддерживать дополнительные языки схем. - Возвращает:
- Новый экземпляр
SchemaFactoryвстроенной реализации по умолчанию системы. - С момента:
- 9
newInstance
public static SchemaFactory newInstance(String schemaLanguage)
SchemaFactory, который поддерживает указанный язык схемы. Этот метод использует Механизм поиска JAXP для определения и загрузки SchemaFactory реализации, которая поддерживает указанный язык схемы. Совет по устранению неполадок:
См. Properties.load(java.io.InputStream) для точного способа парсинга файла свойств. В частности, двоеточия ':' должны быть экранированы в файле свойств, поэтому убедитесь, что URI языка схемы правильно экранированы в нём. Например:
http\://www.w3.org/2001/XMLSchema=org.acme.foo.XSSchemaFactory
- Параметры:
-
schemaLanguage- Указывает язык схемы, который будет понимать возвращаемый SchemaFactory. См. список доступных языков схем для возможных значений. - Возвращает:
- Новый экземпляр
SchemaFactory - Исключения:
-
IllegalArgumentException- Если нет доступной реализации языка схемы. -
NullPointerException- Если параметрschemaLanguageравен null. -
SchemaFactoryConfigurationError- Если обнаружена ошибка конфигурации. - См. также:
newInstance
public static SchemaFactory newInstance(String schemaLanguage, String factoryClassName, ClassLoader classLoader)
SchemaFactory по имени класса. SchemaFactory возвращается, если указанное имя класса фабрики поддерживает указанный язык схемы. Эта функция полезна, когда в классе пути есть несколько поставщиков. Она предоставляет больше контроля приложению, поскольку оно может указать, какой поставщик следует загрузить. Совет по устранению неполадок
Установка системной переменной jaxp.debug заставит этот метод печатать много сообщений отладки в System.err о том, что он делает и где он ищет.
Если у вас возникли проблемы, попробуйте:
java -Djaxp.debug=1 YourProgram ....
- Параметры:
-
schemaLanguage- Указывает язык схемы, который будет понимать возвращаемыйSchemaFactory. См. список доступных языков схем для возможных значений. -
factoryClassName- Полное имя класса фабрики, который предоставляет реализациюjavax.xml.validation.SchemaFactory. -
classLoader-ClassLoaderиспользуемый для загрузки класса фабрики. Если используется текущийnullконтекстный загрузчик классовThread. - Возвращает:
- Новый экземпляр
SchemaFactory - Исключения:
-
IllegalArgumentException- еслиfactoryClassNameявляетсяnull, или класс фабрики не может быть загружен, создан или не поддерживает язык схемы, указанный в параметреschemLanguage. -
NullPointerException- Если параметрschemaLanguageравен null. - С момента:
- 1.6
- См. также:
isSchemaLanguageSupported
public abstract boolean isSchemaLanguageSupported(String schemaLanguage)
SchemaFactory указанный язык схемы?- Параметры:
-
schemaLanguage- Указывает язык схемы, который будет понимать возвращаемыйSchemaFactory.schemaLanguageдолжен указать действительный язык схемы. - Возвращает:
-
trueеслиSchemaFactoryподдерживаетschemaLanguage, иначеfalse. - Исключения:
-
NullPointerException- ЕслиschemaLanguageявляетсяnull. -
IllegalArgumentException- ЕслиschemaLanguage.length() == 0илиschemaLanguageне указывают действительный язык схемы.
getFeature
public boolean getFeature(String name) throws SAXNotRecognizedException, SAXNotSupportedException
Имя функции — любой полностью квалифицированный URI. Возможно, SchemaFactory распознаёт имя функции, но временно не может вернуть его значение.
Реализаторы свободны (и рекомендуются) изобретать свои собственные функции, используя имена, основанные на своих собственных URI.
- Параметры:
-
name- Имя функции, которое является непустым полностью квалифицированным URI. - Возвращает:
- Текущее значение функции (true или false).
- Исключения:
-
SAXNotRecognizedException- Если значение функции не может быть назначено или извлечено. -
SAXNotSupportedException- КогдаSchemaFactoryраспознаёт имя функции, но не может определить его значение в данный момент. -
NullPointerException- Еслиnameявляетсяnull. - См. также:
setFeature
public void setFeature(String name, boolean value) throws SAXNotRecognizedException, SAXNotSupportedException
SchemaFactory, Schemas, созданных этой фабрикой, и, по расширению, Validators и ValidatorHandlers, созданными этими Schemas. Реализаторы и разработчики должны уделить особое внимание тому, как обрабатывается специальный объект Schema, возвращаемый newSchema(). В некоторых случаях, например, когда SchemaFactory и класс, фактически загружающий схему, происходят от разных реализаций, возможно, функции SchemaFactory не могут быть автоматически унаследованы. Разработчики должны убедиться, что такие функции, как безопасная обработка, явно устанавливаются в обоих местах.
Имя функции — любой полностью квалифицированный 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- КогдаSchemaFactoryраспознаёт имя функции, но не может установить запрошенное значение. -
NullPointerException- Еслиnameявляетсяnull. - См. также:
Установить свойство
public void setProperty(String name, Object object) throws SAXNotRecognizedException, SAXNotSupportedException
Имя свойства — любой полностью квалифицированный URI. Возможно, что SchemaFactory распознаёт имя свойства, но не может изменить текущее значение.
Все реализации, реализующие JAXP 1.5 или более позднюю версию, обязаны поддерживать свойства XMLConstants.ACCESS_EXTERNAL_DTD и XMLConstants.ACCESS_EXTERNAL_SCHEMA.
-
Доступ к внешним DTD в файлах схемы ограничен протоколами, указанными в свойстве
XMLConstants.ACCESS_EXTERNAL_DTD. Если доступ запрещён во время создания новой схемы из-за ограничения этого свойства,SAXExceptionбудет выброшен методомnewSchema(Source)илиnewSchema(File)илиnewSchema(URL)илиnewSchema(Source[]).Доступ к внешним DTD в файлах XML ограничен протоколами, указанными в свойстве
XMLConstants.ACCESS_EXTERNAL_DTD. Если доступ запрещён во время валидации из-за ограничения этого свойства,SAXExceptionбудет выброшен методомValidator.validate(Source)илиValidator.validate(Source, Result).Доступ к внешним ссылкам, заданным атрибутом schemaLocation, ограничен протоколами, указанными в свойстве
XMLConstants.ACCESS_EXTERNAL_SCHEMA. Если доступ запрещён во время валидации из-за ограничения этого свойства,SAXExceptionбудет выброшен методомValidator.validate(Source)илиValidator.validate(Source, Result).Доступ к внешним ссылкам, заданным элементами Import и Include, ограничен протоколами, указанными в свойстве
XMLConstants.ACCESS_EXTERNAL_SCHEMA. Если доступ запрещён при создании новой схемы из-за ограничения этого свойства,SAXExceptionбудет выброшен методомnewSchema(Source)илиnewSchema(File)илиnewSchema(URL)илиnewSchema(Source[]).
- Параметры:
-
name- Имя свойства, которое является непустым полностью квалифицированным URI. -
object- Запрашиваемое значение свойства. - Исключения:
-
SAXNotRecognizedException- Если значение свойства нельзя назначить или получить. -
SAXNotSupportedException- КогдаSchemaFactoryраспознаёт имя свойства, но не может установить запрашиваемое значение. -
NullPointerException- Еслиnameравноnull.
Получить свойство
public Object getProperty(String name) throws SAXNotRecognizedException, SAXNotSupportedException
Имя свойства — любой полностью квалифицированный URI. Возможно, что SchemaFactory распознаёт имя свойства, но временно не может вернуть его значение.
SchemaFactory не обязаны распознавать какие-либо конкретные имена свойств.
Реализаторы могут (и им рекомендуется) изобретать свои собственные свойства, используя имена, построенные на своих собственных URI.
- Параметры:
-
name- Имя свойства, которое является непустым полностью квалифицированным URI. - Возвращает:
- Текущее значение свойства.
- Исключения:
-
SAXNotRecognizedException- Если значение свойства нельзя назначить или получить. -
SAXNotSupportedException- Когда XMLReader распознаёт имя свойства, но не может определить его значение в данный момент. -
NullPointerException- Еслиnameравноnull. - См. также:
Установить обработчик ошибок
public abstract void setErrorHandler(ErrorHandler errorHandler)
ErrorHandler для получения ошибок, возникших во время вызова метода newSchema. Обработчик ошибок может использоваться для настройки процесса обработки ошибок при разборе схемы. При установке ErrorHandler, ошибки, обнаруженные во время разбора схем, сначала будут отправлены в ErrorHandler.
Обработчик ошибок может прервать разбор схемы немедленно, выбросив SAXException из обработчика. Или, например, он может вывести ошибку на экран и попытаться продолжить обработку, вернувшись в нормальном режиме из ErrorHandler
Если любой Throwable (или экземпляры его производных классов) будет выброшен из ErrorHandler, вызывающий метод newSchema получит тот же объект Throwable.
SchemaFactory не разрешается выбросить SAXException без предварительного сообщения об этом в ErrorHandler.
Приложения могут вызывать этот метод даже во время разбора Schema.
Если ErrorHandler равно null, реализация будет вести себя так, как если бы было установлено следующее значение ErrorHandler:
class DraconianErrorHandler implementsErrorHandler{ public void fatalError(SAXParseExceptione ) throwsSAXException{ throw e; } public void error(SAXParseExceptione ) throwsSAXException{ throw e; } public void warning(SAXParseExceptione ) throwsSAXException{ // noop } }
При создании нового объекта SchemaFactory, это поле по умолчанию устанавливается в null. Это поле НЕ наследуется объектами Schema, Validator или ValidatorHandler, созданными из этого объекта SchemaFactory.
- Параметры:
-
errorHandler- Новый обработчик ошибок, который нужно установить. Этот параметр может бытьnull.
Получить обработчик ошибок
public abstract ErrorHandler getErrorHandler()
ErrorHandler, установленный для этого объекта SchemaFactory.- Возвращает:
- Этот метод возвращает объект, который был в последний раз установлен методом
setErrorHandler(ErrorHandler), или null, если этот метод никогда не вызывался с момента создания этого объектаSchemaFactory. - См. также:
Установить разрешитель ресурсов
public abstract void setResourceResolver(LSResourceResolver resourceResolver)
LSResourceResolver для настройки разрешения ресурсов при разборе схем. SchemaFactory использует LSResourceResolver при необходимости поиска внешних ресурсов во время разбора схем, хотя то, что именно составляет «поиск внешних ресурсов», зависит от каждого языка схемы. Например, для W3C XML Schema это включает файлы <include>d или <import>ed, и DTD, на которые ссылаются файлы схемы и т. д.
Приложения могут вызывать этот метод даже во время разбора Schema.
Если LSResourceResolver равно null, реализация будет вести себя так, как если бы было установлено следующее значение LSResourceResolver:
class DumbDOMResourceResolver implementsLSResourceResolver{ publicLSInputresolveResource( String publicId, String systemId, String baseURI) { return null; // always return null } }
Если LSResourceResolver выбросит RuntimeException (или экземпляры его производных классов), то SchemaFactory прервёт разбор, и вызывающий метод newSchema получит тот же объект RuntimeException.
При создании нового объекта SchemaFactory, это поле по умолчанию устанавливается в null. Это поле НЕ наследуется объектами Schema, Validator или ValidatorHandler, созданными из этого объекта SchemaFactory.
- Параметры:
-
resourceResolver- Новый разрешитель ресурсов, который нужно установить. Этот параметр может быть null.
getResourceResolver
public abstract LSResourceResolver getResourceResolver()
LSResourceResolver, установленный для этой SchemaFactory.- Возвращает:
- Этот метод возвращает объект, последний установленный с помощью метода
setResourceResolver(LSResourceResolver), или null, если этот метод никогда не вызывался с момента создания этойSchemaFactory. - См. также:
newSchema
public Schema newSchema(Source schema) throws SAXException
Это метод-утилита для newSchema(Source[] schemas).
- Параметры:
-
schema- Источник, представляющий схему. - Возвращает:
- Новую
Schemaиз парсингаschema. - Исключения:
-
SAXException- Если во время парсинга произошла ошибка SAX. -
NullPointerException- еслиschemaравно null.
newSchema
public Schema newSchema(File schema) throws SAXException
File как схему и возвращает его как Schema. Это метод-утилита для newSchema(Source schema).
- Параметры:
-
schema- Файл, представляющий схему. - Возвращает:
- Новую
Schemaиз парсингаschema. - Исключения:
-
SAXException- Если во время парсинга произошла ошибка SAX. -
NullPointerException- еслиschemaравно null.
newSchema
public Schema newSchema(URL schema) throws SAXException
URL как схему и возвращает его как Schema. Это метод-утилита для newSchema(Source schema).
- Параметры:
-
schema-URL, представляющий схему. - Возвращает:
- Новую
Schemaиз парсингаschema. - Исключения:
-
SAXException- Если во время парсинга произошла ошибка SAX. -
NullPointerException- еслиschemaравно null.
newSchema
public abstract Schema newSchema(Source[] schemas) throws SAXException
Вызывающий метод прочитает все Source и объединит их в одну схему. Точные семантики объединения зависят от языка схем, для которого создан этот объект SchemaFactory.
Когда установлен ErrorHandler, вызывающий метод будет сообщать обо всех ошибках, найденных в источниках, обработчику. Если обработчик генерирует исключение, он прервёт компиляцию схемы, и то же исключение будет сгенерировано этим методом. Кроме того, после того как об ошибке сообщено обработчику, вызывающему методу разрешено прервать дальнейшую обработку, сгенерировав исключение. Если обработчик ошибок не установлен, вызывающий метод сгенерирует первое найденное исключение в источниках.
W3C XML Schema 1.0
Результирующая схема содержит компоненты из указанных источников. Тот же результат был бы достигнут, если бы все эти источники были импортированы, используя соответствующие значения для schemaLocation и namespace, в один документ схемы с другим targetNamespace и без собственных компонентов, если элементы import были заданы в том же порядке, что и источники. Раздел 4.2.3 рекомендации XML Schema описывает варианты, которые имеют процессоры в этом отношении. Хотя процессор должен быть последовательным в обращении с источниками схем JAXP и импортами XML Schema, поведение между совместимыми с JAXP парсерами может отличаться; в частности, парсеры могут выбрать игнорирование всех, кроме первого <import> для данного пространства имен, независимо от информации, предоставленной в schemaLocation.
Если проанализированный набор схем включает ошибку(и), как указано в разделе 5.1 спецификации XML Schema, то ошибка должна быть сообщена ErrorHandler.
RELAX NG
Для RELAX NG, этот метод должен сгенерировать исключение UnsupportedOperationException, если schemas.length!=1.
- Параметры:
-
schemas- входные данные для парсинга.SchemaFactoryтребуется для распознаванияSAXSource,StreamSource,StAXSourceиDOMSource. Входные схемы должны быть XML-документами или XML-элементами и не должны быть null. Для обратной совместимости, результаты передачи чего-либо, кроме документа или элемента, зависят от реализации. Реализации должны либо распознать и обработать входные данные, либо сгенерировать IllegalArgumentException. - Возвращает:
- Всегда возвращает не-null валидный объект
Schema. Обратите внимание, что когда ошибка была сообщена, нет никакой гарантии, что возвращаемый объектSchemaимеет смысл. - Исключения:
-
SAXException- Если во время обработки указанных входных данных обнаружена ошибка. Когда установленErrorHandler, ошибки сообщаются туда в первую очередь. См.setErrorHandler(ErrorHandler). -
NullPointerException- Если параметрschemasсам по себе равен null или какой-либо элемент в массиве равен null. -
IllegalArgumentException- Если какой-либо элемент в массиве не распознаётся этим методом. -
UnsupportedOperationException- Если язык схемы не поддерживает эту операцию.
newSchema
public abstract Schema newSchema() throws SAXException
Schema. Точные семантики возвращаемого объекта Schema зависят от языка схем, для которого создан этот SchemaFactory.
Также реализациям разрешено использовать специфичные для реализации свойства/функции для изменения семантики этого метода.
Реализаторы и разработчики должны обратить особое внимание на то, как функции, установленные в этом SchemaFactory, обрабатываются этим специальным объектом Schema. В некоторых случаях, например, когда SchemaFactory и класс, фактически загружающий схему, происходят из разных реализаций, может быть невозможно автоматическое наследование функций SchemaFactory. Разработчики должны убедиться, что функции, такие как безопасная обработка, явно установлены в обоих местах.
W3C XML Schema 1.0
Для XML Schema этот метод создаёт объект Schema, который выполняет валидацию, используя указанные в документах подсказки местоположения.
Возвращаемый объект Schema предполагает, что если документы ссылаются на один и тот же URL в подсказках местоположения схемы, они всегда будут разрешаться до одного и того же документа схемы. Это предположение позволяет реализациям повторно использовать проанализированные результаты документов схемы, чтобы несколько валидаций против одной и той же схемы выполнялись быстрее.
Обратите внимание, что использование подсказок местоположения схем создаёт уязвимость к атакам типа "отказ в обслуживании".
RELAX NG
RELAX NG не поддерживает эту операцию.
- Возвращает:
- Всегда возвращает не-null валидный объект
Schema. - Исключения:
-
UnsupportedOperationException- Если эта операция не поддерживается вызывающим методом. -
SAXException- Если эта операция поддерживается, но завершилась неудачей по какой-то причине.
© 1993, 2023, 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/21/docs/api/java.xml/javax/xml/validation/SchemaFactory.html