当前位置: 代码迷 >> Web前端 >> Axis2 Webservice 开发一 - 流程
  详细解决方案

Axis2 Webservice 开发一 - 流程

热度:460   发布时间:2012-06-29 15:48:47.0
Axis2 Webservice 开发1 -- 流程
1.下载与安装axis2:
apache-tomcat-6.0.35.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
其中,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
这里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.运行客户端,端测试结果
你好 ?超人

  相关解决方案