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 ответ:
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 вообще. Если вы попробуете
Возможно, есть какой-то волшебный способ подавить эту проблему, но это трудно понять. Поэтому я бы предложил залатать WSDL. Создать а исправьте и примените его к WSDL на этапе предварительной генерации кода. Я лично снял бы все настройки JAXB с WSDL, поскольку они там буквально ничего не забыли.xjc -wsdl delivery.wsdl
, то получите ту же ошибку.