mac(Yosemite10.10.3)
jdk1.6;myeclipse10;
axis2-1.6.2 (点我进入下载界面)【binary 是jar包;source 是源码包;war 下载放到tomcat可以直接运行;doc ...】
服务器和客户端都使用的是java语言
2.1 在myeclipse中新建一个web project (name是axis2-02,名称随意)
目录结构如下:新建的readme.txt是我手工添加的,养成良好习惯,做好记录(这里写成了blog就不写在readme中了)
2.2 拷贝用到的jar包【jar包从binary/lib下拷贝,没有仔细区别所以全部拷贝进入了】
要新建一个webservice服务有多种方式,可以使用aar模式,或者无aar模式(aar其实就是jar包改个名称,专门给axis2识别的);我们不讨论那么详细的东西,只讲怎么使用;
2.3 搭建自己生成aar文件的webservice
因为我比较喜欢掌控自己工程中的文件,要知道他们每一个文件的用处,所以我要自己新建自己的aar文件;
aar我们稍后看看是什么结构就清楚他的作用了。
2.4 新建一个webservice服务类HelloServices
package com.axis2.webservices; public class HelloServices { public void sayHello(){ System.out.println("hello world!"); } public String changeName(String name){ return "my name is " + name ; } }
2.5 配置
服务类完毕,然后是配置信息,axis2的配置相对简单很多,只有2个地方
【如果和spring整合那还要在spring的配置文件中加入信息,这个以后再说,这里只讲简单搭建】
2.5.1 web.xml
配置axis2的拦截servlet,web.xml中加入下面代码:
<servlet> <servlet-name>axis2</servlet-name> <servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>axis2</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping>
2.5.2 创建webservice配置
在目录位置/WebRoot/META-INF/ 目录下新建一个services.xml
名称一定是services,不要少了或者更改了,这个xml会在之后用上
services.xml的内容:
<?xml version="1.0" encoding="UTF-8"?> <service name="helloService"> <description>Web Service例子</description> <parameter name="ServiceClass">com.axis2.webservices.HelloService</parameter> <messageReceivers> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" /> </messageReceivers> </service>
简单的解释一下文本意思:
service的name是webservice的名称,就是:
http://127.0.0.1:8080/axis2-02/services/helloService?wsdl
这个地址中/和?中间的部分要保持一致,不然就会访问不到;
parameter配置的是这个service的package地址
下面的messageReceiver,不做详细介绍,你可以当成固定格式吧;
2.6 生成需要的aar文件
2.6.1 准备工作
先看一下我们目前的项目目录结构:
2.6.2 命令行进入当前工程的WebRoot目录
输入命令:【jar cvf services.aar .】
注意为了不输入错误,请直接copy我上面【】中的字符串,尤其注意aar后面的空格和英文的. 号
这个aar的名称可以随意;
之后我们再看目录结构:【注意到多了一个services.aar的文件】
2.6.3 调整位置
现在刷新一下myeclipse工程,然后在WEB-INF文件夹下新建一个文件夹services,将刚才生成的services.aar移动到此文件夹下;【为什么是新建services文件夹,因为之前我们在配置web.xml的时候定义servlet时,写的url是/services/*】
2.7 完成服务端搭建可以测试
完毕之后发布工程到tomcat,运行并访问:
http://127.0.0.1:8080/axis2-02/services/helloService?wsdl
如果出现说文档,则说明成功
client的搭建,我们使用一个新的java project 来模拟;
3.1 准备工程
myeclipse中新建一个java project:
然后引入外部的jar包,我直接引入了axis2的所有包;如何引用包:
【右键工程-->选择Build Path-->选择Configure Build Path --> 在中间Libraries页,右侧选择Add Library--->User Library--->next--->User Library--->New--->输入名称--->Add JARs】
加入JUnit的包;
3.2 准备测试的stub
使用axis2提供的工具生成测试用的java类;这个其实可以直接拿到项目中使用;
进入axis2的bin目录:
命令行进入:【这里测试用可以不加 -a 】
./wsdl2java.sh -uri http://127.0.0.1:8080/axis2-02/services/helloService?wsdl -p com.client -s -a -o stub-url:指定了wsdl文件的路径,可以是本地路径,也可以是网络路径。
-p: 指定了生成的Java类的包名,
-s: 制定生成同步异步调用代码
-o: 指定了生成的一系列文件保存的根目录
-a: 制定生成异步的回调函数
3.3 生成结果:【我只用到最后的HelloServiceStub.java这个文件】
3.4 编写测试代码
将HelloServiceStub.java拷贝到myeclipse项目中,随便建一个目录。
注意如果自定义了一个目录,那么可能要修改一下HelloServiceStub的package的位置;
新建测试类TestAll
public class TestAll { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式 @Test public void testSayHello() throws RemoteException{ HelloServiceStub stub = new HelloServiceStub(); HelloServiceStub.SayHello say = new HelloServiceStub.SayHello(); stub.sayHello(say); } @Test public void testChangeName() throws RemoteException{ HelloServiceStub stub = new HelloServiceStub(); ChangeName c = new ChangeName(); c.setName("tom"); ChangeNameResponse cr = new ChangeNameResponse(); cr = stub.changeName(c); String str = cr.get_return(); System.out.println("this is client :" + df.format(new Date()) + " name :" + str); } }
4.1 测试changeName方法:
tomcat端:
测试客户端client:
到此部署和册数完毕,之后更新关于axis2的一些其他应用
【异步调用方法,session管理,整合spring】