当我创建一个工程,试图使用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>
|