Класс 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, создаваемых этой фабрикой объектов Schema и, как следствие, создаваемых этими Schema объектами Validator и ValidatorHandler. Разработчикам реализаций и приложений следует обратить особое внимание на обработку специального объекта 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. Если из-за ограничений этого свойства доступ запрещен при создании новой схемы, методnewSchema(Source),newSchema(File),newSchema(URL)илиnewSchema(Source[])вызовет исключениеSAXException.Доступ к внешним DTD в исходных XML-файлах ограничивается протоколами, указанными свойством
XMLConstants.ACCESS_EXTERNAL_DTD. Если из-за ограничений этого свойства доступ запрещен во время проверки, методValidator.validate(Source)илиValidator.validate(Source, Result)вызовет исключениеSAXException.Доступ к внешней ссылке, заданной атрибутом schemaLocation, ограничивается протоколами, указанными свойством
XMLConstants.ACCESS_EXTERNAL_SCHEMA. Если из-за ограничений этого свойства доступ запрещен во время проверки, методValidator.validate(Source)илиValidator.validate(Source, Result)вызовет исключениеSAXException.Доступ к внешней ссылке, заданной элементами Import и Include, ограничивается протоколами, указанными свойством
XMLConstants.ACCESS_EXTERNAL_SCHEMA. Если из-за ограничений этого свойства доступ запрещен при создании новой схемы, методnewSchema(Source),newSchema(File),newSchema(URL)илиnewSchema(Source[])вызовет исключениеSAXException.
- Параметры:
-
name- Имя свойства, являющееся ненулевым URI с полным именем. -
object- Запрашиваемое значение свойства. - Исключения:
-
SAXNotRecognizedException- Если значение свойства нельзя назначить или получить. -
SAXNotSupportedException- ЕслиSchemaFactoryраспознает имя свойства, но не может задать запрашиваемое значение. -
NullPointerException- Еслиnameравноnull.
getProperty
public Object getProperty(String name) throws SAXNotRecognizedException, SAXNotSupportedException
Имя свойства — это любой URI, являющийся полным именем. SchemaFactory может распознавать имя свойства, но временно не иметь возможности вернуть его значение.
От SchemaFactory не требуется распознавать какие-либо определенные имена свойств.
Разработчики могут (и им рекомендуется) создавать собственные свойства, используя имена на основе собственных URI.
- Параметры:
-
name- Имя свойства, являющееся ненулевым URI с полным именем. - Возвращает:
- Текущее значение свойства.
- Исключения:
-
SAXNotRecognizedException- Если значение свойства нельзя назначить или получить. -
SAXNotSupportedException- Если XMLReader распознает имя свойства, но в данный момент не может определить его значение. -
NullPointerException- Еслиnameравноnull. - См. также:
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. Это поле НЕ будет унаследовано объектами Schema, Validator или ValidatorHandler, созданными этой SchemaFactory.
- Параметры:
-
errorHandler- Новый обработчик ошибок. Значение этого параметра может бытьnull.
getErrorHandler
public abstract ErrorHandler getErrorHandler()
ErrorHandler, заданный для этой SchemaFactory.- Возвращает:
- Этот метод возвращает объект, последний раз заданный методом
setErrorHandler(ErrorHandler), или null, если этот метод ни разу не вызывался с момента создания этойSchemaFactory. - См. также:
setResourceResolver
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.
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. - Возвращает:
- Всегда возвращает ненулевой допустимый объект
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 могут не наследоваться автоматически. Разработчикам следует убедиться, что такие функции, как безопасная обработка, явно заданы в обоих местах.
Схема XML W3C 1.0
Для XML Schema этот метод создает объект Schema, который выполняет проверку, используя подсказки о расположении, указанные в документах.
Возвращаемый объект Schema предполагает, что документы, ссылающиеся на один и тот же URL в подсказках о расположении схемы, всегда будут разрешаться в один и тот же документ схемы. Это предположение позволяет реализациям повторно использовать результаты разбора документов схемы, благодаря чему несколько проверок по одной и той же схеме выполняются быстрее.
Обратите внимание, что использование подсказок о расположении схемы создает уязвимость для атак типа «отказ в обслуживании».
RELAX NG
RELAX NG не поддерживает эту операцию.
- Возвращает:
- Всегда возвращает допустимый объект
Schema, не равный null. - Вызывает:
-
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://docs.oracle.com/en/java/javase/25/docs/api/java.xml/javax/xml/validation/SchemaFactory.html