maven-jaxb2-plugin失败,JAXB版本属性必须存在

Has*_*ral 5 jaxb maven-plugin maven maven-jaxb2-plugin jaxb2-maven-plugin

我有以下配置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>
Run Code Online (Sandbox Code Playgroud)

它失败了:

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

org.xml.sax.SAXParseException; systemId:file:/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-pluginmaven-jax2b-plugin.

lex*_*ore 9

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.我个人会从WSDL中删除所有JAXB自定义,因为他们忘记了什么.