axis网上的教程很多,不过搜来搜去,总是只有那么几篇。仔细看了一下那几篇文章,都感觉到不是自己想要的,所以自己整理了一篇分享一下。
本文介绍axis应用的一个小例子,没有麻烦的命令行操作,只需照下面的步骤做就可以了。以下是详细的操作步骤。(注:本实例用的是axis,非axis2)
1. 环境准备
l MyEclipse 6.5
l Tomcat 6
l JDK 1.5
l axis(非axis2)
2. 新建web工程
新建一web工程,工程名称为axistest。新建完成后,导入下图所示的axis相关的jar包。
3. 在web.xml中添加axis相关的配置信息
<servlet> <display-name>Apache-Axis Servlet</display-name> <servlet-name>AxisServlet</servlet-name> <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class> </servlet> <servlet> <display-name>Axis Admin Servlet</display-name> <servlet-name>AdminServlet</servlet-name> <servlet-class>org.apache.axis.transport.http.AdminServlet</servlet-class> <load-on-startup>100</load-on-startup> </servlet> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/servlet/AxisServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>*.jws</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AdminServlet</servlet-name> <url-pattern>/servlet/AdminServlet</url-pattern> </servlet-mapping>
4. 新建提供服务的Java类
在src下新建com包,在com包下新建HelloWorld类,HelloWorld的内容如下:
package com; public class HelloWorld { public String sayHello(String msg){ if(null==msg || "".equals(msg)){ return "您好!"; }else{ return "您好" + msg + "!"; } } public int sayAge(){ return 28; } }
5. 配置server-config.wsdd
在WEB-INF下新建server-config.wsdd文件,内容如下:
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <!-- 处理器 --> <handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper" /> <!-- 一个服务 --> <!-- provider="java:RPC" webservice是以javabean的形式提供的--> <service name="helloWorldService" provider="java:RPC"> <!-- 指定类名 --> <parameter name="className" value="com.HelloWorld" /> <!-- 类中允许访问的方法 --> <parameter name="allowedMethod" value="*"></parameter> </service> <!-- 指定处理器 --> <transport name="http"> <requestFlow> <handler type="URLMapper"/><!-- 引用上边的 --> </requestFlow> </transport> </deployment>
wsdd文件标签节点说明:
deployment:表明这是一个axis部署描述文件;
service:axis提供的一个web service服务。service标签中parameter allowedMethod用于指定一个以空格分隔的方法名,只有这些方法可以通过web service访问。也可以将这个值指定为“*”表示所有的方法都可以访问。
provider:服务类型,共有四种,分别是RPC,Document,Wrapped和Message。详见org.apache.axis.providers包的API文档;
parameter:用来设置Axis的各种属性;
requestFlow:局的请求Handlers,在调用实际的服务之前调用;
transport:定义了服务器端的传输方式
至此web service相关的东西已经配置好,此时工程的目录结构如下
6. 部署到Tomcat测试
将工程发布到Tomcat,在浏览器里访问http://127.0.0.1:9999/axistest/services,如果出现如下页面,则表示web service部署成功
点击上面的wsdl链接,进入下图所示页面
注意上面的红圈的namespace,下面测试QName有用到。
7. 客户端测试
在com包下新建测试类,名称为ClientTest,内容如下:
package com; import java.net.MalformedURLException; import java.rmi.RemoteException; import javax.xml.namespace.QName; import javax.xml.rpc.ServiceException; import org.apache.axis.client.Call; import org.apache.axis.client.Service; /** * @author 花非花雾非雾 * @date 2010-12-24 */ public class ClientTest { public static void main(String[] args) throws MalformedURLException, RemoteException { Service service = new Service(); try { Call call = (Call) service.createCall(); //设置地址 call.setTargetEndpointAddress(new java.net.URL("http://127.0.0.1:9999/axistest/services/helloWorldService?wsdl")); //设置要执行的方法 call.setOperationName(new QName("http://com","sayHello")); //设置要传入参数,如果没有要传入的参数,则不要写这个 call.addParameter("msg", org.apache.axis.Constants.XSD_STRING,javax.xml.rpc.ParameterMode.IN); //设置返回的类型 call.setReturnType(org.apache.axis.Constants.XSD_STRING); String name = "花非花雾非雾"; //执行,调用webservice String result = (String) call.invoke(new Object[]{name}); System.out.println("返回的结果是:"+result); } catch (ServiceException e) { e.printStackTrace(); } } }
如果一切正常,运行结果如下:
返回的结果是:您好花非花雾非雾!
参考资料:
1. axis 的官方资料