Axis2 Web Services 中使用session的配置及使用方法

简介: 在这里我将使用一个简单的Web Service 示例的方式演示一下在Axis2 Web Service 中使用session 的方法。在这个Service 具有登录和取得已登录用户的用户名两个功能。

在这里我将使用一个简单的Web Service 示例的方式演示一下在Axis2 Web Service 中使
用session 的方法。在这个Service 具有登录和取得已登录用户的用户名两个功能。
此示例中所使用的工具:
1.eclipse3.1。
2.Axis2(Apache Axis2 SNAPSHOT build (July 30, 2006) Standard Binary Release)
3.Microsoft Visual C# 2005 Express Edition
4.apache-tomcat-5.5.15(注意:Axis2 必须使用Tomcat5.5)
5.
1.在eclipse中新建一个java工程Axis2SessionDemo(如下图),开始编写wsdl文件
UserServices.wsdl(内容如下)。
Axis2SessionDemo 工程结构
UserServices.wsdl
<?xml version="1.0" encoding="UTF-8"?>
xmlns:tns="http://sysguard.livedoor.cn/UserServices/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="UserServices"
targetNamespace="http://sysguard.livedoor.cn/UserServices/">

targetNamespace="http://sysguard.livedoor.cn/UserServices/">





type="xsd:string">






UserServices.wsdl































element="tns:getUsernameResponse">



element="tns:getUsernameRequest">









2.使用Axis2 的WSDL2java.bat工具和UserServices.wsdl文件生成Web Service 的服务器端
的Java代码。生成之后的结构如下图:
生成代码的命令如下(没有换行)
D:\tools\axis2-std-SNAPSHOT-bin\bin\WSDL2java.bat -ss -sd -p cn.livedoor.sysguard -o
D:\java_projects\workspace\Axis2SessionDemo -uri
D:\java_projects\workspace\Axis2SessionDemo\UserServices.wsdl
生成服务器端代码之后工程结构
3.修改resources\services.xml 文件,配置Service 提供Session的功能。
在services.xml文件中找到如下左边内容,并将此内容替换为如下右边内容。

4.新建一个cn.livedoor.sysguard.Constants.java类,用来保存在session 中保存数据的标识。内
容如下:


cn.livedoor.sysguard.Constants.java
package cn.livedoor.sysguard;
public class Constants {

//在session 中存放用户ID的标识
public static final String USER_ID = "userid";

//在session 中存放密码的标识
public static final String USER_PASSWORD = "password";
}


5.在cn.livedoor.sysguard.UserServicesSkeleton.java类中编写业务逻辑方法。需增加业务内容
的方法:login, getUsername。增加的其它方法:setOperationContext。内容如下:
cn.livedoor.sysguard.UserServicesSkeleton.java
/**
* UserServicesSkeleton.java
*
* This file was auto-generated from WSDL
* by the Apache Axis2 version: SNAPSHOT Jul 30, 2006 (08:21:11 GMT 00:00)
*/
package cn.livedoor.sysguard;
import org.apache.axis2.AxisFault;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.context.OperationContext;
import org.apache.axis2.context.SessionContext;
import org.apache.axis2.wsdl.WSDLConstants;
import cn.livedoor.sysguard.userservices.GetUsernameResponse;
import cn.livedoor.sysguard.userservices.LoginResponse;
/**
* UserServicesSkeleton java skeleton for the axisService
*/
public class UserServicesSkeleton {
SessionContext sessionCnt = null;
/**
* 在每次业务方法调用之前都先调用此方法。 在此方法中用来获得sessionContext。
*
* @param operationContext
* @throws AxisFault
*/
public void setOperationContext(OperationContext operationContext)
throws AxisFault {
System.out.println(" setOperationContext start ");
MessageContext msgCnt = operationContext
.getMessageContext(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
this.sessionCnt = msgCnt.getSessionContext();
System.out.println(" setOperationContext end ");
}
cn.livedoor.sysguard.UserServicesSkeleton.java
/**
* 业务方法 在此例中用来将客户端传送过来的数据保存至sessionContext 中。
*
* Auto generated method signature
*
* @param param0
*
*/
public cn.livedoor.sysguard.userservices.LoginResponse login(
cn.livedoor.sysguard.userservices.LoginRequest param0)
throws AxisFault
{
System.out.println(" login start ");
String ret = "";
LoginResponse res = new LoginResponse();
String userID = param0.getUserID();
String password = param0.getPassword();
setProperty(Constants.USER_ID, userID);
setProperty(Constants.USER_PASSWORD, password);
ret = "userID: " userID " password: " password "\n";
System.out.println(ret);
res.set_return(ret);
System.out.println(" login success end ");
return res;
}
/**
* 业务方法 在此例中用来将保存至sessionContext 中的数据取出并返回给客户端。
*
* Auto generated method signature
*
* @param param2
*
*/
public cn.livedoor.sysguard.userservices.GetUsernameResponse getUsername(
cn.livedoor.sysguard.userservices.GetUsernameRequest param2)
{
System.out.println(" getUserName start ");
String ret = "";
GetUsernameResponse res = new GetUsernameResponse();
cn.livedoor.sysguard.UserServicesSkeleton.java
String param2_userid = "param2.getUserID(): " param2.getUserID()
"\n";
String userID = getProperty(Constants.USER_ID);
String password = getProperty(Constants.USER_PASSWORD);
ret = param2_userid " userID: " userID " password: " password;
res.set_return(ret);
System.out.println(ret);
System.out.println(" getUserName success end ");
return res;
}
/**
* 私有方法 用来将数据保存至sessionContext 中。
*
* @param name
* @param value
* @throws AxisFault
*/
private void setProperty(String name, String value) throws AxisFault {
System.out.println("setProperty name: " name " value: " value);
sessionCnt.setProperty(name, value);
}
/**
* 私有方法 用来将保存至sessionContext 中的数据取出。
*
* @param name
* @return
*/
private String getProperty(String name) {
String value = (String) sessionCnt.getProperty(name);
String result = "getProperty name: " name " value: " value;
System.out.println(result);
return value;
}
}
6.到此为至服务器端Java代码已全部完成。现在将此工程打包为一个.aar 包。
1.在eclipse中打开ant视图,并将WSDL2Java生成的build.xml加入。
2.运行build.xml 中的jar.server 任务生成UserServices.aar 包。
3.运行2 中的命令之后将会新生成一个build 目录,生成包的位置在工程中:
build\lib\UserServices.aar。
运行jar.server任务之后的工程结构
7.现在配置Axis2,使Axis2 打开支持Session 的功能。找到axis2.war 在Tomcat中解开之后
的位置,例如:C:\apache-tomcat-5.5.15\webapps\axis2(以下就将此目录简称为axis2 Web应
用目录)。然后在此目录(axis2 Web 应用目录)中的WEB-INF\conf 目录下有一个名为
axis2.xml的文件,打开此文件,并将如下图中左边内容替换为右边内容。
Axis2.xml
locked="false">false
locked="false">true
8.将步骤6 中生成的UserServices.aar 包复制至axis2 Web 应用目录中的WEB-INF\services
中,启动Tomcat。
这样整个Web Services的服务器端都已经配置完毕,接下来编写C#客户端的代码。
在客户端A
1.新建一个ConsoleApplication 工程Axis2SessionClientDemo。
2.在”References”上面点击右键,选择”Add Web References”。
3.输入”Http://localhost:8080/axis2/services/UserServices?wsdl”,设置该引用的名称为
“UserServices”。增加引用完成。
4.打开Program.cs 增加如下代码:
Program.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Program.cs
UserServices.UserServices service = new ConsoleApplication1.UserServices.UserServices();
CookieContainer cookieContainer = new CookieContainer();
service.CookieContainer = cookieContainer;
UserServices.loginRequest loginReq = new ConsoleApplication1.UserServices.loginRequest();
loginReq.userID = "whxy";
loginReq.password = "whxy_password";
UserServices.loginResponse loginRes = service.login(loginReq);
UserServices.UserServices service1 = new ConsoleApplication1.UserServices.UserServices();
//CookieContainer cookieContainer1 = new CookieContainer();
service1.CookieContainer = service.CookieContainer;
UserServices.getUsernameRequest req = new ConsoleApplication1.UserServices.getUsernameRequest();
req.userID = "00001";
UserServices.getUsernameResponse res = service1.getUsername(req);
UserServices.getUsernameResponse res1 = service1.getUsername(req);
UserServices.getUsernameResponse res2 = service1.getUsername(req);
UserServices.getUsernameResponse res3 = service1.getUsername(req);
UserServices.getUsernameResponse res4 = service1.getUsername(req);
UserServices.getUsernameResponse res5 = service1.getUsername(req);
System.Console.WriteLine(res.@return);
}
}
}
5.在客户端B 做跟客户端A 同样的内容,并且将传递给服务器端的数据修改为
loginReq.userID = "tister";
loginReq.password = "tister_password";
req.userID = "999999";
6.在调试状态下,将客户端A 的程序运行至
UserServices.getUsernameResponse res1 = service1.getUsername(req);
查看res的返回结果。
7.在调试状态下,将客户端B 的程序也运行至
UserServices.getUsernameResponse res1 = service1.getUsername(req);
查看res的返回结果。
8.再将客户端A 的程序运行至
UserServices.getUsernameResponse res2 = service1.getUsername(req);
查看res1 的返回结果。
9.对比第6 步中客户端A 的res与第8 步中客户端A的res1 的返回结果,这两次的返回结果
是一样的,期望的也是一样的,因为这两次方法调用都是从同一个客户端访问的。再对比第
7 步中客户端B 的res与第8 步中客户端A 的res1 的返回结果,这两次的返回结果将是不一
样的,期望的结果是不一样,因为此时客户端A 已经成功登录,并且将数据保存在服务器
端的session 中了,而后客户端B 也登录至服务器,并将数据保存在服务器端的session 中
了,不同的客户端之间保存的数据是相互独立的,相互之间并没有什么影响,所以达到了最
终的目的。
10.注意:在第一次服务调用时一定要先创建CookieContainer,并且在以后的每次服务调用
都要将第一次返回的CookieContainer 发送至服务器端,以标识该请求是同一客户端的请
求。
UserServices.UserServices service = new ConsoleApplication1.UserServices.UserServices();
CookieContainer cookieContainer = new CookieContainer();
service.CookieContainer = cookieContainer;
UserServices.UserServices service1 = new ConsoleApplication1.UserServices.UserServices();
service1.CookieContainer = service.CookieContainer;
《完》


目录
相关文章
|
3天前
|
XML JSON API
Understanding RESTful API and Web Services: Key Differences and Use Cases
在现代软件开发中,RESTful API和Web服务均用于实现系统间通信,但各有特点。RESTful API遵循REST原则,主要使用HTTP/HTTPS协议,数据格式多为JSON或XML,适用于无状态通信;而Web服务包括SOAP和REST,常用于基于网络的API,采用标准化方法如WSDL或OpenAPI。理解两者区别有助于选择适合应用需求的解决方案,构建高效、可扩展的应用程序。
|
4月前
|
存储 安全 搜索推荐
理解Session和Cookie:Java Web开发中的用户状态管理
理解Session和Cookie:Java Web开发中的用户状态管理
128 4
|
4月前
|
JavaScript 前端开发 开发工具
web项目规范配置(husky、eslint、lint-staged、commit)
通过上述配置,可以确保在Web项目开发过程中自动进行代码质量检查和规范化提交。Husky、ESLint、lint-staged和Commitlint共同作用,使得每次提交代码之前都会自动检查代码风格和语法问题,防止不符合规范的代码进入代码库。这不仅提高了代码质量,还保证了团队协作中的一致性。希望这些配置指南能帮助你建立高效的开发流程。
134 5
|
5月前
|
JavaScript 前端开发 安全
轻松上手Web Worker:多线程解决方案的使用方法与实战指南
轻松上手Web Worker:多线程解决方案的使用方法与实战指南
119 0
|
5月前
|
XML 关系型数据库 MySQL
Web Services 服务 是不是过时了?创建 Web Services 服务实例
本文讨论了WebServices(基于SOAP协议)与WebAPI(基于RESTful)在开发中的应用,回顾了WebServices的历史特点,比较了两者在技术栈、轻量化和适用场景的差异,并分享了使用VB.net开发WebServices的具体配置步骤和疑问。
157 0
|
5月前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
90 4
|
5月前
|
监控 Java Maven
springboot学习二:springboot 初创建 web 项目、修改banner、热部署插件、切换运行环境、springboot参数配置,打包项目并测试成功
这篇文章介绍了如何快速创建Spring Boot项目,包括项目的初始化、结构、打包部署、修改启动Banner、热部署、环境切换和参数配置等基础操作。
303 0
|
5月前
|
NoSQL Java 数据库连接
springBoot:整合其他框架&condition&切换web配置 (五)
本文档介绍了如何在Spring Boot项目中整合JUnit、Redis和MyBatis等框架,并提供了相应的依赖配置示例。同时,还展示了如何通过条件注解实现Bean的条件创建,以及如何切换Web服务器配置,从默认的Tomcat切换到Jetty。
|
6月前
|
小程序 前端开发 中间件
ThinkPHP 配置跨域请求,使用TP的内置跨域类配置,小程序和web网页跨域请求的区别及格式说明
本文介绍了如何在ThinkPHP框架中配置跨域请求,使用了TP内置的跨域类`\think\middleware\AllowCrossDomain::class`。文章还讨论了小程序和web网页在跨域请求格式上的区别,并提供了解决方案,包括修改跨域中间件源码以支持`Origin`和`token`。此外,还介绍了微信小程序跨域请求的示例和web网页前端发送Axios跨域请求的请求拦截器配置。
ThinkPHP 配置跨域请求,使用TP的内置跨域类配置,小程序和web网页跨域请求的区别及格式说明
|
6月前
|
监控 Apache
HAProxy的高级配置选项-Web服务器状态监测
这篇文章介绍了HAProxy的高级配置选项,特别是如何进行Web服务器状态监测,包括基于四层传输端口监测、基于指定URI监测和基于指定URI的request请求头部内容监测三种方式,并通过实战案例展示了配置过程和效果。
135 8
HAProxy的高级配置选项-Web服务器状态监测

热门文章

最新文章