六、 跨多个WebService管理Session
当多个WebService的时候,我们要管理它的Session。这个时候我们得依靠ServiceGroupContext保存session信息;
然后在发布WebService的时候,services.xml文件的的service表情的scope就不再说request或是transportsession了,
而是application;最后同样要开启对session的管理,即options.setManageSession(true);
1、 首先多个WebService的session管理的代码如下:
package com.hoo.service;import org.apache.axis2.context.MessageContext; import org.apache.axis2.context.ServiceGroupContext;/*** <b>function:</b>管理多个会话Session信息* @author hoojo* @createDate 2011-3-9 下午05:11:07* @file LoginSessionService.java* @package com.hoo.service* @project Axis2WebService* @blog http://blog.csdn.net/IBM_hoojo* @email hoojo_@126.com* @version 1.0*/ public class LoginSessionService {public boolean login(String userName, String password) {MessageContext context = MessageContext.getCurrentMessageContext();ServiceGroupContext ctx = context.getServiceGroupContext();if ("admin".equals(userName) && "123456".equals(password)) {ctx.setProperty("userName", userName);ctx.setProperty("password", password);ctx.setProperty("msg", "登陆成功");return true;}ctx.setProperty("msg", "登陆失败");return false;}public String getLoginMessage() {MessageContext context = MessageContext.getCurrentMessageContext();ServiceGroupContext ctx = context.getServiceGroupContext();return ctx.getProperty("userName") + "#" + ctx.getProperty("msg");} }
和上面的Session一样的操作,只不过是用ServiceGroupContext上下文来存取session信息
另外还需要用一个Service来查询session的信息,SearchService的代码如下:
package com.hoo.service;import org.apache.axis2.context.MessageContext; import org.apache.axis2.context.ServiceGroupContext;/*** <b>function:</b>查找多服务Session会话中的消息* @author hoojo* @createDate 2011-3-9 下午05:22:39* @file SearchSessionServcie.java* @package com.hoo.service* @project Axis2WebService* @blog http://blog.csdn.net/IBM_hoojo* @email hoojo_@126.com* @version 1.0*/ public class SearchSessionServcie {public String findSessionMessage(String key) {MessageContext mc = MessageContext.getCurrentMessageContext();ServiceGroupContext ctx = mc.getServiceGroupContext(); if (ctx.getProperty(key) != null) {return "找到的数据<" + key + ", " + ctx.getProperty(key) + ">";} else {return "没有找到<" + key + ">的数据";}} }
2、 编写services.xml来发布这2个服务,还以前不一样的。这一次是用一个services.xml文件配置2个service,同时发布2个服务。Xml代码如下:
<serviceGroup><service name="LoginSessionService" scope="application"><description>Web Service Session例子</description><parameter name="ServiceClass">com.hoo.service.LoginSessionService </parameter><messageReceivers><messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /><messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" /></messageReceivers></service><service name="SearchSessionService" scope="application"><description>Web Service Search Session例子</description><parameter name="ServiceClass">com.hoo.service.SearchSessionServcie </parameter><messageReceivers><messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /><messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" /></messageReceivers></service> </serviceGroup>
3、 发布完成后,可以通过http://localhost:8080/axis2/services/listServices查看发布的WebService服务,
编写客户端的测试代码,code如下:
package com.hoo.service;import javax.xml.namespace.QName; import org.apache.axis2.AxisFault; import org.apache.axis2.addressing.EndpointReference; import org.apache.axis2.client.Options; import org.apache.axis2.rpc.client.RPCServiceClient;/*** <b>function:</b>多会话Session管理,WebService客户端请求代码* @author hoojo* @createDate 2011-3-9 下午05:17:15* @file LoginSessionServiceClient.java* @package com.hoo.service* @project Axis2WebService* @blog http://blog.csdn.net/IBM_hoojo* @email hoojo_@126.com* @version 1.0*/ public class LoginSessionServiceClient {public static void main(String[] args) throws AxisFault {String target = "http://localhost:8080/axis2/services/LoginSessionService";RPCServiceClient client = new RPCServiceClient();Options options = client.getOptions();options.setManageSession(true);EndpointReference epr = new EndpointReference(target);options.setTo(epr);QName qname = new QName("http://service.hoo.com", "login");//指定调用的方法和传递参数数据,及设置返回值的类型Object[] result = client.invokeBlocking(qname, new Object[] { "admin", "123456" },
new Class[] { boolean.class });System.out.println(result[0]);qname = new QName("http://service.hoo.com", "getLoginMessage");result = client.invokeBlocking(qname, new Object[] { null }, new Class[] { String.class });System.out.println(result[0]);target = "http://localhost:8080/axis2/services/SearchSessionService";epr = new EndpointReference(target);options.setTo(epr);qname = new QName("http://service.hoo.com", "findSessionMessage");result = client.invokeBlocking(qname, new Object[] { "userName" }, new Class[] { String.class });System.out.println(result[0]);qname = new QName("http://service.hoo.com", "findSessionMessage");result = client.invokeBlocking(qname, new Object[] { "msg" }, new Class[] { String.class });System.out.println(result[0]);qname = new QName("http://service.hoo.com", "findSessionMessage");result = client.invokeBlocking(qname, new Object[] { "password" }, new Class[] { String.class });System.out.println(result[0]);} }
运行后结果如下:
true
admin#登陆成功
找到的数据<userName, admin>
找到的数据<msg, 登陆成功>
找到的数据<password, 123456>
4、 如果将services.xml文件<service name="SearchSessionService" scope="application">的内容改成scope=transportsession,看看什么情况。
是不是找不到session中的内容。
转载于:https://www.cnblogs.com/javaTest/archive/2011/03/16/2589369.html
六、 跨多个WebService管理Session相关推荐
- 信息系统项目管理师必背核心考点(六十)项目集管理
科科过为您带来软考信息系统项目管理师核心重点考点(六十)项目集管理,内含思维导图+真题 [信息系统项目管理师核心考点]项目集指导委员会 1.又称项目集治理委员会,主要负责定义并执行恰当的项目集治理体系 ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(十六):AccessToken自动管理机制
在<Senparc.Weixin.MP SDK 微信公众平台开发教程(八):通用接口说明>中,我介绍了获取AccessToken(通用接口)的方法. 在实际的开发过程中,所有的高级接口都需 ...
- hibernate 管理 Session(单独使用session,非spring)
hibernate 管理 Session(单独使用session,非spring) Hibernate 自身提供了三种管理 Session 对象的方法 Session 对象的生命周期与本地线程绑定 S ...
- js php调用webservice,js跨域调用WebService的使用方法
这次给大家带来js跨域调用WebService的使用方法,js跨域调用WebService的注意事项有哪些,下面就是实战案例,一起来看一下. 步骤1. 在web.config中的system.web节 ...
- Spring管理session的一些认识和用法心得
在项目开发中,使用了SSH框架集成时,多处都会用到Session.在对Session的使用维护上,有如下几种看法: 1.getCurrentSession(); 获得当前会话中的session,该se ...
- 第六讲:Obj-C 内存管理4 - 自动释放池
转:http://tigercat1977.blog.163.com/blog/static/2141561122012111294616203/ 第六讲:Obj-C 内存管理4 - 自动释放池 主要 ...
- hibernate java内存一次能取多少条_Hibernate管理Session和批量操作分析
本文详细分析了Hibernate管理Session和批量操作的用法.分享给大家供大家参考.具体分析如下: Hibernate管理Session Hibernate自身提供了三种管理Session对象的 ...
- 微软发布 Azure 物联网安全中心;阿里巴巴在美申请专利,以实现跨区块链统一管理;Google利用足球训练下一代人工智能……...
关注并标星星CSDN云计算 极客头条:速递.最新.绝对有料.这里有企业新动.这里有业界要闻,打起十二分精神,紧跟fashion你可以的! 每周三次,打卡即read 更快.更全了解泛云圈精彩news g ...
- vue 调用webservice_js跨域调用WebService的简单实例
步骤1. 在web.config中的system.web节点里加入 步骤2.webservice代码 using System; using System.Collections.Generic; u ...
最新文章
- red hat DHCP服务器配置
- as [Frame]元标签
- python好找工作吗2017-2017学什么编程语言好找工作?
- Linux - chmod
- C#/C++/Fortran 在32位/64位下数学计算性能对比
- 发布与安装Github Packages
- Faster RCNN与Mask RCNN
- R语言方差分解分析(Variation partition analysis)及其显著性检验
- ISUP信令REL原因值
- Oracle_登录数据库系统
- c语言入门:比较三个数的大小
- 浙江特大套路贷案具体经过是什么样?套路贷与普通贷款有什么区别
- yii gii的使用方法
- 白领久坐腰酸屁股痛 做做小运动可缓解(转)
- decode函数吗 jsp_decode 函数用法
- c语言程序设计培训课件打包,C语言程序设计实例PPT培训课件.ppt
- 缓和曲线段长度的计算分析
- myelicpes2019初次使用设置_【北通手柄设置】实况足球2019手柄操作设置教程-挖辣椒攻略...
- 校园导航系统----基于Qt
- GNOME3输入法图标
热门文章
- 浅谈 UNIX、Linux、ios、android 他们之间的关系
- Dataway让 Spring Boot 开发变得更高效!
- elasticsearch 删除满足条件的语句_ELK从入门到还未精通(二)——ElasticSearch上篇
- Vue 团队公开快如闪电的全新脚手架工具,未来将替代 Vue-CLI,才300余行代码,学它!...
- 使用数据增强技术提升模型泛化能力
- 如何正确选择仓储物流供应商?
- JavaScriptSerializer类 对象序列化为JSON,JSON反序列化为对象
- Android之上下文context
- 【错误解决】[Maven] cannot be opened because it does not exist错误[文件无法编译到target目录下的解决方法]...
- jQuery/javascript实现简单网页计算器