[英]maven-jaxb2-plugin fails with JAXB version attribute must be present
我对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:文件:/home/hasancansaral/workspace/company/domain/src/main/xsd/delivery.wsdl; lineNumber:2; columnNumber:366; 必须存在JAXB版本属性
如果我通过IntelliJ IDEA运行插件或执行简单的mvn clean jax2b:generate
,则没有任何区别。 但是,可以在这里找到的模式成功完成该操作,因此我怀疑我的wsdl模式实际上是格式错误的,暂时无法公开,但是可以通过消息提供(我知道这没有太大帮助)公开发布,但如果问题出在架构中,我将在此处发布相关问题部分)。
注意: SOAP UI也会验证模式。
注意2: jax2b-maven-plugin
和maven-jax2b-plugin
都存在相同的错误。
TL; DR您的WSDL不正确/不适合XJC。 您将需要strup JAXB定制或将xmlns:jxb="http://java.sun.com/xml/ns/jaxb" jxb:version="2.1"
到根元素。
问题在于您的WSDL在所包含的模式中包含许多JAXB定制。 这是一个坏主意。 JAXB定制是特定于供应商的东西,无论谁将其放入WSDL(应该是与供应商无关的规范)中,都做不到正确的事情。
现在的事情是,当您具有内联JAXB定制时,JAXB模式编译器XJC会遇到一些麻烦。 就像根元素上的jaxb:version
属性一样。 在这种情况下,这是丢失的。 它存在于schema
元素上,但不在根wsdl:definitions
元素上。 如果添加它 ,编译将成功。
这与JAXB插件无关。 如果尝试使用xjc -wsdl delivery.wsdl
,则会收到相同的错误。
可能有一些魔术选项可以抑制此问题,但是很难弄清楚。 因此,我建议修补WSDL。 创建一个补丁并将其在预代码生成步骤中应用于WSDL。 我个人将从WSDL中剥离所有JAXB定制,因为它们实际上什么也没忘记。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.