第一篇 开始axis之旅
1.下载axis.bin.zip和axis.war.zip
2.解压axis.war.zip将axis.war文件copy到你的服务器下,自动解压为axis2目录;对于java开发人员来说,这个应该知道吧。
3.在浏览器地址栏输入http://localhost:8080/axis2/,看到如下效果
恭喜你,axis容器部署成功了!!!
4.新建一个包目录service1,在其下编写一个简单的POJO
package service1; public class Hello { public String hello(String name) { return "hello ," + name; } }
进入cmd命令行,
D:\>cd service1
D:\service1>javac Hello.java
5.新建文件夹META-INF,在其下编写service配置文件services.xml
<service name="Service1"> <description> Service1 </description> <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> <parameter name="ServiceClass">service1.Hello</parameter> </service>
6.新建目录temp,将上述service1和META-INF目录copy到temp。在cmd下cd temp...jar cvf hello.aar .(注意最后还有一个点),copy文件hello.aar到服务器目录\webapps\axis2\WEB-INF\services,服务器代码就OK啦!!!
看看效果吧。
浏览器地址栏输入:http://localhost:8080/axis2/services/listServices
点击相应的服务可以看到wsdl文件。
7.开始编写客户端吧
public static void main(String[] args) { try { RPCServiceClient client = new RPCServiceClient(); Options opts = client.getOptions(); EndpointReference epr = new EndpointReference("http://localhost:8080/axis2/services/Service1"); opts.setTo(epr); Object[] param = new Object[] { "ruanzy" }; Class[] classes = new Class[] { String.class }; QName method = new QName("wsdl文件中的targetNamespace", "hello"); Object[] result = client.invokeBlocking(method, param, classes); System.out.println(result[0]); } catch(Exception e) { e.printStackTrace(); } }
控制台输出hello,ruanzy
webservice搞定啦。
第二篇 axis反向
所谓axis反向是指根据webservice的url或者wsdl文件,得到客户端和服务器端代码
先来看看怎么生成客户端代码吧。还记得第一篇下载的axis.bin.zip吗,解压后bin目录下有一些工具bat,其中wsdl2java.bat就是用来根据webservice的url或者wsdl文件,得到客户端和服务器端代码的。
为了方便调用我们需要设置环境变量AXIS_HOME=axis2的安装目录;添加path=%AXIS_HOME%/bin;
进入cmd命令行,WSDL2Java -uri http://localhost:8080/axis2/services/Hello?wsdl或者wsdl文件的路径 -p client -s -o temp
将会在src/client下生成HelloStub.java,这个就是我们客户端调用时要用到了。
HelloStub ss = new HelloStub(); HelloStub.GetName gg= new HelloStub.GetName(); gg.setName("ruanzy"); String ret = ss.getName(gg).get_return(); System.out.println(ret);
控制台输出hello,ruanzy。和第一篇结果一样
第三篇 复合数据的处理
简单地说,axis支持数组,类和接口数据的处理。不过数组只支持一维数组,对于多维数组要变通一下。
如:String[] arr = new String[]{"a,b,c","d,e,f",...};
对于类和接口,最好采用序列化和反序列化来处理。先序列化为byte[],再反序列化...
第四篇 内部和服务之间的状态管理
AXIS对于服务的状态管理是通过MessageContext以及
服务内部(erviceContext)服务之间(ServiceGroupontext)来处理的。
服务内部:service配置scope=transportsession
MessageContext messageContext = MessageContext.getCurrentMessageContext(); ServiceContext serviceContext = messageContext.getServiceContext(); 通过serviceContext.setProperty(key, value)设值,通过serviceContext.getProperty(key)来取数据。
服务之间:service配置scope=application
MessageContext messageContext = MessageContext.getCurrentMessageContext(); ServiceGroupContext serviceContext = messageContext.getServiceGroupContext(); 以下和上面的设、取值一样
第五篇 Spring和AXIS整合
主要看一下services.xml吧
<service name= "SpringService" > <description>simple spring example</description> <parameter name= "ServiceObjectSupplier" > org.apache.axis2.extensions.spring.receivers.SpringAppContextAwareObjectSupplier </parameter> <parameter name= "SpringBeanName" >springService</parameter> <messageReceivers> <messageReceiver mep= "http://www.w3.org/2004/08/wsdl/in-only" class = "org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" /> <messageReceiver mep= "http://www.w3.org/2004/08/wsdl/in-out" class = "org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> </messageReceivers> </service>
第六篇 ANT一键生成
<?xml version="1.0" encoding="UTF-8"?> <project name="MyAXIS" default="wsdl2java" basedir="."> <property name="classes" value="../WebRoot/WEB-INF/classes/server" /> <property name="temp" value="${basedir}/temp" /> <property name="stub" value="${basedir}/stub" /> <property name="services" value="D:/Program Files/apache-tomcat-5.5.26/webapps/axis2/WEB-INF/services" /> <target name="init"> <echo>创建临时目录</echo> <mkdir dir="${temp}" /> <mkdir dir="${temp}/META-INF" /> </target> <target name="aar" depends="init"> <echo>压缩到aar包</echo> <copy todir="${temp}"> <fileset dir="../WebRoot/WEB-INF/classes"> <include name="**/**" /> </fileset> </copy> <copy file="${basedir}/services.xml" tofile="${temp}/META-INF/services.xml" /> <jar basedir="${temp}" destfile="${services}/service.aar" /> <delete dir="${temp}" /> </target> <target name="restar" depends="aar"> <echo>重启服务器</echo> <exec dir="D:/Program Files/apache-tomcat-5.5.26/bin" executable="cmd"> <env path="D:/Program Files/apache-tomcat-5.5.26" key="CATALINA_HOME" /> <arg value="/C startup.bat" /> </exec> </target> <target name="wsdl2java" depends="restar"> <waitfor> <http url="http://localhost:8080/axis2/services/SayHello?wsdl" /> </waitfor> <echo>生成客戶桩</echo> <exec dir="D:/workspace" executable="cmd"> <arg value="/c" /> <arg value="WSDL2Java" /> <arg value="-uri" /> <arg value="http://localhost:8080/axis2/services/SayHello?wsdl" /> <arg value="-p" /> <arg value="stub" /> <arg value="-s" /> <arg value="-o" /> <arg value="wstest" /> </exec> <delete file="D:/workspace/wstest/build.xml" /> </target> </project>