使用cxf wsdl2java或javax wsimport工具的时候,可能会遇到关于生成的Response类文件名冲突的问题
WSDLToJava Error: Thrown by JAXB : A class/interface with the same name "***" is already in use. Use a class customization to resolve this conflict.
目前可选择的方案:
1.使用-autoNameResolution自动处理
wsdl2java -autoNameResolution http://hello.joy2everyone.com/yourWebService?wsdl
or
wsimport -p com.test.client -keep http://hello.joy2everyone.com/yourWebService?wsdl -B-XautoNameResolution
我所经历的默认环境下是在同文件名上增加数字编号以命名Response文件,
**Response.java, **Response2.java,这种情况不是很好
2.使用自定义bindings,详细可看
sun webservice文档
我发现,其实可以避免这个冲突的发生,
例如:
public interface ValidateCCService
@WebMethod
@WebResult(name = "response")
public ValidateCCResponse validateCC(@WebParam(name = "request")ValidateCCRequest request);
这个情况下定义的方法名,如果使用工具生成客户端代码,很可能存在Response冲突,因为定义的wsdl中会有一个关于接口方法的message
<wsdl:message name="validateCCResponse">
</wsdl:message>
方法名定义的message与接口定义返回的ValidateCCResponse,在工具生成客户端代码时就会产生命名冲突。
但是通过更改接口方法名为:
public interface ValidateCCService
@WebMethod
@WebResult(name = "response")
public ValidateCCResponse validate(@WebParam(name = "request")ValidateCCRequest request);
即可解决该冲突,
以上为自己的经验,在此分享下,做下笔记,也希望对大家有帮助,如有错误或更好打方法的,大家分享下!