提问人:rickygrimes 提问时间:12/31/2014 最后编辑:Laurent.Brickygrimes 更新时间:9/22/2017 访问量:14074
修改从 wsdl 生成的 java 类的软件包名称
Modify package names for java classes generated from wsdl
问:
如何修改从多个 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>
请指教。
答:
19赞
Tobías
12/31/2014
#1
在您可以指定包映射的部分中:cxf-codgen-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>
评论
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>。非常感谢。
下一个:安全地解析 XML 文档
评论
-p [ wsdl-namespace= ] PackageName
cxf-codegen-plugin