本文主要介绍一些旧的环境,比如JDK1.5,JBOSS4,如何实现WebService 并支持Session的方法。
最近遇到顽固的客户(停留在JDK1.5,JBOSS4),加上技术掉队的设计师(各种奇葩:WS里设计了Session,还停留在JSP/Serverlet时代;放着SpringSocket通讯不用,再部署一个NodeJS的Express服务器来实现即时通讯)
但是悲惨的是,哥遇到了,哥能怎么办呢。还好哥哥我各种奇葩都能应付。善哉善哉。。。。
理论上讲AXIS2已经出来很多年了, 基本上除了史前环境没有人还会用AXIS构建WebService,写篇文章留作纪念
废话不多说,直奔主题。
开发环境,
Tomcat5 ,JDK1.5 ,(都EOL了,EndOfLife )如果需要数据库框架Mybatis的话,只能用3.1.0
Eclipse下建个DynamicWebProj,类名随意了,我是DemoServiceInterface
服务端基本用于测试写2个方法,
第一个主要功能 获得HttpSession,并且写入一点测试数据
public String getResponse1(){
MessageContext context = MessageContext.getCurrentContext();
HttpServletRequest req = (HttpServletRequest) context.getProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST);
HttpSession sc = req.getSession();
String sessionID = sc.getId();
//Session sc = context.getSession();
sc.setAttribute("id", sessionID);
sc.setAttribute("user", "demo");
System.out.println(sessionID);
return "getResponse1! SessionID:" + sessionID;
}
第二个主要功能 从HttpSession获取测试数据
public String getResponse2(){
MessageContext context = MessageContext.getCurrentContext();
HttpServletRequest req = (HttpServletRequest) context.getProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST);
HttpSession sc = req.getSession();
String tmp = (String) sc.getAttribute("id");
System.out.println(tmp);
return "getResponse2! SessionID:" + tmp;
}
新版的Eclipse在生成WS(点击鼠标右键,WebService,生成…)后的代码,居然Commonlog配置报错,EOL,没办法,申报BUG都没用的,
测了下直接删掉这个JAR,还好影响不大,服务器正常跑起来了
通过访问Service站点确认
http://localhost:8080/WebServiceProject/services/DemoServiceInterface
如果显示
DemoServiceInterface
Hi there, this is an AXIS service!
Perhaps there will be a form for invoking the service here...
表示正常。
接下来客户端调用部分,2个服务端方法调用的方式都一样,通过setOperationName可以换调用的对象。
Call call = (Call) client.createCall();
call.setOperationName("getResponse1");// 注意。这里是要调用的方法名
call.setTargetEndpointAddress(urlname);// 设置调用的目标url
String val = (String) call.invoke(new Object[] {});
System.out.println("Return From WebService:>>>>" + val);
客户端创建两个方法一个调用getResponse1实现建立HttpSession,另一个CallWebService获取Session里的值
好了,基本活干完了,写个测试一下。看看不同实例是不是返回不同的ID。
public static void main(String args[]) throws Exception {
Demo demo1 = new Demo();
Demo demo2 = new Demo();
demo1.CreateSession();
demo1.CallWebService();
demo1.CallWebService();
demo2.CreateSession();
demo1.CallWebService();
demo2.CallWebService();
demo2.CallWebService();
}
执行Main返回
Return From WebService:>>>>getResponse1! SessionID:66376BF1ECEBEDAAA3342810EE505F01
Return From WebService:>>>>getResponse2! SessionID:66376BF1ECEBEDAAA3342810EE505F01
Return From WebService:>>>>getResponse2! SessionID:66376BF1ECEBEDAAA3342810EE505F01
Return From WebService:>>>>getResponse1! SessionID:BE16299F2FEEF0B4A0456BA2AF8CEAA5
Return From WebService:>>>>getResponse2! SessionID:66376BF1ECEBEDAAA3342810EE505F01
Return From WebService:>>>>getResponse2! SessionID:BE16299F2FEEF0B4A0456BA2AF8CEAA5
Return From WebService:>>>>getResponse2! SessionID:BE16299F2FEEF0B4A0456BA2AF8CEAA5
可以发现返回的SessionID和实例对应。