Проверка допустимости XML-против xsd в 1.1 с Xerces в Java
Я установил Xerces через Maven:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jdom</groupId>
<artifactId>jdom</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>2.11.0</version>
</dependency>
</dependencies>
Затем я попробовал код, приведенный в этом примере изXerces FAQ , чтобы проверить XML-файл на соответствие схеме в версии 1.1. Вот мой код:
private static void validateFile(File xmlFile, File xsdFile) throws SAXException, IOException
{
// 1. Lookup a factory for the W3C XML Schema language
SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/XML/XMLSchema/v1.1");
// 2. Compile the schema.
File schemaLocation = xsdFile;
Schema schema = factory.newSchema(schemaLocation);
// 3. Get a validator from the schema.
Validator validator = schema.newValidator();
// 4. Parse the document you want to check.
Source source = new StreamSource(xmlFile);
// 5. Check the document
try
{
validator.validate(source);
System.out.println(xmlFile.getName() + " is valid.");
}
catch (SAXException ex)
{
System.out.println(xmlFile.getName() + " is not valid because ");
System.out.println(ex.getMessage());
}
}
Код выдает только это исключение:
java.lang.IllegalArgumentException: No SchemaFactory that implements the schema language specified by: http://www.w3.org/XML/XMLSchema/v1.1 could be loaded
at javax.xml.validation.SchemaFactory.newInstance(SchemaFactory.java:204)
at example.xml.XSDValidator.validateFile(XSDValidator.java:65)
Похоже, мне не удалось правильно настроить/установить Xerces. Пожалуйста, помогите мне получить эту работу, XML-файлы заставляют меня использовать схему в 1.1, у меня есть нормальный валидатор для 1.0 работает, но у меня есть огромные проблемы с этот. Я ценю каждый намек!
3 ответов:
Похоже, что вам нужна версия Xerces2 Java 2.11.0 (XML Schema 1.1) (Beta), которой нет в репозитории maven. Вы можете скачать его с веб-сайтаXerces и установить в локальный репозиторий maven:
mvn install:install-file -Dfile=xercesImpl.jar -DgroupId=xerces -DartifactId=xercesImpl -Dversion=2.11.0.beta -Dpackaging=jarЗатем вы сможете включить его в зависимости проекта Maven:<dependency> <groupId>xerces</groupId> <artifactId>xercesImpl</artifactId> <version>2.11.0.beta</version> </dependency>
Я добавлю еще один ответ, потому что для меня эта зависимость не сработала (та же ошибка, что описана OP):
<dependency> <groupId>xerces</groupId> <artifactId>xercesImpl</artifactId> <version>2.11.0</version> </dependency>I quess 2.11.0 должен быть новее, чем 2.11.0.бета, но похоже, что xsd1. 1 не поддерживается в этой версии !
Вместо этого только следующая зависимость приводит к рабочей проверке XSD1. 1 для меня:
<dependency> <groupId>org.opengis.cite.xerces</groupId> <artifactId>xercesImpl-xsd11</artifactId> <version>2.12-beta-r1667115</version> </dependency>(найдено в этом потоке SO: Как проверить XML против XSD 1.1 в Java?)
Я думаю, что теперь они добавили версию 2.11 в maven. Следующая зависимость в Maven работает из коробки:
<dependency> <groupId>xerces</groupId> <artifactId>xercesImpl</artifactId> <version>2.11.0</version> </dependency>
Comments