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, поскольку они буквально ничего не забыли там.