自定义包名 cxf-codegen-plugin

问题描述 投票:0回答:2

想象一下这个场景。

我有一个带有命名空间 a/b/c 的 wsdl 文件,它导入另一个命名空间为 m/n/o 的 wsdl。 不幸的是,它们都定义了相同的 ComplexTypes XYZ。现在,当我使用 cxf-codegen-plugin 生成 Java 代码并使用自定义包名称“com.qsrs.uvw”时,最终生成的代码中只保留了一个类。有人可以帮我吗?

java maven wsdl cxf wsdl2java
2个回答
60
投票

如果你想根据命名空间生成包,这里是解决方案:

<plugin>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-codegen-plugin</artifactId>
    <version>2.6.0</version>
    <executions>
        <execution>
            <id>generate-sources</id>
            <phase>generate-sources</phase>
            <configuration>
                <sourceRoot>${basedir}/target/generated/src/main/java</sourceRoot>
                <wsdlOptions>
                    <wsdlOption>
                        <wsdl>yourWsdl.wsld</wsdl>
                        <extraargs>
                            <extraarg>-client</extraarg>
                            <extraarg>-verbose</extraarg>
                            <extraarg>-p</extraarg>
                            <extraarg>http://your.namespace/services/=your.package</extraarg>
                            <extraarg>-p</extraarg>
                            <extraarg>http://your.namespace2/services2/=your.package2</extraarg>
                        </extraargs>
                    </wsdlOption>
                </wsdlOptions>
            </configuration>
            <goals>
                <goal>wsdl2java</goal>
            </goals>
        </execution>
    </executions>
</plugin>

这个

<extraarg>http://your.namespace2/services2/=your.package2</extraarg>
将把你的命名空间映射到你想要的包。


0
投票

您也可以使用

packagenames
配置:

<wsdlOption>
    <wsdl>yourWsdl.wsld</wsdl>
    <extraargs>
        <extraarg>-client</extraarg>
        <extraarg>-verbose</extraarg>
    </extraargs>
    <packagenames>
        <packagename>http://your.namespace/services/=your.package</packagename>
        <packagename>http://your.namespace2/services2/=your.package2</packagename>
    </packagenames>
</wsdlOption>

我用的是

3.5.5
的版本
cxf-codegen-plugin

© www.soinside.com 2019 - 2024. All rights reserved.