Класс SchemaFactory
public abstract class SchemaFactory extends Object
Schema. Точка входа в API валидации. SchemaFactory — это компилятор схем. Он считывает внешние представления схем и подготавливает их для валидации.
Класс SchemaFactory не является потокобезопасным. Другими словами, приложение должно гарантировать, что в каждый момент времени объект SchemaFactory используется не более чем одним потоком. Реализациям рекомендуется помечать методы как synchronized, чтобы защитить себя от некорректных клиентов.
SchemaFactory не является реентерабельным. Пока выполняется вызов одного из методов newSchema, приложения не должны пытаться рекурсивно вызывать метод newSchema, даже из того же потока.
Язык схем
В этой спецификации URI пространства имён используется для обозначения языка схем. В следующей таблице показаны значения, определённые этой спецификацией.
Для соответствия спецификации реализация обязана поддерживать только W3C XML Schema 1.0. Однако, если она решит поддерживать другие перечисленные здесь языки схем, она должна соответствовать описанному в этой спецификации поведению для них.
Предполагается, что языки схем, не перечисленные здесь, будут вводить собственные URI для своего обозначения. Класс SchemaFactory способен во время выполнения находить другие реализации для других языков схем.
Обратите внимание, что XML DTD тесно связан с процессом разбора и существенно влияет на него, поэтому невозможно определить валидацию DTD как процесс, независимый от разбора. По этой причине данная спецификация не определяет семантику XML DTD. Это не запрещает разработчикам реализовывать её по своему усмотрению, но пользователей предупреждают, что любая валидация DTD, реализованная в этом интерфейсе, неизбежно отклоняется от семантики XML DTD, определённой в XML 1.0.
| значение | язык |
|---|---|
XMLConstants.W3C_XML_SCHEMA_NS_URI ("http://www.w3.org/2001/XMLSchema") | W3C XML Schema 1.0 |
XMLConstants.RELAXNG_NS_URI ("http://relaxng.org/ns/structure/1.0") | RELAX NG 1.0 |
- Начиная с:
- 1.5
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Конструктор для производных классов. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
abstract ErrorHandler |
getErrorHandler() |
Возвращает текущий ErrorHandler, установленный для этого SchemaFactory. |
boolean |
getFeature |
Получает значение флага функции. |
Object |
getProperty |
Получает значение свойства. |
abstract LSResourceResolver |
getResourceResolver() |
Возвращает текущий LSResourceResolver, установленный для этого SchemaFactory. |
abstract boolean |
isSchemaLanguageSupported |
Поддерживается ли указанная схема этим SchemaFactory? |
static SchemaFactory |
newDefaultInstance() |
Создаёт новый экземпляр встроенной системной реализации SchemaFactory по умолчанию. |
static SchemaFactory |
newInstance |
Получает новый экземпляр SchemaFactory, поддерживающий указанный язык схем. |
static SchemaFactory |
newInstance |
Получает новый экземпляр SchemaFactory по имени класса. |
abstract Schema |
newSchema() |
Создаёт специальный объект Schema. |
Schema |
newSchema |
Разбирает указанный File как схему и возвращает его в виде Schema. |
Schema |
newSchema |
Разбирает указанный URL как схему и возвращает его в виде Schema. |
Schema |
newSchema |
Разбирает указанный источник как схему и возвращает его в виде схемы. |
abstract Schema |
newSchema |
Разбирает указанные источники как схему и возвращает её в виде схемы. |
abstract void |
setErrorHandler |
Устанавливает ErrorHandler для получения ошибок, возникающих при вызове метода newSchema. |
void |
setFeature |
Устанавливает функцию для этого SchemaFactory, объектов Schema, созданных этой фабрикой, а также, как следствие, объектов Validator и ValidatorHandler, созданных этими объектами Schema. |
void |
setProperty |
Устанавливает значение свойства. |
abstract void |
setResourceResolver |
Устанавливает LSResourceResolver для настройки разрешения ресурсов при разборе схем. |
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создаёт и возвращает копию этого объекта. |
boolean |
equals |
Определяет, равен ли этот объект другому объекту. |
protected void |
finalize() |
Устарело, будет удалено: этот элемент API может быть удалён в будущей версии. Финализация устарела и будет удалена в одном из следующих выпусков. |
final Class |
getClass() |
Возвращает класс времени выполнения этого Object. |
int |
hashCode() |
Возвращает хеш-код этого объекта. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
String |
toString() |
Возвращает строковое представление объекта. |
final void |
wait() |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения определённого промежутка реального времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения определённого промежутка реального времени. |
Подробное описание конструкторов
SchemaFactory
protected SchemaFactory()
Конструктор ничего не делает.
Производные классы должны создавать объекты SchemaFactory, у которых есть null ErrorHandler и null LSResourceResolver.
Подробное описание методов
newDefaultInstance
public static SchemaFactory newDefaultInstance()
SchemaFactory, используемой по умолчанию в системе.- Требования к реализации:
- Встроенная реализация
SchemaFactory, используемая по умолчанию в системе, должна поддерживать только W3C XML Schema 1.0, но может поддерживать дополнительные языки схем. - Возвращает:
- Новый экземпляр встроенной реализации
SchemaFactory, используемой по умолчанию в системе. - Начиная с:
- 9
newInstance
public static SchemaFactory newInstance(String schemaLanguage)
SchemaFactory, поддерживающий указанный язык схем. Этот метод использует механизм поиска JAXP, чтобы определить и загрузить реализацию SchemaFactory, поддерживающую указанный язык схем. Совет по устранению неполадок:
См. Properties.load(java.io.InputStream), чтобы узнать, как именно анализируется файл свойств. В частности, двоеточия «:» в файле свойств необходимо экранировать, поэтому убедитесь, что URI языков схем в нем правильно экранированы. Например:
http\://www.w3.org/2001/XMLSchema=org.acme.foo.XSSchemaFactory
- Параметры:
-
schemaLanguage— указывает язык схем, который будет понимать возвращаемый SchemaFactory. Возможные значения см. в списке доступных языков схем. - Возвращает:
- Новый экземпляр
SchemaFactory - Исключения:
-
IllegalArgumentException— если реализация для этого языка схем недоступна. -
NullPointerException— если параметрschemaLanguageравен null. -
SchemaFactoryConfigurationError— если возникла ошибка конфигурации. - См. также:
newInstance
public static SchemaFactory newInstance(String schemaLanguage, String factoryClassName, ClassLoader classLoader)
SchemaFactory по имени класса. SchemaFactory возвращается, если указанное имя класса фабрики соответствует указанному языку схем. Эта функция полезна, когда в пути к классам имеется несколько поставщиков. Она дает приложению больше контроля, поскольку позволяет указать, какой поставщик следует загрузить. Совет по устранению неполадок
Установка системного свойства jaxp.debug приведет к тому, что этот метод будет выводить много отладочных сообщений в System.err о выполняемых действиях и местах поиска.
Если возникли проблемы, попробуйте выполнить следующее:
java -Djaxp.debug=1 YourProgram ....
- Параметры:
-
schemaLanguage— указывает язык схем, который будет понимать возвращаемыйSchemaFactory. Возможные значения см. в списке доступных языков схем. -
factoryClassName— полное имя класса фабрики, предоставляющего реализациюjavax.xml.validation.SchemaFactory. -
classLoader—ClassLoader, используемый для загрузки класса фабрики. Еслиnull, для загрузки класса фабрики используется контекстный ClassLoader текущегоThread. - Возвращает:
- Новый экземпляр
SchemaFactory - Исключения:
-
IllegalArgumentException— еслиfactoryClassNameравенnullлибо класс фабрики не удается загрузить или создать, или он не поддерживает язык схем, указанный в параметреschemLanguage. -
NullPointerException— если параметрschemaLanguageравен null. - Начиная с:
- 1.6
- См. также:
isSchemaLanguageSupported
public abstract boolean isSchemaLanguageSupported(String schemaLanguage)
SchemaFactory?- Параметры:
-
schemaLanguage— указывает язык схем, который будет понимать возвращаемыйSchemaFactory.schemaLanguageдолжен указывать допустимый язык схем. - Возвращает:
-
true, еслиSchemaFactoryподдерживаетschemaLanguage, иначеfalse. - Исключения:
-
NullPointerException— еслиschemaLanguageравенnull. -
IllegalArgumentException— еслиschemaLanguage.length() == 0илиschemaLanguageне указывает допустимый язык схем.
getFeature
public boolean getFeature(String name) throws SAXNotRecognizedException, SAXNotSupportedException
Имя функции — это любой URI с полным именем. Может случиться так, что SchemaFactory распознает имя функции, но временно не сможет вернуть ее значение.
Разработчики могут свободно (и даже поощряются) создавать собственные функции, используя имена на основе собственных URI.
- Параметры:
-
name— имя функции, представляющее собой URI с полным именем и не равное null. - Возвращает:
- Текущее значение функции (true или false).
- Исключения:
-
SAXNotRecognizedException— если значение функции нельзя назначить или получить. -
SAXNotSupportedException— когдаSchemaFactoryраспознает имя функции, но в данный момент не может определить ее значение. -
NullPointerException— еслиnameравенnull. - См. также:
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 с полным именем и не равное null. -
value— запрашиваемое значение функции (true или false). - Исключения:
-
SAXNotRecognizedException— если значение функции нельзя назначить или получить. -
SAXNotSupportedException— когдаSchemaFactoryраспознает имя функции, но не может задать запрашиваемое значение. -
NullPointerException— еслиnameравенnull. - См. также:
setProperty
public void setProperty(String name, Object object) throws SAXNotRecognizedException, SAXNotSupportedException
Имя свойства — это любой URI с полным именем. Может случиться так, что SchemaFactory распознает имя свойства, но не сможет изменить текущее значение.
Все реализации, поддерживающие JAXP 1.5 или более позднюю версию, обязаны поддерживать свойства XMLConstants.ACCESS_EXTERNAL_DTD и XMLConstants.ACCESS_EXTERNAL_SCHEMA.
-
Доступ к внешним DTD в файлах схем ограничивается протоколами, указанными в свойстве
XMLConstants.ACCESS_EXTERNAL_DTD. Если доступ запрещен из-за ограничений этого свойства при создании новой схемы, методnewSchema(Source),newSchema(File),newSchema(URL)илиnewSchema(Source[])выброситSAXException.Доступ к внешним DTD в исходных XML-файлах ограничивается протоколами, указанными в свойстве
XMLConstants.ACCESS_EXTERNAL_DTD. Если доступ запрещен из-за ограничений этого свойства во время проверки, методValidator.validate(Source)илиValidator.validate(Source, Result)выброситSAXException.Доступ к внешним ссылкам, указанным атрибутом schemaLocation, ограничивается протоколами, указанными в свойстве
XMLConstants.ACCESS_EXTERNAL_SCHEMA. Если доступ запрещен из-за ограничений этого свойства во время проверки, методValidator.validate(Source)илиValidator.validate(Source, Result)выброситSAXException.Доступ к внешним ссылкам, указанным элементами Import и Include, ограничивается протоколами, указанными в свойстве
XMLConstants.ACCESS_EXTERNAL_SCHEMA. Если доступ запрещен из-за ограничений этого свойства при создании новой схемы, методnewSchema(Source),newSchema(File),newSchema(URL)илиnewSchema(Source[])выброситSAXException.
- Параметры:
-
name— имя свойства, представляющее собой URI с полным именем и не равное null. -
object— запрашиваемое значение свойства. - Исключения:
-
SAXNotRecognizedException— если значение свойства нельзя назначить или получить. -
SAXNotSupportedException— когдаSchemaFactoryраспознает имя свойства, но не может задать запрашиваемое значение. -
NullPointerException— еслиnameравенnull.
getProperty
public Object getProperty(String name) throws SAXNotRecognizedException, SAXNotSupportedException
Имя свойства — это любой URI с полным именем. Может случиться так, что SchemaFactory распознает имя свойства, но временно не сможет вернуть его значение.
SchemaFactory не обязаны распознавать какие-либо конкретные имена свойств.
Разработчики могут свободно (и даже поощряются) создавать собственные свойства, используя имена на основе собственных URI.
- Параметры:
-
name— имя свойства, представляющее собой URI с полным именем и не равное null. - Возвращает:
- Текущее значение свойства.
- Исключения:
-
SAXNotRecognizedException— если значение свойства нельзя назначить или получить. -
SAXNotSupportedException— когда XMLReader распознает имя свойства, но в данный момент не может определить его значение. -
NullPointerException— еслиnameравенnull. - См. также:
setErrorHandler
public abstract void setErrorHandler(ErrorHandler errorHandler)
ErrorHandler, которому будут передаваться ошибки, возникающие при вызове метода newSchema. Обработчик ошибок можно использовать для настройки процесса обработки ошибок при разборе схемы. Если задан ErrorHandler, ошибки, обнаруженные при разборе схем, сначала будут передаваться в ErrorHandler.
Обработчик ошибок может немедленно прервать разбор схемы, выбросив из обработчика SAXException. Например, он может вывести ошибку на экран и попытаться продолжить обработку, нормально вернув управление из ErrorHandler.
Если из ErrorHandler выбрасывается любой Throwable (или экземпляр его производного класса), вызывающий метод newSchema получит тот же объект Throwable.
SchemaFactory не разрешается выбрасывать SAXException, предварительно не сообщив о ней обработчику ErrorHandler.
Приложения могут вызывать этот метод даже во время разбора Schema.
Если ErrorHandler равен null, реализация будет вести себя так, как если бы был задан следующий ErrorHandler:
class DraconianErrorHandler implementsErrorHandler{ public void fatalError(SAXParseExceptione ) throwsSAXException{ throw e; } public void error(SAXParseExceptione ) throwsSAXException{ throw e; } public void warning(SAXParseExceptione ) throwsSAXException{ // noop } }
При создании нового объекта SchemaFactory это поле изначально имеет значение null. Это поле НЕ будет наследоваться объектами Schema, Validator или ValidatorHandler, создаваемыми этой SchemaFactory.
- Параметры:
-
errorHandler— новый обработчик ошибок, который нужно задать. Этот параметр может быть равенnull.
getErrorHandler
public abstract ErrorHandler getErrorHandler()
ErrorHandler, заданный для этой SchemaFactory.- Возвращает:
- Этот метод возвращает объект, который был последним задан методом
setErrorHandler(ErrorHandler), или null, если этот метод ни разу не вызывался с момента создания этойSchemaFactory. - См. также:
setResourceResolver
public abstract void setResourceResolver(LSResourceResolver resourceResolver)
LSResourceResolver для настройки разрешения ресурсов при разборе схем. SchemaFactory использует LSResourceResolver, когда необходимо найти внешние ресурсы при разборе схем; при этом конкретное определение «поиска внешних ресурсов» зависит от языка схем. Например, для W3C XML Schema к ним относятся файлы, которые <include>ируются или <import>ируются, а также DTD, на которые ссылаются файлы схем, и т. д.
Приложения могут вызывать этот метод даже во время разбора Schema.
Если LSResourceResolver равен null, реализация будет вести себя так, как если бы был задан следующий LSResourceResolver:
class DumbDOMResourceResolver implementsLSResourceResolver{ publicLSInputresolveResource( String publicId, String systemId, String baseURI) { return null; // always return null } }
Если LSResourceResolver выбрасывает RuntimeException (или экземпляр его производного класса), SchemaFactory прервет разбор, а вызывающий метод newSchema получит тот же объект RuntimeException.
При создании нового объекта SchemaFactory это поле изначально имеет значение null. Это поле НЕ будет наследоваться объектами Schema, Validator или ValidatorHandler, создаваемыми этой SchemaFactory.
- Параметры:
-
resourceResolver— новый обработчик разрешения ресурсов, который нужно задать. Этот параметр может быть равен null.
getResourceResolver
public abstract LSResourceResolver getResourceResolver()
LSResourceResolver, заданный для этой SchemaFactory.- Возвращает:
- Этот метод возвращает объект, который был последним задан методом
setResourceResolver(LSResourceResolver), или null, если этот метод ни разу не вызывался с момента создания этойSchemaFactory. - См. также:
newSchema
public Schema newSchema(Source schema) throws SAXException
Это вспомогательный метод для newSchema(Source[] schemas).
- Параметры:
-
schema— источник, представляющий схему. - Возвращает:
- Новая
Schema, полученная при разбореschema. - Исключения:
-
SAXException— если во время разбора возникла ошибка SAX. -
NullPointerException— еслиschemaравен null.
newSchema
public Schema newSchema(File schema) throws SAXException
File как схему и возвращает его в виде Schema. Это вспомогательный метод для newSchema(Source schema).
- Параметры:
-
schema— файл, представляющий схему. - Возвращает:
- Новая
Schema, полученная при разбореschema. - Исключения:
-
SAXException— если во время разбора возникла ошибка SAX. -
NullPointerException— еслиschemaравен null.
newSchema
public Schema newSchema(URL schema) throws SAXException
URL как схему и возвращает его в виде Schema. Это вспомогательный метод для newSchema(Source schema).
- Параметры:
-
schema—URL, представляющий схему. - Возвращает:
- Новая
Schema, полученная при разбореschema. - Исключения:
-
SAXException— если во время разбора возникла ошибка SAX. -
NullPointerException— еслиschemaравен null.
newSchema
public abstract Schema newSchema(Source[] schemas) throws SAXException
Вызываемый метод прочитает все Source и объединит их в одну схему. Точная семантика объединения зависит от языка схем, для которого создан этот объект SchemaFactory.
Если задан ErrorHandler, вызываемый метод сообщит обработчику обо всех ошибках, обнаруженных в источниках. Если обработчик выбросит исключение, компиляция схемы будет прервана, а из этого метода будет выброшено то же исключение. Кроме того, после сообщения об ошибке обработчику вызываемый метод вправе прервать дальнейшую обработку, выбросив ее. Если обработчик ошибок не задан, вызываемый метод выбросит первую обнаруженную в источниках ошибку.
W3C XML Schema 1.0
Полученная схема содержит компоненты из указанных источников. Тот же результат можно было бы получить, если бы все эти источники были импортированы с соответствующими значениями schemaLocation и namespace в один документ схемы с другим targetNamespace и без собственных компонентов, при условии, что элементы import были бы указаны в том же порядке, что и источники. В разделе 4.2.3 рекомендации XML Schema описаны варианты, доступные процессорам в этом отношении. Хотя процессор должен одинаково обрабатывать источники схем JAXP и импорты XML Schema, поведение разных JAXP-совместимых анализаторов может различаться; в частности, анализаторы могут игнорировать все <import> для заданного пространства имен, кроме первого, независимо от сведений, указанных в schemaLocation.
Если в разобранном наборе схем имеются ошибки, описанные в разделе 5.1 спецификации XML Schema, об этих ошибках необходимо сообщить обработчику ErrorHandler.
RELAX NG
Для RELAX NG этот метод должен выбрасывать UnsupportedOperationException, если schemas.length!=1.
- Параметры:
-
schemas— входные данные для разбора.SchemaFactoryобязан распознаватьSAXSource,StreamSource,StAXSourceиDOMSource. Входные схемы должны быть XML-документами или XML-элементами и не должны быть равны null. Для обеспечения обратной совместимости результат передачи чего-либо, кроме документа или элемента, зависит от реализации. Реализации должны либо распознавать и обрабатывать входные данные, либо выбрасывать IllegalArgumentException. - Возвращает:
- Всегда возвращает ненулевой допустимый объект
Schema. Обратите внимание: если была зарегистрирована ошибка, нет гарантии, что возвращаемый объектSchemaбудет иметь смысл. - Исключения:
-
SAXException— если при обработке указанных входных данных обнаружена ошибка. Если заданErrorHandler, ошибки сначала сообщаются ему. См.setErrorHandler(ErrorHandler). -
NullPointerException— если сам параметрschemasравен null или любой элемент массива равен null. -
IllegalArgumentException— если какой-либо элемент массива не распознается этим методом. -
UnsupportedOperationException— если язык схем не поддерживает эту операцию.
newSchema
public abstract Schema newSchema() throws SAXException
Schema. Точная семантика возвращаемого объекта Schema зависит от языка схем, для которого создан этот SchemaFactory.
Кроме того, реализации могут использовать свойства или функции, специфичные для реализации, чтобы изменить семантику этого метода.
Разработчикам реализаций и пользователям следует уделить особое внимание тому, как функции, заданные для этого SchemaFactory, обрабатываются этим специальным объектом Schema. В некоторых случаях, например, когда SchemaFactory и класс, фактически загружающий схему, относятся к разным реализациям, функции SchemaFactory могут не наследоваться автоматически. Разработчикам следует убедиться, что такие функции, как безопасная обработка, явно заданы в обоих местах.
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.