Spec-Zone.ru › OpenJDK 25

Класс 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 для настройки разрешения ресурсов при разборе схем.

Методы, объявленные в классе 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), чтобы узнать, как именно анализируется файл свойств. В частности, в файле свойств необходимо экранировать двоеточия «:», поэтому убедитесь, что URI языков схем в нем правильно экранированы. Например:

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 и, как следствие, создаваемых этими 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.
См. также:
  • 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. Если из-за ограничений этого свойства доступ запрещен при создании новой схемы, метод 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.
См. также:
  • 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. Это поле НЕ будет унаследовано объектами Schema, Validator или ValidatorHandler, созданными этой SchemaFactory.

Параметры:
errorHandler - Новый обработчик ошибок. Значение этого параметра может быть null.

getErrorHandler

public abstract ErrorHandler getErrorHandler()
Получает текущий ErrorHandler, заданный для этой SchemaFactory.
Возвращает:
Этот метод возвращает объект, последний раз заданный методом setErrorHandler(ErrorHandler), или null, если этот метод ни разу не вызывался с момента создания этой SchemaFactory.
См. также:
  • setErrorHandler(ErrorHandler)

setResourceResolver

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.

getResourceResolver

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.
Возвращает:
Всегда возвращает ненулевой допустимый объект 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 - если эта операция поддерживается, но по какой-либо причине завершилась неудачно.

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, обзоры концепций, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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

Spec-Zone.ru

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