一、服务端发布:
1、jar包准备
官网下载Asix2,http://axis.apache.org/axis2/java/core/download.cgi
选择版本,下载bin后缀的文件
2、web.xml配置
<!-- axis2 -->
<servlet>
<servlet-name>AxisServlet</servlet-name>
<servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
3、编写一个服务类
/**
* 统一认证登陆接口
* @author
*
*/
public class LoginService {
@Autowired
UserService userService;
/**
* 业务系统传来token
* @param token 判断用户是否有认证凭据--ticket(认证中心生成)
* @return username,userId,登陆时间
*/
public UserInfo getUserInfo(String token){
String username = "";
UserInfo userInfo = new UserInfo();
if (null != token && !"".equals(token)) {
//如果token不为空,从缓存中获取username
username = RedisCache.get(token);
if(null!=username && !"".equals(username)){
//根据账户查询userid
User user = userService.queryUserByLoginName(username);
userInfo.setUserId(user.getId());
userInfo.setUserName(username);
//设置当前登录时间
userInfo.setLoginTime(System.currentTimeMillis());
}
}
return userInfo;
}
4、webservice配置文件services.xml
(1)services.xml
<?xml version="1.0" encoding="UTF-8"?>
<service name="LoginService"> <!-- 指定服务名,随便定义 -->
<description>测试axis2webservices</description><!-- 服务的作用说明,可写可不写 -->
<!-- 指定要发布的类路径 -->
<parameter name="ServiceClass"> <!-- 自定义 name-->
cn.my.web.webservice.LoginService <!-- 写的类路径 -->
</parameter>
<!-- 类里面的方法,有其他方法就在写个operation标签 -->
<operation name="getUserInfo"> <!-- 类里面的方法名 -->
<messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
</operation>
<operation name="logout"> <!-- 类里面的方法名 -->
<messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
</operation>
</service>
<messageReceivers>:用于设置处理WebService方法的处理器。
getUserInfo()方法有一个返回值,使用可处理输入输出的RPCMessageReceiver类,
对于某些方法没有返回值,使用只能处理输入的RPCInOnlyMessageReceiver类。
(2)serviceData.xml(此文件少了可能会报错)
<?xml version="1.0" encoding="UTF-8"?>
<ServiceData>
</ServiceData>
5、浏览器访问
http://localhost:8080/webServiceDemo/services/LoginService?wsdl
二、客户端动态调用
jar包
axis.jar
commons-discovery.jar
commons-logging-1.1.1.jar
jaxrpc.jar
wsdl4j-1.6.2.jar
调用代码
//调用接口服务
String requestUrl = "http://localhost:8080/webServiceDemo/services/LoginService?wsdl";
Object[] object = new Object[] { ticket };//请求参数
Service service = new Service();
try {
Call call = (Call)service.createCall();
call.setTargetEndpointAddress(requestUrl);// 远程调用路径
// 调用的命名空间和方法名
call.setOperationName(new QName("http://webservice.my.cn", "getUserInfo"));
call.setUseSOAPAction(true);
//可以在wsdl中找个这个地址
call.setSOAPActionURI("http://webservice.web.my.cn/getUserInfo");
//命名空间和参数名,参数名不可以随便写,参数名可以在wsdl文件中找到
call.addParameter(new QName("http://webservice.web.my.cn/","token"),
org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
call.setReturnType(XMLType.XSD_STRING);// 返回值类型:String
call.setTimeout(100000);//超时
String result = (String) call.invoke(object);// 远程调用
System.out.println(result);
} catch (ServiceException e1) {
e1.printStackTrace();
}