axis2客户端调用免费的webservice服务的实例之一通过wsdl生成客户端程序并本地调用

来源:互联网 发布:java调用svn api 编辑:程序博客网 时间:2024/04/27 13:32

1.Webservice的背景

面向组件

当面向对象的编程方式盛行后,曾一度解决了当时维护、开发中的许多问题,但是实际业务场景的复杂,以及企业间越来越密切的合作,让面向对象的方式变得很有局限性。比如,面向对象的方式无法实现跨语言,跨平台的互用。从而使得同样的东西要用不同的语言来实现,这直接导致了软件复用性的下降,有时候还不得不放弃某中语言的优势来实现功能。

意识到这个问题,有人发现无论什么语言,最终是要交给计算机运行,以机器语言的形式被计算机识别的,因此,可以考虑平台互动的部分,可以做成字节码的包,由于这种包的无关性(都能识别,不依赖特定语法),让跨语言,跨平台调用成为了可能。因为只要按照统一规范开发这种包,那么就能被支持的语言识别。这种包被称为组件,而这种开发方式则是面向组件的开发。

面向服务(soa)

随着网络的发展,面向组件的方式也渐渐不能满足需求。因为一个应用可能需要远程调用另一个,而且二者完全不能有依赖(很可能两个应用来自于不同的公司,有着无法逾越的鸿沟)。比如,某企业的erp系统首页,需要气象局的气象资料以显示天气,之前面向组件的方式完全无法使用。考虑到这种复杂且多变的应用,需要一种统一的并且能被各种系统识别的数据规范,来相互交流数据。这时软件工程研究人员发现,网络资源完全可以看作一个一个的服务,相互之间如果有定义良好的规范,并统一管理服务,那么这种复杂应用会变得异常简单,这就是soa的诞生背景。

Corba

Soa的概念刚提出来时,其实现是corba技术。他的出现,为网络,为企业间的协作方式带来巨大的改变。后来,人们渐渐感觉Corba接口依赖于底层网络协议,复杂且难于使用,于是慢慢被另一种更加简洁,表述规范且易于使用的实现所替代,这就是webservice。直到现在,webservice已经成为了了主流,而很少看到corba接口的身影了。当然,由于corba接近网络底层,在传输效率上比webservice高。

Webservice

作为目前主流的服务实现方式,webservice需要一种语义良好,定义规范且能被各种系统或环境识别的文件格式来描述服务,以便能轻松应对各种场景。人们选择了xml来描述服务,并规定了一系列xml属性标签来描述具体服务的含义,这种描述文件就是wsdl文件,而这一系列属性标签则被称为wsdl(即webservice discription language,Web服务描述语言)


2.Webservice开发实例

        a:下载axis2-1.6.2-bin.zip,解压

        b:在解压后的目录中找到wsdl2java.bat,我的目录是E:\axis2-1.6.2-bin\axis2-1.6.2\bin

        c:配置axis2环境变量,新建AXIS2_HOME变量名,值为E:\axis2-1.6.2-bin\axis2-1.6.2

              

             之后,在Path变量中加入%AXIS2_HOME%\bin;

             

             之后在程序-->运行中输入cmd,回车,在页面中输入wsdl2java,回车,如下图

             

             如果出现上述信息说明配置成功

             d:利用网上免费的服务来结合wsdl2java命令来生成客户端代码,在dos中按照如下格式输入信息

             wsdl2java -uri 服务链接(以.wsdl结尾的链接) -p 包名 -o 生成的文件要放在的地方

             以查找手机号的所属地服务为例,如:wsdl2java -uri http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl -p com.test.webs -o e:\testwebser

注意:代码中.wsdl的服务地址链接一定要先在浏览器中运行一下,看是否能成功打开,成功后方可用于代码中             

输入信息后回车,将看到下图信息

             

             之后,到刚才设置的硬盘目录,找到生成的文件

             

            e:将生成的两个文件copy到eclipse中。在eclipse中新建一个项目(java project/Dynamic project都行),注意新建package时,package名尽量和dos中输入wsdl2java命             令中的包名一致,不然两个文件copy到项目中需要把文件生成的类名的包名全部修改一遍,dos命令中我用的包名是com.test.webs,所以package名也是    com.test.webs,项目结构如下图:

           

            f:项目中需要把axis2用到的jar包引入进来,jar在下载的axis2-1.6.2-bin.zip都有,全部放到项目引入,之后写一个测试类,我的测试类testWebService.java,类中代码如下        

package com.test.webs;import com.test.webs.MobileCodeWSStub.GetMobileCodeInfo;public class testWebService {public static void main(String[] args) throws Exception{MobileCodeWSStub.GetMobileCodeInfo w = new GetMobileCodeInfo();w.setMobileCode("13088888888");//这里的测试手机号我瞎写的,你可以用你自己的手机号测试w.setUserID("");MobileCodeWSStub ww = new MobileCodeWSStub();String s = ww.getMobileCodeInfo(w).getGetMobileCodeInfoResult();System.out.println(s);}}
运行后输出结果:13088888888:广东 深圳 广东联通GSM卡

到此,利用axis2通过wsdl生成客户端程序并本地调用的介绍就完事了,下一节将介绍利用axis2纯手动来访问网上免费webservice服务的实例

写下学习技术的过程及细节备用,也希望我的介绍能帮助你,如果有什么意见,请留言,我将及时回复

        











   

2 0
原创粉丝点击