Axis2发布webservice(4)—WebService的session管理

一、WebService中添加session管理代码,用到了MessageContext类和ServiceContext类。代码如下:

package com.hoo.service;

import org.apache.axis2.context.MessageContext;
import org.apache.axis2.context.ServiceContext;

public class LoginService {

    //登陆方法
    public boolean login(String userName,String password){

        //实例化一个MessageContext对象
        MessageContext context = MessageContext.getCurrentMessageContext();

        //获取ServiceContext对象,该对象是用来管理单个webservice中session对象的
        ServiceContext ctx = context.getServiceContext();

        if("admin".equals(userName)&&"123456".equals(password)){

            //在session中添加属性和值
            ctx.setProperty("username", userName);
            ctx.setProperty("password", password);
            ctx.setProperty("msg","登陆成功");
            return true;
        }else{
            ctx.setProperty("msg", "登陆失败");
            return false;
        }
    }

    public String getLoginMessage(){
        MessageContext context = MessageContext.getCurrentMessageContext();
        ServiceContext ctx = context.getServiceContext();

        //获取session中的属性值
        String msg = ctx.getProperty("username")+","+ctx.getProperty("msg");
        return msg;
    }

}

这里保存Session信息是通过MessageContext上下文来获取ServiceContext的上下文,然后通过setProperty来保存session的信息,通过getProperty来获取session信息。

Session的作用是可以在WebService登录的时候,保存用户的登录状态或是会话消息。

WebService的作用域默认是request,它还有另外三个值,分别是:application、soapsession、transportsession;我们可以选择使用transportsession和application分别实现同一个WebService类和跨WebService类的会话管理。

二、发布webservice,修改services.xml文件

利用eclipse的axis2插件发布webservice之后,需要用解压文件打开AAR文件,找到WEB-INF文件夹下的services.xml文件,

在<service name="LoginService" scope="transportsession">添加对作用域的说明。

 

三、 编写WebService客户端的请求代码

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 LoginWebServiceClient {

    public static void main(String[] args) throws AxisFault {

        String target = "http://localhost:8080/axis2/services/LoginService";

        RPCServiceClient client = new RPCServiceClient();
        Options options = client.getOptions();

        //打开对session的支持
        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]);
    }}

执行后,结果如下:

true

admin,登陆成功

Axis2发布webservice(4)—WebService的session管理

时间: 2024-11-09 04:39:58

Axis2发布webservice(4)—WebService的session管理的相关文章

webService总结(四)——使用axis2发布和调用webService

准备工作 Axis2 官网 http://axis.apache.org/  下载axis2相关资料 其中 axis2-1.6.2-bin.zip文件中包含了Axis2中所有的jar文件, axis2-1.6.2-war.zip文件用于将WebService发布到Web容器中.最后两个是axis2在eclipse中的插件. 大概说说这几个文件如何使用. 1.解压axis2-1.6.2-bin.zip到任意目录.然后在eclipse中按下图配置. 2.将axis2-1.6.2-war.zip文件解

Axis2发布webservice(4)&mdash;利用XML文件同时发布多个webservice和跨多个WebService管理Session

我们需要ServiceGroupContext保存跨越多个webservice的session信息:同时需要设置services.xml文件的中service的scope属性为application 一.编写两个webservice: LoginServiceApplication.java代码如下: package com.hoo.service; import org.apache.axis2.context.MessageContext; import org.apache.axis2.c

Axis2发布webservice(2)--利用eclipse的axis2插件打包为arr发布

一.编写webservice的java文件 在eclipse中新建java project,然后新建一个java类,我这里命名为:ManagerUserService.java,源代码: package com.hoo.service; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random; import

Axis2发布webservice(4)&mdash;webservice的异步调用

一,发布一个webservice,代码如下 package com.hoo.service; public class AsynchronousService { public String execute() throws InterruptedException{ //让当前线程睡眠5钟,展示异步调用 Thread.sleep(5000); return "done"; } } 二.发布Service,参见前面教程,不多讲 三.RPC方式异步调用: import java.io.I

tomcat 用AXIS2发布WebService 网站的方法

Axis2+tomcat7.0 实现webService 服务端发布与客户端的调用. Aixs2开发webService的方法有很多,在此只介绍一种比较简单的实现方法. 第一步:首先要下载开发所需要的jar包 下载: axis2-1.6.2-war.zip  http://www.apache.org/dist//axis/axis2/Java/core/1.6.2/ 下载完后将axis2.war放至tomcat安装目录下的webapps文件夹下,然后启动tomcat后,在webapps目录下会

用AXIS2发布WebService的方法(转)

Axis2+tomcat6.0 实现webService 服务端发布与客户端的调用. 第一步:首先要下载开发所需要的jar包 下载:axis2-1.6.1-war.zip http://www.apache.org/dist//axis/axis2/java/core/1.6.1/ 下载完后解压至tomcat安装目录下的webapps文件夹下,启动tomcat后,在webapps目录下会生成axis2文件夹. 访问http://localhost:8080/axis2/能看到以下页面表示axis

Axis2发布webservice(1)--0配置发布

Axis2发布webservice(1)--0配置发布webservice 一. 准备工作 1.下载axis2程序包:   http://axis.apache.org/axis2/java/core/download.cgi      下载时选择Binary Distribution版本的zip格式文件和WAR Distribution的zip格式文件,总共2个zip文件:      axis2-1.6.2-bin.zip:包含axis2是所有jar包,再编程时根据需要将解压后的lib文件夹下

myeclipse上spring+mybatis+axis2发布webservice接口的问题及个人实现的方式

前提: 这个月的突然一天,有个项目对接需要使用axis2发布的接口,这下难倒我了,毕竟之前我是连webservice接口都不知怎么发布的.后来从HelloWorld开始发布了第一个接口--sayHi();到这一步的时候都是很顺利的,唯独和axis2整合的时候,出现问题了,spring的dao层在axis2发布后的接口里,一直为null,貌似是spring一直没有被初始化,这期间我测试过按照正常流程来执行一个请求,是正确的,唯独和axis2整合后就不行了,在这测试的时间内,很痛苦,很痛苦,所有能想

webservice发布--使用axis2发布

如何使用axis2发布webservice? axis2发布webservice分为打包发布和不打包发布两种,今天主要研究了一下打包发布的方法 1.部署axis2框架(使用tomcat部署) 1.1 下载axis2的war包,测试使用的war包为axis2-1.6.2-war.zip,解压获得axis2.war包 1.2 将axis2.war包拷贝到%Tomcat_Home%/webapps目录下,然后启动tomcat,启动成功之  后访问http://localhost:8080/axis2,