使用 WSDL 中的 jaxb2-maven-plugin 生成类

2022-09-02 02:39:41

我在配置中无法从WSDL生成Java类以及都存在于同一标准目录中的多个XSD文件。jaxb2-maven-pluginsrc/main/xsd

如何将jaxb2 maven插件与内联XSD一起使用?仅与答案相关,因为答案正确建议使用插件配置中的参数,但该问题确实与内联XSD有关,而我的XSD是外部的。wsdl

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

我的插件配置是:

<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

答案 1

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

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

对我有用的配置部分是:

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

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

org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.codehaus.mojo:jaxb2-maven-plugin:1.5:xjc (default-cli) on project foo: Can not process schema: /c:/projects/foo/src/main/xsd/service.wsdl


答案 2

如果您正在生成wsdl和xsd,请尝试放入不同的执行配置:它可能不具有相同的配置,或者插件在第二次执行时不会成功运行,因为它会基于此变量缓存执行。我建议这样做,例如schemaDirectory

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>jaxb2-maven-plugin</artifactId>
            <version>1.6</version>
            <executions>
                <execution>
                    <id>generate-sri-facturas</id>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>xjc</goal> 
                    </goals> 
                    <configuration> 
                        <outputDirectory>target/generated-sources/sri</outputDirectory>
                        <packageName>${commonsource.packageName}</packageName> 
                        <schemaDirectory>src/main/resources/schema/xsd</schemaDirectory>
                        <schemaFiles>factura_v1.1.0.xsd</schemaFiles>
                    </configuration> 
                </execution> 
                <execution>
                    <id>generate-sri-autorizacion-comprobantes</id>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>xjc</goal> 
                    </goals> 
                    <configuration> 
                        <outputDirectory>target/generated-sources/sri/autorizacion</outputDirectory>
                        <packageName>${commonsource.packageName}.autorizacion</packageName>
                        <wsdl>true</wsdl>
                        <xmlschema>false</xmlschema>
                        <schemaDirectory>src/main/resources/schema/wsdl</schemaDirectory>
                        <schemaFiles>AutorizacionComprobantes.wsdl</schemaFiles>
                    </configuration> 
                </execution> 
            </executions> 
        </plugin> 

我创建了一个和一个文件夹来分离配置。xsdwsdl


推荐