axis2 搭建webservice服务

原创
2015/05/03 16:12
阅读数 154

                                             (一) 系统环境                                                

   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端搭建                                         

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】

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部