Spec-Zone.ru › OpenJDK 24

Класс SchemaFactory

java.lang.Object
javax.xml.validation.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.

URI для поддерживаемых языков схем
значение язык
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

Краткое описание конструкторов

SchemaFactory()
Модификатор Конструктор Описание
protected
Конструктор для производных классов.

Краткое описание методов

Модификатор и тип Метод Описание
abstract ErrorHandler getErrorHandler()
Получает текущий обработчик ошибок ErrorHandler, установленный для этого SchemaFactory.
boolean getFeature(String name)
Получение значения флага функции.
Object getProperty(String name)
Получение значения свойства.
abstract LSResourceResolver getResourceResolver()
Получает текущий LSResourceResolver, установленный для этого SchemaFactory.
abstract boolean isSchemaLanguageSupported(String schemaLanguage)
Поддерживается ли указанная схема этим SchemaFactory?
static SchemaFactory newDefaultInstance()
Создаёт новый экземпляр стандартной реализации SchemaFactory.
static SchemaFactory newInstance(String schemaLanguage)
Получение нового экземпляра SchemaFactory, поддерживающего указанный язык схемы.
static SchemaFactory newInstance(String schemaLanguage, String factoryClassName, ClassLoader classLoader)
Получение нового экземпляра SchemaFactory по имени класса.
abstract Schema newSchema()
Создаёт специальный объект Schema.
Schema newSchema(File schema)
Парсит указанный File как схему и возвращает его как Schema.
Schema newSchema(URL schema)
Парсит указанный URL как схему и возвращает его как Schema.
Schema newSchema(Source schema)
Парсит указанный источник как схему и возвращает его как схему.
abstract Schema newSchema(Source[] schemas)
Парсит указанный(ые) источник(и) как схему и возвращает его как схему.
abstract void setErrorHandler(ErrorHandler errorHandler)
Устанавливает ErrorHandler для получения ошибок, возникших во время вызова метода newSchema.
void setFeature(String name, boolean value)
Устанавливает функцию для данного SchemaFactory, Schema, созданных этой фабрикой, и по расширению, Validator и ValidatorHandler, созданных этими Schema.
void setProperty(String name, Object object)
Устанавливает значение свойства.
abstract void setResourceResolver(LSResourceResolver resourceResolver)
Устанавливает LSResourceResolver для настройки разрешения ресурсов при парсинге схем.

Методы, унаследованные от класса java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Подробное описание конструкторов

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(String schemaLanguage, String factoryClassName, ClassLoader classLoader)

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
См. также:
  • newInstance(String schemaLanguage)

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(String, boolean)

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.
См. также:
  • getFeature(String)

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:
  • setProperty(String, Object)

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 implements ErrorHandler {
     public void fatalError( SAXParseException e ) throws SAXException {
         throw e;
     }
     public void error( SAXParseException e ) throws SAXException {
         throw e;
     }
     public void warning( SAXParseException e ) throws SAXException {
         // noop
     }
 }
 

Когда создается новый объект SchemaFactory, этот параметр изначально равен null. Этот параметр не будет унаследован Schemas, Validators или ValidatorHandlers, созданных из этого SchemaFactory.

Parameters:
errorHandler - Новый обработчик ошибок. Этот параметр может быть null.

getErrorHandler

public abstract ErrorHandler getErrorHandler()
Возвращает текущий обработчик ошибок ErrorHandler, установленный для этого SchemaFactory.
Returns:
Этот метод возвращает объект, последний установленный с помощью метода setErrorHandler(ErrorHandler), или null, если этот метод никогда не вызывался с момента создания этого SchemaFactory.
See Also:
  • setErrorHandler(ErrorHandler)

Установить разрешитель ресурсов

public abstract void setResourceResolver(LSResourceResolver resourceResolver)
Устанавливает LSResourceResolver для настройки разрешения ресурсов при разборе схем.

SchemaFactory использует LSResourceResolver при поиске внешних ресурсов во время разбора схем, хотя то, что именно представляет собой "поиск внешних ресурсов", зависит от каждого языка схем. Например, для W3C XML Schema это включает файлы <include> или <import>, и DTD, ссылающиеся на файлы схем, и т. д.

Приложения могут вызвать этот метод даже во время разбора Schema.

Если LSResourceResolver равен null, реализация будет вести себя так, как если бы был установлен следующий LSResourceResolver:

 class DumbDOMResourceResolver implements LSResourceResolver {
     public LSInput resolveResource(
         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.
См. также:
  • setErrorHandler(ErrorHandler)

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API