java webservice wsdl2java error

使用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);


即可解决该冲突,

以上为自己的经验,在此分享下,做下笔记,也希望对大家有帮助,如有错误或更好打方法的,大家分享下!



你可能感兴趣的:(java,html,webservice,sun)