Axis单个Webservice的session管理
来源:互联网 发布:淘宝淘抢购类目群 编辑:程序博客网 时间:2024/05/16 19:32
1. 首先,还是先编写服务端的代码,服务端代码中用来记录用户登录的状态信息,并放在MessageContext的ServiceContext中,具体代码如下:
/** * WebService Session会话消息 * @author linwei * */public class LoginService {public boolean login(String userName, String password) {//通过MessageContext来进行session的管理MessageContext context = MessageContext.getCurrentMessageContext();ServiceContext ctx = context.getServiceContext();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();ServiceContext ctx = context.getServiceContext();return ctx.getProperty("userName ") + "# " + ctx.getProperty("msg ");}}
这里保存Session信息的主要是通过MessageContext这个上下文来获取ServiceContext的上下文,然后通过setProperty来保存session的信息,通过getProperty来获取session信息。 Session的作用可以在使用WebService登录的时候,保存用户的登录状态或是会话消息。但是使用session需要设置发布Service的时候,设置WebService的作用域。作用域默认是request,它还有另外三个值,分别是:application、soapsession、transportsession;我们可以选择使用transportsession和application分别实现同一个WebService类和跨WebService类的会话管理。
2. 需要编写services.xml文件的内容,scope默认的是request,这个地方的scope是关键,如果这里不设置的话session是无法存放信息。
编码如下:
<service name="loginService" scope="transportsession"> <description> description </description><!-- 这个应该是参数和返回值信息的解析类,in-only是输入也就是参数,in-out是输出也就是返回值。 --> <parameter name="ServiceClass">server.perfect.LoginService</parameter><messageReceivers> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" /> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/> </messageReceivers></service>
3. 进行客户端的编写
package client;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;public class LoginServiceTest {public static void main(String[] args) throws AxisFault {//RPCServiceClient是RPC方式调用RPCServiceClient client = new RPCServiceClient();Options options = client.getOptions(); //设置调用WebService的URL String address = "http://localhost:8080/axis2/services/loginService";EndpointReference epf = new EndpointReference(address); options.setTo(epf);//这边是设置SESSION打开的状态(重要)options.setManageSession(true);QName qname = new QName("http://perfect.server", "login");//指定调用的方法和传递参数数据,及设置返回值的类型 Object[] result = client.invokeBlocking(qname, new Object[] { "admin ", "123456 " }, new Class[] { boolean .class });System.out.println(result[0]);qname = new QName("http://perfect.server", "getLoginMessage");result = client.invokeBlocking(qname, new Object[] { null }, new Class[] { String.class });System.out.println(result[0]);}}
执行后,结果如下:
true
admin#登陆成功
要说明的是options.setManageSession(true );是开启对Session管理的支持
- Axis单个Webservice的session管理
- Axis单个Webservice的session管理
- Axis跨多个Webservice进行的Session管理
- WebService会话Session的管理
- 搭建Axis的WebService
- 五、WebService会话Session的管理
- 五、WebService会话Session的管理
- Axis2发布webservice(4)—WebService的session管理
- WebService中的Session管理
- 开发基于Axis的WebService
- axis做java的webservice
- axis webservice 的实现原理
- axis发布webservice的服务
- 安全的发布Axis Webservice
- axis调用webservice的学习
- WebService之axis的应用
- webservice axis
- WebService Axis
- fedora安装bochs
- jsp简介与内置对象
- 定时发推工具Buffer喜忧参半:获得40万美元投资,被踢出美国
- JSP探索
- C拾遗(二)Side Effect和Sequence Point
- Axis单个Webservice的session管理
- Oracle中的索引
- Referenced file contains errors (http://tuckey.org/res/dtds/urlrewrite2.6.dtd)
- this指针
- EL表达式
- DateTime.Now.Ticks和生成随机数
- java socket技术详解
- ubutu11.04上搭建git服务器
- gentoo 更新 相关