maven-jaxb2-плагин терпит неудачу с атрибутом версии JAXB должен присутствовать


У меня есть следующая конфигурация для maven-jaxb2-plugin:

            <!-- https://mvnrepository.com/artifact/org.jvnet.jaxb2.maven2/maven-jaxb2-plugin -->
            <plugin>
                <groupId>org.jvnet.jaxb2.maven2</groupId>
                <artifactId>maven-jaxb2-plugin</artifactId>
                <version>0.13.2</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <strict>false</strict>
                    <schemaLanguage>WSDL</schemaLanguage>
                    <generatePackage>com.mycompany.project.domain.wsdl</generatePackage>
                    <schemas>
                        <schema>
                            <url>url or file</url>
                        </schema>
                    </schemas>
                </configuration>
            </plugin>

И он терпит неудачу с:

[ERROR] Error while parsing schema(s).Location [ file:/home/hasancansaral/workspace/company/domain/src/main/xsd/delivery.wsdl{2,366}].

Орг.XML.саксофон.SAXParseException; systemId: файл:/главная/hasancansaral/рабочее место/компания/домен/src/главная/xsd и доставки.wsdl; lineNumber: 2; columnNumber: 366; атрибут версии JAXB должен присутствовать

Это не имеет значения, если я запускаю плагин через IntelliJ IDEA или делаю простой mvn clean jax2b:generate. Однако действие успешно выполняется со схемой, которую можно найти здесь , таким образом, я подозреваю, что моя схема wsdl на самом деле искажена, что я не могу сделать публичным на данный момент, но могу предоставить через сообщения (я знаю, что это не очень помогает публике, но если проблема находится в схеме, я опубликую соответствующую проблемную часть здесь).

Примечание: Мыло пользовательского интерфейса проверит схему, а также.

Примечание 2: Одна и та же ошибка присутствует как с jax2b-maven-plugin, так и с maven-jax2b-plugin.

1 4

1 ответ:

TL; DR Ваш WSDL не является правильным/подходящим для XJC. Вам потребуется настроить strup JAXB или добавить xmlns:jxb="http://java.sun.com/xml/ns/jaxb" jxb:version="2.1" в корневой элемент.

Проблема заключается в том, что ваш WSDL содержит множество настроек JAXB во включенной схеме. Это плохая идея. Настройка JAXB-это специфичный для поставщика материал, тот, кто поместил их в WSDL (который должен быть нейтральным к поставщику), не сделал правильную вещь.

Теперь дело в том, что XJC, компиляция схемы JAXB ожидает определенных колоколов и свистит, когда у вас есть встроенные настройки JAXB. Например, атрибут jaxb:version в корневом элементе. Который в данном случае отсутствует. Он присутствует в элементе schema, но не в корневом элементе wsdl:definitions. Если Вы добавите его , компиляция завершится успешно.

Это не имеет никакого отношения к плагинам JAXB вообще. Если вы попробуете xjc -wsdl delivery.wsdl, то получите ту же ошибку.

Возможно, есть какой-то волшебный способ подавить эту проблему, но это трудно понять. Поэтому я бы предложил залатать WSDL. Создать а исправьте и примените его к WSDL на этапе предварительной генерации кода. Я лично снял бы все настройки JAXB с WSDL, поскольку они там буквально ничего не забыли.