一、环境安装(tomcat,本人5.5):
首先下载到官方网站下载axis2 war包。
将war包复制到webapps目录下边,启动tomcat,服务器加载了war包后会生成axis2目录,跟我们平时的应用目录没神马区别,唯一要注意的是axis的配置文件在WEB-INFconf,
在开发过程中要修改一下这个的配置文件。
二、(改造配置文件):
配置axis2的文件,axis2支持热部署,意味着你可以再编译好的class文件,直接复制到pojo目录下(默认是pojo,等会有说明修改)。
在配置文件中找到<parameter name="hotdeployment">true</parameter>默认已经为热部署;
另外一个在开发过程中你常需要把热更新打开,默认是false 不打开,找到hotupdate
<parameter name="hotupdate">true</parameter>
发布pojo的目录只是默认的,如果需要使用其他的目录,需要添加配置元素,在axisconfig下面添加
<deployer extension=".class" directory="mymulu" class="org.apache.axis2.deployment.POJODeployer"/>
上面的配置文件只需要修改 directory的属性,改为目录名
二、(使用POJO方式发布webservice):
在pojo目录(此目录没有,在axis2WEB-INF下面创建,其实细心的同学会发现,在配置文件axis就已经给我们定义了pojo目录,看前面添加发布pojo目录)下面的webservice可以通过重写url去访问(后面带一些参数,类似action),如果遇到数据类型则需要做转换,原因传输过程是以字符串形式传输,而且重写URL的参数名必须要与方法的参数名相同。感觉比较土的方法
好吧说了那么多,现在让我们来个helloworld吧~!!
首先我们先发布一个webservice,
编写一个MyTest类
public class MyTest { public String getString(String str){ System.out.println("调用了getString()传入参数"+str); return str; } public void doNoThing(String str){ System.out.println("调用了doNothing()传入参数:"+str); } }
1.启动你的tomcat,访问这个url:http://127.0.0.1:8080/axis2/ (确保axis2是正常运行了),
2.神马,没改配置文件,好吧,就在%tomcat_home%webappsaxis2WEB-INF下面建立一个pojo文件夹。编写好的类编译成class文件后,直接复制到你所指定的目录下。
3.最后访问你的服务吧http://127.0.0.1:8080/axis2/services/MyTest?wsdl
现在开始客户端开发,这里省略了使用axis的API开发客户端,个人觉得这样的开发效率好低吖,新手上手(本人懒的去看那个API),应该快速掌握怎么使用,所以这里介绍stub方式,使用了axis自带的命令,可以根据wsdl生成客户端,在%AXIS2_HOME%in目录下有一个wsdl2java脚本(注意是wsdl to java)。
前提准备
下载了axis2 bin 文件,配置环境变量 例如:
变量名:AXIS2_HOME
值:E:studywebserviceaxis2-1.5.4-binaxis2-1.5.4
这里要用到前面的发布的webservice,保持你的服务器是启动的,你的服务正常。
打开CMD
输入下面的命令
%AXIS2_HOME%/bin/wsdl2java -uri http://localhost:8080/axis2/services/MyTest?wsdl -p com.lj.mywebservice -s -o c:/mywebservice
这里说一下参数, -uri 当然是服务的wsdl文件地址,-p 报名 , -o 表示目录,这里写的是绝对路径,也可以写相对路径
回车,你会发现在C盘下多了一个文件目录,打开里边一层层进去后,有一个MyTestStub类,这个类实现非常复杂,不用管他,拿过来直接用。
新建一个工程,写个测试类,把刚才生成的类复制进去,当然别忘记了引入axis的jar包。
package com.lj.myswebservice; import java.rmi.RemoteException; import org.apache.axis2.AxisFault; public class TestClass { public static void main(String[] args) { try { MyTestStub my=new MyTestStub(); //在MYTestStub里边定义了三个静态嵌套类,分别作为参数对象,返回值对象。 //这里定义了donothing方法的参数对象 MyTestStub.DoNoThing donothing=new MyTestStub.DoNoThing(); //这里定义了getstring方法的参数对象 MyTestStub.GetString getstring=new MyTestStub.GetString(); ////这里定义了getString方法的返回值对象 MyTestStub.GetStringResponse getstringresponse=new MyTestStub.GetStringResponse(); //设置参数值 donothing.setArgs0("神马也不做啊"); //设置参数值 getstring.setArgs0("我是帅锅"); //调用donothing方法 my.doNoThing(donothing); //调用getString发放,设置参数,并返回值 getstringresponse=my.getString(getstring); //打印返回值 System.out.println(getstringresponse.get_return()); } catch (AxisFault e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
运行结果如下。
<!--StartFragment -->
服务器结果如下。
<!--StartFragment -->
总结,使用axis2构建服务是非常快的,这个例子使用的是deploy pojo的方式发布服务,所谓pojo就是个普通的JAVA类,与javabean区别就是不一定有get set方法(是不是这样理解?)。在客户端调用服务的时候,采取stub方式(貌似现在很流行,这样编写客户端是灰常直观的),只要拿到wsdl文件,就可以使用 wsdl2java命令生成客户端,大大减少了开发量。
还差得远( ⊙ o ⊙ )啊!··明晚再看看别的方式发布鸟··
晚了睡觉了··明天早起上班( ⊙ o ⊙ )啊!···