从wsdl生成的java类修改包名

7

如何修改从多个 WSDL 生成的 Java 类的包名。我有两个 WSDL,它们都生成了像 ObjectFactory、package-info 等具有完全相同的包名称的类。因此,我无法组织我的代码中的导入。我的 WSDL 包看起来像这样 -

WSDL A
    com.test.customerinfo.dto
    com.test.customerinfo.exceptions
    com.test.customerinfo.service

WSDL B    
    com.test.customerinfo.dto
    com.test.customerinfo.exceptions
    com.test.customerinfo.service

我希望它看起来像这样——
WSDL A
    com.test.customerinfo.dto
    com.test.customerinfo.exceptions
    com.test.customerinfo.service

WSDL B    
    com.testOne.customerinfo.dto
    com.testOne.customerinfo.exceptions
    com.testOne.customerinfo.service

我尝试了这个,但没有成功 -
<plugin>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-codegen-plugin</artifactId>
    <version>2.7.7</version>
    <executions>
       <execution>
          <id>generate-sources</id>
          <phase>generate-sources</phase>
          <configuration>
             <sourceRoot>target/generated-sources/test/java</sourceRoot>
             <wsdlOptions>
                <wsdlOption>
                   <wsdl>src/main/resources/wsdl/test/GetInfo.wsdl</wsdl>
                   <extraargs>
                      <extraarg>-server</extraarg>
                      <extraarg>-client</extraarg>
                      <extraarg>-impl</extraarg>
                      <extraarg>-verbose</extraarg>
                      <extraarg>-p</extraarg>
                      <extraarg>http://dto.customerinfo.test.com/=com.test.customerinfo.dto</extraarg>
                      <extraarg>-p</extraarg>
                      <extraarg>http://services.customerinfo.test.com/=com.test.customerinfo.services</extraarg>
                      <extraarg>-p</extraarg>
                      <extraarg>http://exceptions.customerinfo.test.com/=com.test.customerinfo.exceptions</extraarg>
                   </extraargs>
                   <frontEnd>jaxws21</frontEnd>
                   <faultSerialVersionUID>1</faultSerialVersionUID>
                </wsdlOption>
             </wsdlOptions>
          </configuration>
          <goals>
             <goal>wsdl2java</goal>
          </goals>
       </execution>
    </executions>
 </plugin>

请给予建议。


你如何从wsdl生成类?你使用哪个工具?例如,如果你使用CXF,可以通过-p [ wsdl-namespace= ] PackageName来完成。 - Tobías
我希望它在pom.xml中定义。你在这里给出的选项是命令行。 - rickygrimes
你是否正在使用 cxf-codegen-plugin - Tobías
是的,我正在使用cxf-codegen-plugin。 - rickygrimes
1个回答

19

cxf-codegen-plugin 中,您可以在 wsdlOptions 部分中指定包映射:

<plugin>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-codegen-plugin</artifactId>
    <version>${cxf.version}</version>
    <executions>
        <execution>
            ...
            <configuration>
                ...
                <wsdlOptions>
                    <wsdlOption>
                        ...
                        <packagenames>
                        <!-- Package Mappings -->
                            <packagename>http://namespace.example.com/=com.test.package</packagename>
                        </packagenames>
                        ...
                    </wsdlOption>
                </wsdlOptions>
            </configuration>
            <goals>
                <goal>wsdl2java</goal>
            </goals>
        </execution>
    </executions>
</plugin>

或者你也可以使用extraarg

<wsdlOptions>
    <wsdlOption>
        ...
        <extraargs>
            <extraarg>-p</extraarg>
            <extraarg>http://namespace.example.com/=com.test.package</extraarg>
        </extraargs>
    </wsdlOption>
</wsdlOptions>

我查看了wsdl中的命名空间,并尝试了这个,但它没有起作用 - <packagenames> <!-- 包映射 --> <packagename>http://services.abc.def.com/=com.test.services</packagename> <packagename>http://dto.abc.def.com/=com.test.dto</packagename> <packagename>http://exceptions.abc.def.com/=com.test.exceptions</packagename> </packagenames> - rickygrimes
你能发布一下wsdl和cxf版本吗?我使用的是2.7.5。 - Tobías
请编辑您的问题并发布wsdl和插件配置,以便我可以尝试复制它。我在多个项目中使用此配置。 - Tobías
好的,请。如果您能够发布一个“替代”的WDSL以重现问题,那就更好了。我会尝试发布一个示例项目,稍后回来。 - Tobías
2
你好,你的回答真的起作用了。导致问题的原因是在命名空间结束后的/。我不是使用/=<packagename>,而是使用=<packagename>。非常感谢你。 - rickygrimes
显示剩余4条评论

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