1.下载与安装axis2:
apache-tomcat-6.0.35.zip
axis2-1.6.1-war.zip
axis2-1.6.1-war.zip
解压,然后将axis2.war复制到tomcat的webapp目录中,安装完毕!
启动tomcat测试axis2是否安装成功:
http://localhost:8080/axis2
2.首先简单介绍一下webapp/axis2/的目录结构如下:
axis2
|-- axis2-web
| |-- xxx.jsp...
|-- META-INF
|-- WEB-INF
| |-- classes
| |-- conf
| |-- lib
| |-- modules
| |-- services
| | |-- version-1.6.1.aar
| |-- web.xml
|-- axis2-web
| |-- xxx.jsp...
|-- META-INF
|-- WEB-INF
| |-- classes
| |-- conf
| |-- lib
| |-- modules
| |-- services
| | |-- version-1.6.1.aar
| |-- web.xml
其中,services目录就是用来发布webservice的目录,
这里有一个自带的service:version-1.6.1.aar
3.开发service端:HelloService .java
package com.service; public class HelloService { public String getName(String name) { return "你好 " + name; } }
4.配置文件:service.xml
<service name="HelloService"> <description>HelloWorld webservice</description> <parameter name="ServiceClass"> com.tangaj.HelloWorld </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>
5.建立如下的目录结构:
test
|-- META-INF
| |--services.xml
|
|-- com
| |-- service
| |-- HelloService.java
|-- META-INF
| |--services.xml
|
|-- com
| |-- service
| |-- HelloService.java
这里test可以随便命名,然后用jdk中的jar命令,把test目录打包成*.aar文件。
打包方法:在命令行进入test目录里,windows:jar cvf test.aar *
然后将文件test.aar(可以不用打包直接将test目录)复制到services目录下面,发布完毕!
重启tomcat,进行测试:
http://localhost:8080/axis2/services/listServices
6.开发客户端:RPCClient.java
package com.client; import javax.xml.namespace.QName; import org.apache.axis2.addressing.EndpointReference; import org.apache.axis2.client.Options; import org.apache.axis2.rpc.client.RPCServiceClient; public class RPCClient { public static void main(String[] args) throws Exception { RPCServiceClient client = new RPCServiceClient(); Options options = client.getOptions(); // 指定调用WebService的URL options.setTo(new EndpointReference("http://localhost:8080/axis2/services/HelloService")); // 指定getName方法的参数值 Object[] objects = new Object[] { "超人" }; // 指定getName方法返回值的数据类型的Class Class<?>[] classes = new Class[] { String.class }; // 指定要调用的方法名:getName 和 WSDL文件中的命名空间:http://service.com // 注意:命名空间(http://service.com)与类HelloService的包名(com.service)有一定关系。 QName qname = new QName("http://service.com", "getName"); String result = (String) client.invokeBlocking(qname, objects, classes)[0]; System.out.println(result); } }
7.运行客户端,端测试结果:
你好 超人