Spec-Zone.ru › OpenJDK 8

Класс 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.

значение язык
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 SchemaFactory()

Конструктор для производных классов.

Методы

Модификатор и тип Метод и описание
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 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(Source schema)

Парсит указанный источник как схему и возвращает её как схему.

abstract Schema newSchema(Source[] schemas)

Парсит указанный(ые) источник(и) как схему и возвращает её как схему.

Schema newSchema(URL schema)

Парсит указанный URL как схему и возвращает её как Schema.

abstract void setErrorHandler(ErrorHandler errorHandler)

Устанавливает ErrorHandler для получения ошибок, возникших во время вызова метода newSchema.

void setFeature(String name, boolean value)

Устанавливает функцию для этого SchemaFactory, созданных этой фабрикой Schema, и, как следствие, созданных этими Schema Validator и ValidatorHandler.

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.

Методы

newInstance

public static SchemaFactory newInstance(String schemaLanguage)

Поиск реализации SchemaFactory, поддерживающей указанный язык схемы и её возвращение.

Для поиска объекта SchemaFactory для заданного языка схемы, этот метод ищет в следующих местах в следующем порядке, где «загрузчик классов» относится к контекстному загрузчику классов:

  1. Если присутствует системная переменная "javax.xml.validation.SchemaFactory:schemaLanguage" (где schemaLanguage — параметр этого метода), то её значение считывается как имя класса. Метод попытается создать новый экземпляр этого класса, используя загрузчик классов, и вернёт его, если создание успешно.
  2. $java.home/lib/jaxp.properties считывается, и ищется значение, связанное с системной переменной, указанной выше. Если присутствует, значение обрабатывается так же, как и выше.
  3. Используются средства загрузки поставщиков услуг, определённые классом ServiceLoader, для поиска и загрузки реализации сервиса, используя стандартный механизм загрузки: средство загрузки поставщика услуг будет использовать текущий контекстный загрузчик классов потока для попытки загрузки сервиса. Если контекстный загрузчик классов равен null, будет использован системный загрузчик классов.
    Каждый потенциальный поставщик услуг должен реализовать метод isSchemaLanguageSupported(String schemaLanguage).
    Первый найденный поставщик услуг, поддерживающий указанный язык схемы, возвращается.
    В случае ServiceConfigurationError будет брошено исключение SchemaFactoryConfigurationError.
  4. Платформенный SchemaFactory находится специфическим для реализации способом. Должен быть платформный SchemaFactory для W3C XML Schema.

Если все попытки окажутся неудачными, будет брошено исключение IllegalArgumentException.

Совет по устранению неполадок:

См. 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.

Если любой Throwable (или экземпляры его производных классов) брошены из ErrorHandler, вызывающий метод 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.

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>d или <import>ed, и 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.

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

getResourceResolver

public abstract LSResourceResolver getResourceResolver()

Получает текущий LSResourceResolver, установленный для этого SchemaFactory.

Returns:
Этот метод возвращает объект, который был последним установлен с помощью метода setResourceResolver(LSResourceResolver), или null, если этот метод никогда не вызывался с момента создания этого SchemaFactory.
See Also:
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 не поддерживает эту операцию.

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

© 1993, 2020, 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.

Spec-Zone.ru

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