25
Axis WebService 技术指南
[tomcat-home]\\webapps\\axis2\\WEB-INF\\services
然后可以通过:http://localhost:8080/axis2/services/listServices 就可以查看刚才发布的服务了。
这样就完成手工发布打包发布WebService了 C、 编写WebService客户端的请求代码
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; /**
* function:LoginService Session客户端代码 * @author hoojo
* @createDate 2011-3-9 上午11:21:59 * @file LoginServiceClient.java * @package com.hoo.service * @project Axis2WebService
* @blog http://blog.csdn.net/IBM_hoojo * @email hoojo_@126.com * @version 1.0 */
public class LoginServiceClient {
public static void main(String[] args) throws AxisFault {
String target = //target =
RPCServiceClient client = new RPCServiceClient(); Options options = client.getOptions(); options.setManageSession(true);
EndpointReference epr = new EndpointReference(target); options.setTo(epr);
QName qname = new QName(\, //指定调用的方法和传递参数数据,及设置返回值的类型
Object[] result = client.invokeBlocking(qname, new System.out.println(result[0]);
\; \
\);
Object[] { \, \ }, new Class[] { boolean.class }); 欢迎转载 请保留原文作者信息 不得未经作者允许用于商业用途
26
Axis WebService 技术指南
} } qname = new QName(\, result = client.invokeBlocking(qname, new Object[] System.out.println(result[0]); \); { null }, new Class[] { String.class }); 执行后,结果如下:
true
admin#登陆成功
上面要说明的是options.setManageSession(true);是开启对Session管理的支持
五、 跨多个WebService管理Session
当多个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; /**
* function:管理多个会话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 = ServiceGroupContext ctx = if (\.equals(userName) &&
MessageContext.getCurrentMessageContext(); context.getServiceGroupContext(); \.equals(password)) {
欢迎转载 请保留原文作者信息 不得未经作者允许用于商业用途
27
Axis WebService 技术指南
}
}
}
ctx.setProperty(\, userName); ctx.setProperty(\, password); ctx.setProperty(\, \登陆成功\); return true;
ctx.setProperty(\, \登陆失败\); return false;
public String getLoginMessage() { }
MessageContext context = ServiceGroupContext ctx =
return ctx.getProperty(\) + \ +
MessageContext.getCurrentMessageContext(); context.getServiceGroupContext(); ctx.getProperty(\);
和上面的Session一样的操作,只不过是用ServiceGroupContext上下文来存取session信息
另外还需要用一个Service来查询session的信息,SearchService的代码如下:
package com.hoo.service;
import org.apache.axis2.context.MessageContext; import org.apache.axis2.context.ServiceGroupContext; /**
* function:查找多服务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) {
欢迎转载 请保留原文作者信息 不得未经作者允许用于商业用途
28
Axis WebService 技术指南
return \找到的数据<\ + key + \\ + ctx.getProperty(key) + \; } else { return \没有找到<\ + key + \的数据\; } } } 2、 编写services.xml来发布这2个服务,还以前不一样的。这一次是用一个
services.xml文件配置2个service,同时发布2个服务。Xml代码如下:
Web Service Search Session例子
com.hoo.service.SearchSessionServcie
Web Service Session例子 com.hoo.service.LoginSessionService mep=\ class=\ \ /> mep=\ class=\ ceiver\ /> mep=\ class=\ \ /> 欢迎转载 请保留原文作者信息 不得未经作者允许用于商业用途 29 Axis WebService 技术指南 查看发布的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; /** * function:多会话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 = RPCServiceClient client = new RPCServiceClient(); Options options = client.getOptions(); options.setManageSession(true); EndpointReference epr = new EndpointReference(target); options.setTo(epr); QName qname = new QName(\, //指定调用的方法和传递参数数据,及设置返回值的类型 \; \); 欢迎转载 请保留原文作者信息 不得未经作者允许用于商业用途