Проверка 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>