Класс 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 |
- Since:
- 1.5
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Конструктор для производных классов. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
abstract ErrorHandler |
getErrorHandler() |
Возвращает текущий ErrorHandler, установленный для этого SchemaFactory. |
boolean |
getFeature |
Поиск значения флага функции. |
Object |
getProperty |
Поиск значения свойства. |
abstract LSResourceResolver |
getResourceResolver() |
Возвращает текущий LSResourceResolver, установленный для этого SchemaFactory. |
abstract boolean |
isSchemaLanguageSupported |
Поддерживает ли эта фабрика указанную схему? |
static SchemaFactory |
newDefaultInstance() |
Создаёт новую инстанцию встроенной реализации по умолчанию. |
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используется для загрузки класса фабрики. Если используется текущий контекстный класс-загрузчикnullThread. - Возвращает:
- Новый экземпляр
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, Schema объектов, созданных этой фабрикой, и, по умолчанию, Validator и ValidatorHandler объектов, созданных этими Schema объектами. Реализаторы и разработчики должны уделить особое внимание тому, как обрабатывается специальный объект 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. - См. также:
setProperty
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[]).
- Parameters:
-
name- Имя свойства, являющееся непустым полностью квалифицированным URI. -
object- Запрашиваемое значение свойства. - Throws:
-
SAXNotRecognizedException- Если значение свойства нельзя установить или получить. -
SAXNotSupportedException- КогдаSchemaFactoryраспознаёт имя свойства, но не может установить запрашиваемое значение. -
NullPointerException- Еслиnameравноnull.
getProperty
public Object getProperty(String name) throws SAXNotRecognizedException, SAXNotSupportedException
Имя свойства — любой полностью квалифицированный URI. Возможно, что SchemaFactory распознаёт имя свойства, но временно не может вернуть его значение.
SchemaFactory не обязаны распознавать какие-либо конкретные имена свойств.
Реализаторы могут (и должны) придумывать свои свойства, используя имена, основанные на своих собственных URI.
- Parameters:
-
name- Имя свойства, которое является непустым полностью квалифицированным URI. - Returns:
- Текущее значение свойства.
- Throws:
-
SAXNotRecognizedException- Если значение свойства нельзя установить или получить. -
SAXNotSupportedException- Когда XMLReader распознаёт имя свойства, но не может определить его значение в данный момент. -
NullPointerException- Еслиnameравноnull. - See Also:
setErrorHandler
public abstract void setErrorHandler(ErrorHandler errorHandler)
ErrorHandler для получения ошибок, возникших во время вызова метода newSchema. Обработчик ошибок может использоваться для настройки процесса обработки ошибок во время разбора схемы. Когда установлен ErrorHandler, ошибки, обнаруженные во время разбора схем, сначала будут отправлены в ErrorHandler.
Обработчик ошибок может немедленно прервать разбор схемы, выбросив SAXException из обработчика. Или, например, он может вывести ошибку на экран и попытаться продолжить обработку, возвратив значение по умолчанию из ErrorHandler.
Если из ErrorHandler будет выброшено любое исключение Throwable (или экземпляры его производных классов), вызывающий метод newSchema получит тот же объект исключения Throwable.
SchemaFactory не допускается выбрасывать SAXException без предварительного сообщения об этом в ErrorHandler.
Приложения могут вызвать этот метод даже во время разбора Schema.
Если ErrorHandler равно null, реализация будет вести себя так, как если бы был установлен следующий обработчик ошибок:
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.
- Parameters:
-
errorHandler- Новый обработчик ошибок для установки. Этот параметр может бытьnull.
getErrorHandler
public abstract ErrorHandler getErrorHandler()
ErrorHandler, установленный для этого SchemaFactory.- Returns:
- Этот метод возвращает объект, который был последним установлен методом
setErrorHandler(ErrorHandler), или null, если этот метод не был вызван с момента создания этогоSchemaFactory. - See Also:
setResourceResolver
public abstract void setResourceResolver(LSResourceResolver resourceResolver)
LSResourceResolver для настройки разрешения ресурсов при разборе схем. SchemaFactory использует LSResourceResolver при необходимости поиска внешних ресурсов при разборе схем, хотя то, что считается "поиском внешних ресурсов", зависит от языка каждой схемы. Например, для W3C XML Schema это включает файлы <include> или <import> файлов, и DTD, ссылающиеся на файлы схемы, и т. д.
Приложения могут вызвать этот метод даже во время разбора Schema.
Если LSResourceResolver равно null, реализация будет вести себя так, как если бы был установлен следующий обработчик ресурсов:
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.
- Parameters:
-
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> для данного namespace, независимо от информации, предоставленной в 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. -
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, 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/javax/xml/validation/SchemaFactory.html