修改从 wsdl 生成的 java 类的软件包名称

Modify package names for java classes generated from wsdl

提问人:rickygrimes 提问时间:12/31/2014 最后编辑:Laurent.Brickygrimes 更新时间:9/22/2017 访问量:14074

问:

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

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>

请指教。

Java WSDL

评论

0赞 Tobías 12/31/2014
如何从 wsdl 生成类?您使用的是哪种工具?例如,如果您使用 CXF,则可以使用-p [ wsdl-namespace= ] PackageName
0赞 rickygrimes 12/31/2014
我希望它能用pom.xml来定义。您在此处提供的选项是命令行。
0赞 Tobías 12/31/2014
你在用吗?cxf-codegen-plugin
0赞 rickygrimes 12/31/2014
是的,我正在使用 cxf-codegen-plugin。

答:

19赞 Tobías 12/31/2014 #1

在您可以指定包映射的部分中:cxf-codgen-pluginwsdlOptions

<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>

评论

0赞 rickygrimes 12/31/2014
我查看了 wsdl 中的命名空间,并尝试了一下,但没有用 - <packagenames> <!--包映射 --> <packagename>services.abc.def.com/=com.test.services</packagename> <packagename>dto.abc.def.com/=com.test.dto</packagename> <packagename>exceptions.abc.def.com/=com.test.exceptions</packagename> </packagenames>
0赞 Tobías 12/31/2014
你能发布 wsdl 和 cxf 版本吗?我使用 2.7.5
0赞 Tobías 12/31/2014
编辑您的问题并发布 wsdl 和插件配置,以便我可以尝试重现它。我在几个项目中使用了这种配置。
0赞 rickygrimes 12/31/2014
我无法发布 wsdl。不好意思。是否要我粘贴pom.xml的内容?
2赞 rickygrimes 1/1/2015
嗨,你的回答确实奏效了。引起麻烦的是命名空间末尾的 /after。我必须做 =<packagename>,而不是 /=<packagename>。非常感谢。