从 WSDL 使用 jaxb2-maven-plugin 生成类

新手上路,请多包涵

我在配置 jaxb2-maven-plugin 以从 WSDL 和多个 XSD 文件生成 Java 类时遇到问题,这些文件都存在于同一标准目录中 src/main/xsd

如何使用带有内联 XSD 的 jaxb2 maven 插件? 相关的只是因为答案正确地建议在插件配置中使用 wsdl 参数,但这个问题实际上与内联 XSD 有关,而我的 XSD 是外部的。

此处 列出了插件目标参数。

我的插件配置是:

 <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>jaxb2-maven-plugin</artifactId>
    <version>1.5</version>
    <executions>
        <execution>
            <id>xjc</id>
            <goals>
                <goal>xjc</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <packageName>com.x.y.model</packageName>
        <wsdl>true</wsdl>
    </configuration>
</plugin>

我正在使用 mvn -X clean jaxb2:xjc 进行测试,但插件忽略了 .wsdl 如调试输出所示

[DEBUG] accept false for file c:\projects\foo\src\main\xsd\service.wsdl
[DEBUG] accept true for file c:\projects\foo\src\main\xsd\datatypes.xsd
[DEBUG] accept true for file c:\projects\foo\src\main\xsd\more-datatypes.xsd

原文由 andyb 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

通过检查传递给 JAXB XJC 的参数的 Maven 调试输出(以及一些试验和错误),我发现我需要为插件提供另外 2 个配置参数。

这将停止插件扫描 XSD 文件并仅使用 .wsdl 作为源。例如,XSD 文件作为 <xsd:include schemaLocation="datatypes.xsd" /> 指令包含在 WSDL 中,这些文件在本地解析,导致 WSDL 和 XSD 中的所有类型都生成为 Java 类。

对我有用的配置部分是:

 <configuration>
    <packageName>com.x.y.model</packageName>
    <wsdl>true</wsdl>
    <xmlschema>false</xmlschema>
    <schemaFiles>service.wsdl</schemaFiles>
</configuration>

没有 <xmlschema>false</xmlschema> Maven 错误:

org.apache.maven.lifecycle.LifecycleExecutionException:无法在项目 foo 上执行目标 org.codehaus.mojo:jaxb2-maven-plugin:1.5:xjc (default-cli):无法处理架构:/c:/projects/foo /src/main/xsd/service.wsdl

原文由 andyb 发布,翻译遵循 CC BY-SA 3.0 许可协议

我对 jaxb2-maven-plugin 2.5.0 有这个问题。这是我的解决方案:

 <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>jaxb2-maven-plugin</artifactId>
    <version>2.5.0</version>
    <executions>
        <execution>
            <phase>generate-resources</phase>
            <id>xjc</id>
            <goals>
                <goal>xjc</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <sourceType>wsdl</sourceType>
        <sources>
            <source>${project.basedir}/src/main/resources/wsdl</source>
        </sources>
        <outputDirectory>${project.basedir}/src/main/java</outputDirectory>
        <clearOutputDir>false</clearOutputDir>
        <packageName>com.project.generated</packageName>
        <noPackageLevelAnnotations>true</noPackageLevelAnnotations>
    </configuration>
</plugin>

原文由 ordonezalex 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题