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