基于Axis2用IDEA9开发WebService客户端
IDEA9+JDK1.6+Axis2
用到的工具包如下:
axis:http://ws.apache.org/axis2/
基础知识:
1. Web Services常用的框架;
2. XML基础语法;
3. WSDL,SOAP;
一、为什么要生成客户端代码
生成WebService的客户端的代码的目的是为了方便请求和提高性能。因为有了存根,就可以以本地代码编程的方式来调用WebService服务,因为存根代码是在本地静态编译的,这比动态请求解析wsdl要快,不同的框架框架实现性能差异也很大。有了本地存根代码,便于对WebService的请求管理在本地做进一步封装。
出于以上原因,做WebService程序,应该生成本地存根代码,通过存根来调用WebService服务。
二、生成原理
一般来说,流行的XFire、Axis2、CXF等都有一些工具,统称为WSDL2Java工具。这些工具的作用就是为了生成WebService客户端存根的,针对相应的主流Java IDE工具,如IDEA,Eclips,Jbuilder等应该都可以找到相应的插件来支持这项功能.
IDEA生成存根代码的原理实际上通过调用这些WSDL2Java工具来生成的。因此,在使用IDEAWebService客户端代码生成工具的时候,需要配置相应的框架包。
同理,使用其他IDE工具,如Eclipse,Jbuilder等,或者说其他开发语言,如C,Delphi等等也都有类似的WSDL2Java工具来生成相应的客户端代码,生成原理都如同以下代码:
Java -Djava.ext.dirs=lib org.apache.axis2.wsdl.WSDL2Java –uri http://localhost:8080/axis/Hello.jws?wsdl
其中url链接为提供webservice服务的服务器地址和服务名称,它们都是通过提供URL的形式来发布相应的Webservice接口.
总之,用什么框架开发WebService与用什么工具WebService 存根是没有关系的
三、IDEA生成代码前的配置
新建一个project,其中Modules配置如下,将webservices的客户端模式选择为Apache Axis2
四、具体操作过程
如果要生成客户端代码,可以新建一个一个工程后,选择如下方法进行:
然后,点击OK,会出现一个对话框
在Url一栏填上webservices服务端提供的服务,生成前可在IE浏览器上直接访问该URL,如果返回的是xml文档,则表示该服务成功发布.如果该wsdl发布成功,则该对话框中”OK”键显示为可点击状态,如发布失败,则显示为灰色.
点击”OK”,生成代码如下:
其中:
.wsdl文件: 是用来对Web Service进行描述的文件,包括期望的消息格式类型、所使用的Internet协议和Web Service的Internet地址;
Xxx_PortType: 定义了Web服务接口;
XxxService: 定义了用于获取Web服务接口的方法;
XxxServiceLocator: 接口XxxService的具体实现;
XxxSoapBindStub: Web服务客户端桩,通过该类与服务器交互;
XxxReq和XxxResp这二个类,是我在项目中将客户端/服务端的基类,所有的请求/应答包都基于这二个类,将请求/应答对象化后,可以传送自定义类型,也方便进行扩展.
这几个JAVA类帮我们处理了大部分的逻辑,我们需要的仅仅是把这些类加到我们的项目然后创建一个我们自己的类来调用它们即可. 在WSDL2Java工具自动产生的几个类中,类XxxServiceLocator中保存这一些跟服务器相关的信息,例如URL地址等,当服务器的地址更改后但是服务并没有改动的时候直接修改该文件中的字符串定义,而无需重新生成这几个类
基于:http://lavasoft.blog.51cto.com/62575/105957 结合IDEA版本的不同进行相应修改,主要增加了些文件说明和图片.