Axis2发布与调用webservice

一、服务端发布:

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();
			}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值