springmvc框架如何实现像webservice一样通过wsdl2Java生成客户端代码

我们搞webService的时候可以通过wsdl2java生成客户端代码,然后直接调用生成的代码即可访问后台服务,那么通过springmvc或者servlet编写的后台服... 我们搞webService的时候可以通过wsdl2java生成客户端代码,然后直接调用生成的代码即可访问后台服务,那么通过springmvc或者servlet编写的后台服务该怎么实现wsdl2java生成客户端代码,还是说只能通过调用服务的http地址来访问。 展开
 我来答
育知同创教育
2017-12-19 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
展开全部

在用到web service时,如果是调用自己开发的web service还好,可以有一个方法的接口或参数对象实体类什么的,但如果是调用第三方的服务,除了得到web service服务地址的wsdl文档外,没有任何实质性编码的东西,写原生调用太麻烦,这时就需要自己写一个方法的接口类。

这个,目前已经有比较成熟的工具,可以自动生成,下面作一下简单的介绍。

apache的wsdl2java工具,目前貌似CXF和axis各有一套,使用方式大同小异,但生成的代码会有所区别,这时说的是CXF提供的wsdl2java工具。

wsdl2java用法:

wsdl2java -p com -d src -all  aa.wsdl

-p  指定其wsdl的命名空间,也就是要生成代码的包名:

-d  指定要产生代码所在目录

-client 生成客户端测试web service的代码

-server 生成服务器启动web  service的代码

-impl 生成web service的实现代码

-ant  生成build.xml文件

-all 生成所有开始端点代码:types,service proxy,,service interface, server mainline, client mainline, implementation object, and an Ant build.xml file.

详细用法见:http://cwiki.apache.org/CXF20DOC/wsdl-to-java.html

一开始使用了CXF的这套工具,发现不是很方便,毕竟依赖CXF提供的工具jar包,个人不是很喜欢用。

后来发现JDK居然也自带了对web service生成java代码的功能,貌似1.6版本开始的,试用后发现效果十分不错,果断投入它的怀抱。下面作下简单的介绍,以备忘。

打开jdk下的bin目录 看下能否找到"wsimport.exe"这个文件

一般情况下都会有

如果没有则说明你的JDK不支持这个功能

然后在DOS窗口下输入wsimport 敲回车

如果提示错误的话 说明你的JDK环境变量还没有配好

一句话总结,如果你在dos窗口下输入wsimport正常,就可以

如果OK的话 输入以下命令就可以将wsdl文件生成java文件了

wsimport http://127.0.0.1/TicketMobile/services/Cococ?wsdl  -keep -p com.llg.ws2 -s g:/ws

参数说明

wsimport 这个是必须的 该工具的名称

http://127.0.0.1/TicketMobile/services/Cococ?wsdl  wsdl文件

-keep  是否生成源文件

-p com.llg.ws2  生成后的java包名

-s g:/ws    生成后放哪个目录

但是前几天,在对一个第三方提供的web service使用该工具生成java代码的时候,居然出错了,网上查找后终于找到原因。

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

Console代码  

  • WSDLToJava Error: Thrown by JAXB : A class/interface with the same name "***" is already in use. Use a class customization to resolve this conflict.  

  • 目前可选择的方案: 

    apache的wsdl2java工具,使用-autoNameResolution自动处理 

    wsdl2java -autoNameResolution http://hello.joy2everyone.com/yourWebService?wsdl 

    JDK自带的工具

    wsimport -p com.test.client -keep http://hello.joy2everyone.com/yourWebService?wsdl -B-XautoNameResolution 

    2.如果web service是己方开发的,可以修改代码,使用自定义bindings,详细可看sun webservice文档 

    例如: 

    Java代码  

  • 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,在工具生成客户端代码时就会产生命名冲突。 

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

    Java代码  

  • public interface ValidateCCService  

  • @WebMethod  

  • @WebResult(name = "response")  

  • public ValidateCCResponse validate(@WebParam(name = "request")ValidateCCRequest request);  

  • 即可解决该冲突, 

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式