maven-jaxb2-plugin терпит неудачу с атрибутом версии 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}].

org.xml.sax.SAXParseException; systemId: file: /home/hasancansaral/workspace/company/domain/src/main/xsd/delivery.wsdl; номер строки: 2; номер столбца: 366; Должен присутствовать атрибут версии JAXB

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

Примечание: SOAP UI также проверяет схему.

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

1 ответ

Решение

TL;DR Ваш WSDL не верен / не подходит для XJC. Вам нужно будет настроить 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, поскольку они буквально ничего не забыли там.

Другие вопросы по тегам