今天尝试着用Axis开发Web service,看来网上几个帖子之后,将自己尝试的过程分享下。
概念:soap(简答对象访问协议)、wsdl(web服务描述语言)、xml(可扩展标记语言)、axis(阿帕奇可扩展交换系统)
一、Axis环境的配置
1、去官网下载axis-bin-1_4.zip
http://axis.apache.org/axis/
http://apache.fayea.com/apache-mirror/axis/axis/java/1.4/
2、下载 Axis依赖包 geronimo-activation-1.0.jar、xmlsec-2.0.0-rc1.jar、mail-1.4.1.jar 可以去maven的中央数据库下载。
http://search.maven.org/#browse
3、将axis-bin-1_4.zip解压,目录下的axis-1_4\webapps\ 中的axis发布到tomcat中,同时将Axis的3个依赖包考到项目的WEB-INF\lib下, 运行tomcat。
4、配置环境变量(ps:感觉不用配置环境变量,不过我还是配置了,有兴趣自己尝试!)配置方法类似jdk的环境变量。
AXIS_HOME= E:\apache-tomcat-6.0.37-windows-x86\apache-tomcat-6.0.37\webapps\axis
AXIS_LIB=%AXIS_HOME%\lib
AXISCLASSPATH=%AXIS_LIB%\axis.jar;%AXIS_LIB%\commons-discovery-0.2.jar;%AXIS_LIB%\commons-logging-
1.0.4.jar;%AXIS_LIB%\jaxrpc.jar;%AXIS_LIB%\saaj.jar;%AXIS_LIB%\log4j-1.2.8.jar;AXIS_LIB%\xml-apis.jar;%AXIS_LIB%\xercesImpl.jar
二编写wsdd发布web服务
1、入参,RequestBean
package com.webservice.bean;
public class RequestBean {
private String msg;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
2、回参,ResponseBean
package com.webservice.bean;
public class ResponseBean {
private int code;
private String msg;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
3、service方法
package com.webservice.service;
import com.webservice.bean.RequestBean;
import com.webservice.bean.ResponseBean;
public class BusinessService {
public ResponseBean send(RequestBean requestBean){
ResponseBean res = new ResponseBean();
if(requestBean != null && !requestBean.getMsg().trim().equals("")){
res.setCode(0);
res.setMsg("收到消息:"+requestBean.getMsg());
System.out.println(res.getMsg());
}else{
res.setCode(-1);
res.setMsg("调运失败!");
System.out.println("调运失败!");
}
return res;
}
}
4、在工程的WEB-INF目录下,编写deploy.wsdd
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="BusinessService" provider="java:RPC">
<parameter name="className" value="com.webservice.service.BusinessService" />
<parameter name="allowedMethods" value="*" />
<beanMapping qname="myNS:RequestBean" xmlns:myNS="urn:BeanService" languageSpecificType="java:com.webservice.bean.RequestBean" />
<beanMapping qname="myNS:ResponseBean" xmlns:myNS="urn:BeanService" languageSpecificType="java:com.webservice.bean.ResponseBean" />
</service>
</deployment>
在工程的WEB-INF目录下,编写undeploy.wsdd(用来卸载webservice服务)
<undeployment xmlns="http://xml.apache.org/axis/wsdd/">
<service name="BusinessService"/>
</undeployment>
5、部署项目(java文件,自己编译,放到相应目录下),启动tomcat,使用cmd,进入axis项目中的web-inf目录,
发布webservice服务
java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -lhttp://localhost:8080/axis/servlet/AxisServlet deploy.wsdd
取消webservice服务
java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -lhttp://localhost:8080/axis/servlet/AxisServlet undeploy.wsdd
6、访问 http://localhost:8080/axis/servlet/AxisServlet,如果出现刚刚新增的BusinessService 服务说明发布成功
三编写client访问web服务,生成客户端代码
1、获取webservice接口的wsdl文件,访问:http://localhost:8080/axis/servlet/AxisServlet,点击 方法后边的(wsdl)链接,跳转到wsdl内容页面,复制wsdl中的xml内容保 存成文本, 去掉每行的"-",命名为BusinessService.wsdl。
2、使用myeclipse新建web工程,testWebservice,导入Axis jar包到web-inf中lib目录下。将BusinessService.wsdl考到web-inf下。
在web-inf下生产工具文件(wsdl生成java客户端文件.bat),执行文件“wsdl生成java客户端文件.bat”,生产客户端代码。
set Axis_Lib=D:\Workspaces\MyEclipse10\testWebservice\WebRoot\WEB-INF\lib
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
set Output_Path=D:\Workspaces\MyEclipse10\testWebservice\src
set Package=com.webservice.impl
%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package% D:\Workspaces\MyEclipse10\testWebservice\WebRoot\WEB-INF\BusinessService.wsdl
@echo -------------OK-----------------
@echo ---The code has been created in the folder: Testclient---
@pause
(ps:Axis_Lib 是Axisjar包的位置,Output_Path输出位置,Package包名称)
3编写测试类teseWebservice(使用JUnit4 测试)
package com.test;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import org.junit.Test;
import com.webservice.impl.BusinessServiceService;
import com.webservice.impl.BusinessServiceServiceLocator;
import com.webservice.impl.BusinessService_PortType;
import com.webservice.impl.RequestBean;
import com.webservice.impl.ResponseBean;
public class teseWebservice {
@Test
public void test() throws ServiceException, RemoteException{
// BusinessServiceService为接口;BusinessServiceServiceLocator为接口实现类
BusinessServiceService service = new BusinessServiceServiceLocator();
// 设置要使用的接口服务地址:多用于动态调用不同服务器上的接口
//URL portAddress = new URL("http://localhost:8080/axis/services/BusinessService");
BusinessService_PortType client = (BusinessService_PortType) service.getBusinessService();
// 传参数bean
RequestBean requestBean = new RequestBean();
requestBean.setMsg("jiaqi service");
// 发送并接收返回的结果
ResponseBean resp = client.send(requestBean);
int code = resp.getCode();
String errorMsg = resp.getMsg();
System.out.println("消息已返回,code=" + code + ",errorMsg=" + errorMsg);
}
}
如果返回正确结果那么说明webservice结果正确。
-----------------------------------------------------------------------------------------------------------------------------