1. 环境准备
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:8080/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 2015-08-27
*/
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();
}
}}
如果一切正常,运行结果如下:
返回的结果是:您好观测者!
转载请注明:观测者 » Axis通过wsdd部署Web Service