首先保证你已配置好Axis2。
?
实现同一个WebService的Session管理需要如下三步:
?
1.?使用MessageContext和ServiceContext获得与设置key-value对。
2.?为要进行Session管理的WebService类所对应的<service>元素添加一个scope属性,并将该属性值设为transportsession。
3.?在客户端使用setManageSession(true)打开Session管理功能。
?
下面是一个在同一个WebService类中管理Session的例子
?
在Eclipse中新建一个webservice工程,如命名为:SessionWebService,建立一个WebService类,代码如下:
?
package?service;
import?org.apache.axis2.context.ServiceContext;
?org.apache.axis2.context.MessageContext;
public?class?LoginService
{
????boolean?login(String?username,?String?password)
????{
????????if("bill".equals(username)?&&?"1234".equals(password))
????????{
????????????//??第1步:设置key-value对
????????????MessageContext?mc?=?MessageContext.getCurrentMessageContext();
????????????ServiceContext?sc?=?mc.getServiceContext();
????????????sc.setProperty("login",?"成功登录");????
????????????returntrue;
????????}
????????else
????????{
????????????false;
????????}
????}
????public?String?getLoginMsg()
????{
????????步:获得对中的value
????????MessageContext?mc?=?MessageContext.getCurrentMessageContext();
????????ServiceContext?sc?=?mc.getServiceContext();
????????return?(String)sc.getProperty("login");????
????}
}
在LoginService类中有两个方法:login和getLoginMsg,如果login方法登录成功,会将“成功登录”字符串保存在ServiceContext对象中。如果在login方法返回true后调用getLoginMsg方法,就会返回“成功登录”。
下面是LoginService类的配置代码(services.xml):
<!--??第2步:添加scope属性??-->
<service?name="loginService"?scope="transportsession">
????description>
????????登录服务
????????</parameter?="ServiceClass">
????????service.LoginService
????????parametermessageReceiversmessageReceiver?mep="http://www.w3.org/2004/08/wsdl/in-out"
????????????class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"?/>service>
?
使用如下的命令生成客户端使用的stub类:
%AXIS2_HOME%/bin/wsdl2java?-uri?http://localhost:8080/axis2/services/loginService?wsdl?-p?client?-s?-o?stub
在stub/src/client目录中生成了一个LoginServiceStub.java类,在该类中找到如下的构造句方法:
public?LoginServiceStub(org.apache.axis2.context.ConfigurationContext?configurationContext,
????????java.lang.String?targetEndpoint,?boolean?useSeparateListener)
????????throws?org.apache.axis2.AxisFault?
{
???? ?
??? _serviceClient.getOptions().setSoapVersionURI(
???????????????????????????????? org.apache.axiom.soap.SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI);
}
在该方法中最后添加如下的代码://??3步:打开客户端的Session管理功能
_serviceClient.getOptions().setManageSession(true);
?
?
下面的客户端代码使用LoginServiceStub对象访问了刚才建立的WebService:
package test;
import client.LoginServiceStub;
public class TestClient
{
?public static void main(String[] args)
?{
??try
??{
???LoginServiceStub stub = new LoginServiceStub();
???LoginServiceStub.Login login = new LoginServiceStub.Login();
???login.setUsername("bill");
???login.setPassword("1234");
???if(stub.login(login).local_return)
???{
?????? System.out.println(stub.getLoginMsg().local_return);
???}
??}
??catch (Exception e)
??{
?????? e.printStackTrace();
??}
?}
}
运行上面的代码后,会输出“成功登录”信息。