自定义包名 cxf-codegen-plugin

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

1
不要定义包名,让cxf-codegen-plugin来完成这项工作。 - khmarbaise
2个回答

61

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

<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>将会把你的命名空间映射到你想要的包。


3
谢谢您的回复。请问是否可以指定一个前缀,应用于生成的所有软件包? - Gopal
包的前缀是什么意思? - Paulius Matulionis
@Paulius..假设我允许JibX遵循模式,我希望所有生成的软件包都在根软件包jibx.x.y.z下。实际问题是我有一个cxf-code-gen插件,使用相同的模式生成代码。因此,我有两个具有相同包结构和名称的类。因此,我希望将JibX生成的所有类放在不同的根目录下。 - Gopal
2
最佳解决方案。当它不起作用时,我几乎感到担心,但原因是在“=”之前有一个“/”。模式为“namespace=desired_package”。 - cosmincalistru

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>

我使用的是cxf-codegen-plugin的版本为3.5.5


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接