当多个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. 信息系统项目管理师必背核心考点(六十)项目集管理

    科科过为您带来软考信息系统项目管理师核心重点考点(六十)项目集管理,内含思维导图+真题 [信息系统项目管理师核心考点]项目集指导委员会 1.又称项目集治理委员会,主要负责定义并执行恰当的项目集治理体系 ...

  2. Senparc.Weixin.MP SDK 微信公众平台开发教程(十六):AccessToken自动管理机制

    在<Senparc.Weixin.MP SDK 微信公众平台开发教程(八):通用接口说明>中,我介绍了获取AccessToken(通用接口)的方法. 在实际的开发过程中,所有的高级接口都需 ...

  3. hibernate 管理 Session(单独使用session,非spring)

    hibernate 管理 Session(单独使用session,非spring) Hibernate 自身提供了三种管理 Session 对象的方法 Session 对象的生命周期与本地线程绑定 S ...

  4. js php调用webservice,js跨域调用WebService的使用方法

    这次给大家带来js跨域调用WebService的使用方法,js跨域调用WebService的注意事项有哪些,下面就是实战案例,一起来看一下. 步骤1. 在web.config中的system.web节 ...

  5. Spring管理session的一些认识和用法心得

    在项目开发中,使用了SSH框架集成时,多处都会用到Session.在对Session的使用维护上,有如下几种看法: 1.getCurrentSession(); 获得当前会话中的session,该se ...

  6. 第六讲:Obj-C 内存管理4 - 自动释放池

    转:http://tigercat1977.blog.163.com/blog/static/2141561122012111294616203/ 第六讲:Obj-C 内存管理4 - 自动释放池 主要 ...

  7. hibernate java内存一次能取多少条_Hibernate管理Session和批量操作分析

    本文详细分析了Hibernate管理Session和批量操作的用法.分享给大家供大家参考.具体分析如下: Hibernate管理Session Hibernate自身提供了三种管理Session对象的 ...

  8. 微软发布 Azure 物联网安全中心;阿里巴巴在美申请专利,以实现跨区块链统一管理;Google利用足球训练下一代人工智能……...

    关注并标星星CSDN云计算 极客头条:速递.最新.绝对有料.这里有企业新动.这里有业界要闻,打起十二分精神,紧跟fashion你可以的! 每周三次,打卡即read 更快.更全了解泛云圈精彩news g ...

  9. vue 调用webservice_js跨域调用WebService的简单实例

    步骤1. 在web.config中的system.web节点里加入 步骤2.webservice代码 using System; using System.Collections.Generic; u ...

最新文章

  1. red hat DHCP服务器配置
  2. as [Frame]元标签
  3. python好找工作吗2017-2017学什么编程语言好找工作?
  4. Linux - chmod
  5. C#/C++/Fortran 在32位/64位下数学计算性能对比
  6. 发布与安装Github Packages
  7. Faster RCNN与Mask RCNN
  8. R语言方差分解分析(Variation partition analysis)及其显著性检验
  9. ISUP信令REL原因值
  10. Oracle_登录数据库系统
  11. c语言入门:比较三个数的大小
  12. 浙江特大套路贷案具体经过是什么样?套路贷与普通贷款有什么区别
  13. yii gii的使用方法
  14. 白领久坐腰酸屁股痛 做做小运动可缓解(转)
  15. decode函数吗 jsp_decode 函数用法
  16. c语言程序设计培训课件打包,C语言程序设计实例PPT培训课件.ppt
  17. 缓和曲线段长度的计算分析
  18. myelicpes2019初次使用设置_【北通手柄设置】实况足球2019手柄操作设置教程-挖辣椒攻略...
  19. 校园导航系统----基于Qt
  20. GNOME3输入法图标

热门文章

  1. 浅谈 UNIX、Linux、ios、android 他们之间的关系
  2. Dataway让 Spring Boot 开发变得更高效!
  3. elasticsearch 删除满足条件的语句_ELK从入门到还未精通(二)——ElasticSearch上篇
  4. Vue 团队公开快如闪电的全新脚手架工具,未来将替代 Vue-CLI,才300余行代码,学它!...
  5. 使用数据增强技术提升模型泛化能力
  6. 如何正确选择仓储物流供应商?
  7. JavaScriptSerializer类 对象序列化为JSON,JSON反序列化为对象
  8. Android之上下文context
  9. 【错误解决】[Maven] cannot be opened because it does not exist错误[文件无法编译到target目录下的解决方法]...
  10. jQuery/javascript实现简单网页计算器