Gangmax Blog

使用jaxws-maven-plugin生成ws client的一个问题

当我创建一个工程,试图使用maven pluging根据给定的多个wsdl文件生成web service client stub代码的时候,遇到了这样一个问题:plugin运行过程没有问题,每个wsdl文件对应的代码都可以依次生成并编译成功。但是build过程结束以后,生成的java文件中却有编译不过去的类。导致在我试图调用web service的时候,总是报某个类型找不到定义。

因为是多个wsdl,很自然的就想到,如果一次只生成一个wsdl文件对应的代码,是否还有问题。实验后发现这样是没有问题的。所以问题一定出在多个wsdl生成的过程中,后面wsdl生成的同名java文件覆盖了前面wsdl文件生成的已存在java文件。就导致总体编译有问题,而每次生成wsdl文件的过程没有问题。

知道了问题的原因就好办了,直接打开有名称冲突的wsdl文件,修改对应的类型名称,如:

1
2
3
4
5
6
7
8
<xsd:element name="ReassignIR_PRResponse" type="s:OutputMapping3"/>
<xsd:complexType name="OutputMapping3">
<xsd:sequence>
<xsd:element name="CaseID" type="xsd:string"/>
<xsd:element name="group" type="xsd:string"/>
<xsd:element minOccurs="0" name="owner" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>

比如把其中的”OutputMapping3”改名为”OutputMapping31”。

以下是完整的maven plugin配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>1.10</version>
<executions>
<execution>
<goals>
<goal>wsimport</goal>
</goals>
</execution>
</executions>
<configuration>
<wsdlDirectory>src/main/resources/wsdl</wsdlDirectory>
<packageName>com.sun.itsp.tis.adapter.kaiser.wsclient</packageName>
<wsdlFiles>
<wsdlFile>ESS_Comments_HelpDesk_Info.wsdl</wsdlFile>
<wsdlFile>HPD_HelpDesk_Modify_IR_PR.wsdl</wsdlFile>
<wsdlFile>HPD_HelpDesk_Query_IR_PR.wsdl</wsdlFile>
<wsdlFile>HPD_HelpDesk_Submit_IR.wsdl</wsdlFile>
<wsdlFile>SHR_InterfaceAlerts.wsdl</wsdlFile>
</wsdlFiles>
<sourceDestDir>${project.build.directory}/generated-sources/wsimport</sourceDestDir>
<resourceDestDir>${project.build.directory}/generated-sources/wsimport</resourceDestDir>
</configuration>
</plugin>

Comments