Класс 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), чтобы узнать, как именно анализируется файл свойств. В частности, двоеточия ':' в файле свойств должны быть экранированы, поэтому убедитесь, что URIs языка схемы в нём должным образом экранированы. Например:
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, 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, реализация будет вести себя так, как если бы был установлен следующий обработчик ошибок 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. Этот параметр не будет унаследован Schemas, Validators или ValidatorHandlers, созданных из этого SchemaFactory.
- Parameters:
-
errorHandler- Новый обработчик ошибок. Этот параметр может бытьnull.
getErrorHandler
public abstract ErrorHandler getErrorHandler()
ErrorHandler, установленный для этого SchemaFactory.- Returns:
- Этот метод возвращает объект, последний установленный с помощью метода
setErrorHandler(ErrorHandler), или null, если этот метод никогда не вызывался с момента создания этогоSchemaFactory. - See Also:
Установить разрешитель ресурсов
public abstract void setResourceResolver(LSResourceResolver resourceResolver)
LSResourceResolver для настройки разрешения ресурсов при разборе схем.
SchemaFactory использует LSResourceResolver при поиске внешних ресурсов во время разбора схем, хотя то, что именно представляет собой "поиск внешних ресурсов", зависит от каждого языка схем. Например, для W3C XML Schema это включает файлы <include> или <import>, и 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.
Получить разрешитель ресурсов
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 не поддерживает эту операцию.
- Возвращает:
- Всегда возвращает непустой валидный объект
Schema. - Бросает:
-
UnsupportedOperationException- Если эта операция не поддерживается вызываемой стороной. -
SAXException- Если эта операция поддерживается, но завершилась неудачей по какой-либо причине.
© 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://download.java.net/java/early_access/jdk24/docs/api/java.xml/javax/xml/validation/SchemaFactory.html