Spec-Zone.ru › OpenJDK 17

Класс 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
Since:
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)
Поддерживает ли эта фабрика указанную схему?
static SchemaFactory newDefaultInstance()
Создаёт новую инстанцию встроенной реализации по умолчанию.
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), чтобы узнать, как именно анализируется файл свойств. В частности, двоеточия ':' нужно экранировать в файле свойств, поэтому убедитесь, что 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 объектов, созданных этой фабрикой, и, по умолчанию, 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, реализация будет вести себя так, как если бы был установлен следующий обработчик ошибок:

 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.

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

getErrorHandler

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

setResourceResolver

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

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

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

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

 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.

Parameters:
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> для данного namespace, независимо от информации, предоставленной в schemaLocation.

Если анализируемый набор схем содержит ошибку(и), как указано в разделе 5.1 спецификации XML Schema, то об ошибке необходимо сообщить ErrorHandler.

RELAX NG

Для RELAX NG этот метод должен выбросить UnsupportedOperationException, если schemas.length!=1.

Параметры:
schemas - входные данные для парсинга. SchemaFactory требуется для распознавания SAXSource, StreamSource, StAXSource и DOMSource. Входные схемы должны быть XML-документами или XML-элементами и не должны быть null. Для обратной совместимости результаты передачи чего-либо, кроме документа или элемента, зависят от реализации. Реализации должны либо распознать и обработать входные данные, либо выбросить IllegalArgumentException.
Возвращает:
Всегда возвращает не-null допустимый объект Schema. Обратите внимание, что когда об ошибке сообщено, нет гарантии, что возвращаемый объект Schema имеет смысл.
Исключения:
SAXException - Если при обработке указанных входных данных обнаружена ошибка. Когда установлен ErrorHandler, ошибки сообщаются туда в первую очередь. См. setErrorHandler(ErrorHandler).
NullPointerException - Если сам параметр schemas или любой элемент в массиве равен null.
IllegalArgumentException - Если любой элемент в массиве не распознаётся этим методом.
UnsupportedOperationException - Если язык схемы не поддерживает эту операцию.

newSchema

public abstract Schema newSchema() throws SAXException
Создаёт специальный объект Schema.

Точные семантики возвращаемого объекта Schema зависят от языка схемы, для которого создан этот объект SchemaFactory.

Кроме того, реализации разрешается использовать специфичные для реализации свойства/функции для изменения семантики этого метода.

Разработчики и реализаторы должны уделить особое внимание тому, как функции, заданные в этом объекте SchemaFactory, обрабатываются этим специальным объектом Schema. В некоторых случаях, например, когда SchemaFactory и класс, фактически загружающий схему, происходят из разных реализаций, может не быть возможности для наследования функций SchemaFactory автоматически. Разработчики должны убедиться, что функции, такие как безопасная обработка, явным образом заданы в обоих местах.

W3C XML Schema 1.0

Для XML Schema, этот метод создаёт объект Schema, который выполняет валидацию, используя подсказки расположения, указанные в документах.

Возвращаемый объект Schema предполагает, что если документы ссылаются на один и тот же URL в подсказках расположения схемы, они всегда будут разрешаться в один и тот же документ схемы. Это предположение позволяет реализациям повторно использовать результаты парсинга документов схемы, чтобы несколько валидаций по одной и той же схеме выполнялись быстрее.

Обратите внимание, что использование подсказок расположения схем вводит уязвимость к атакам с отказом в обслуживании.

RELAX NG

RELAX NG не поддерживает эту операцию.

Возвращает:
Всегда возвращает не-null допустимый объект Schema.
Исключения:
UnsupportedOperationException - Если эта операция не поддерживается вызывающим методом.
SAXException - Если эта операция поддерживается, но по какой-то причине не удалась.

© 1993, 2021, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/17/docs/api/java.xml/javax/xml/validation/SchemaFactory.html

Spec-Zone.ru

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