Chinaunix首页 | 论坛 | 博客
  • 博客访问: 474274
  • 博文数量: 155
  • 博客积分: 2954
  • 博客等级: 少校
  • 技术积分: 1000
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-12 22:00
文章分类

全部博文(155)

文章存档

2014年(2)

2013年(5)

2012年(10)

2011年(33)

2010年(105)

我的朋友

分类: Java

2012-06-14 09:50:38

原文地址:http://joy2everyone.iteye.com/blog/717285


使用cxf wsdl2java或javax wsimport工具的时候,可能会遇到关于生成的Response类文件名冲突的问题 

Console代码  收藏代码
  1. 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

or 

wsimport -p com.test.client -keep -B-XautoNameResolution

我所经历的默认环境下是在同文件名上增加数字编号以命名Response文件, 
**Response.java, **Response2.java,这种情况不是很好 

2.使用自定义bindings,详细可看 

我发现,其实可以避免这个冲突的发生, 

例如: 

Java代码  收藏代码
  1. public interface ValidateCCService  
  2.     @WebMethod  
  3.     @WebResult(name = "response")  
  4.     public ValidateCCResponse validateCC(@WebParam(name = "request")ValidateCCRequest request);  


这个情况下定义的方法名,如果使用工具生成客户端代码,很可能存在Response冲突,因为定义的wsdl中会有一个关于接口方法的message 

 
 

方法名定义的message与接口定义返回的ValidateCCResponse,在工具生成客户端代码时就会产生命名冲突。 

但是通过更改接口方法名为: 

Java代码  收藏代码
  1. public interface ValidateCCService  
  2.     @WebMethod  
  3.     @WebResult(name = "response")  
  4.     public ValidateCCResponse validate(@WebParam(name = "request")ValidateCCRequest request);  


即可解决该冲突, 

以上为自己的经验,在此分享下,做下笔记,也希望对大家有帮助,如有错误或更好打方法的,大家分享下! 
阅读(1681) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~