[摘要]:本文主要通过介绍 web 服务的相关知识,引出采用 web 服务在信息系统集成中的应 用的想法,最后采用开源软件 XFire 来详细说明 web 服务在系统集成的运用,保证了各系统 间的松散耦合的集成。
[关键词]: web 服务,WSDL,信息系统集成,Java
1.引言
随着信息化的加速发展,很多企业、科研所和单位都遗留着一个个单独孤立存在的信息 系统,形成了各个信息孤岛,造成了相关资源信息不一致性。同时各系统在物理和地点的分 布的位置不同。数据交互大部分靠人工的方式把各系统的资源集中统一,非常的低效,还给 管理带了极大的不便。把这些系统重新开发,在成本和时间等各方面有条件的。于是把 各系统高效低成本的集成起来就是这类企业,科研所和单位面对的问题。在互联网广泛普及 的今天,本文就如何把各孤立存在的系统集成起来提出了采用开源软件开发的基于 web 服 务模型的系统集成方案。
2.背景
目前,各企业、科研所和单位为了实现把各孤立的系统联系起来,打造一个信息统一服 务平台,主要有以下三种实现信息系统集成的方式:
(1) 共享数据库 各系统为了实现集成,采用共享公用数据的方式,也就是把各系统中所有的数据放在同一个数据库中,各系统间有冲突的部分只能通过协商和讨论开发。由于各开发商 都倾向于各自的系统或存在上沟通上的困难,无论是在时间还是在成本上,都是非常 费时费力的,并且破坏了各系统间的性,形成了紧耦合。
(2) 人工中间文件 采用人工或系统定时到各系统中收集相关数据,再通过手工或系统自动定时的生成固定格式的文件按照一定的规格分发再各个系统中去。不仅在文件格式方面存在极大的 不便,也无法达到系统的实时和效率要求。
(3) 中间件技术采用 CORBA(Common Object Request Broker Architecture,公共对象请求代理体系结构,通用对象请求代理体系结构),DCOM(分布式组件对象模型),EJB(EnterpriseJavaBeans)等技术来实现信息系统的集成。CORBA 实现复杂,难于短时间内掌握,同 时对以后的维护成本高,可扩展性差;目前,DCOM 还无法实现对跨平台,跨语言的支 持;EJB 存在着各厂商的规范不一样,部署困难,各系统问调用复杂。综上所述,目前现有的实现技术无论在技术,成本还是可扩展性方面都有不足。随着B/S(Browser/Server)架构的广泛运用,Web服务(Web Service) 作为web应用程序分支,是 一种热门的企业级技术。它借用于 XML 元标记语言,并采用了标准的规范,如SOAP,WSDL,UDDI等;采用HTTP的传输方式,可以跨越防火墙的;是自包含、自描述、模块化的应 用;只要将服务功能发布和定位在互联网和企业内部网上,再通过web调用,就可以执行从简单到复杂商务处理请求任务;Web服务一旦部署以后,由于它是基于标准互联网的协议,其他任何平台和任何应用程序可以通过协议定位并调用它部署的服务,具有异构性,跨平台性及松散耦合性,可以支持分布式系统的集成应用;Web服务被认为是当前基Internet环境下的构件编程,因此具有组件的集成和重用性;下面将介绍在web服务中常用的标准规范Web服务器描述语言和简单对象访问协议。
WSDL(Web Services Description Language)Web服务器描述语言是用XML来描述Web服务的最常用的接口定义语言标准,它描述了Web服务的三个基本属性:
(1.)服务功能——所提供的操作(方法)
(2.)服务标准——交互的数据格式以及协议;
(3.)服务定位——协议相关的地址,WSDL 包含了对操作(方法)和消息的抽象定义, 及具体协议和规范。
SOAP(Simple Object Access Protocol)简单对象访问协议SOAP是一个基XM在分布式的环境中交换信息的简单的协议。SOAP为在一个松散的、分布式的环境中使用XML对等的交换结构化的和类型化的信息提供了一中简单的机制。SOAP本身并不定义任何应用语义,如编程模型或特定语义实现,它只是定义了一种简单的机制,通过一个模块化的包 装模型和对模块中特定格式编码的数据的重编码机制来表示应用语义.它包括四个部分:SOAP封装(envelop),封装定义了一个描述消息中的内容是什么,是谁发送的,谁应当接受并 处理它以及如何处理它们的框架;SOAP编码规则(encoding rules),用于表示应用程序需 要使用的数据类型的实例; SOAP RPC 表示(RPC representation),表示远程过程调用和应答的协定;SOAP 绑定(binding),使用底层协议交换信息。
在过去,对于Java开发人员,采用借助于J2EE 技术来实现web服务,是一件非常复杂和烦琐的事。根本没有.Net提供的只要提供相关的元标识声明(Annoation)语言,就可以向 Internet/intranet提供web服务。但是随着开源领域用户的不断扩大和 EJB3 规范的发布, 采用声明接口的方式向外提供服务己变得非常的简便。
Codehaus XFire是基于Java架构的快速开发web服务的开源软件;采用了下一代Java(J DK6) SOAP协议的框架,它使得面向服务的开发简单的只要运用API和标准支持。XFire同时也具有很好的性能。因为它是基于低内存StAX[3]模型而架构的。它支持常用的web服务的标准,如:SOAP,WSDL,WS-Security等;具有良好的性能;支持可插拔式的绑定,如:POJOs,XMLBeans,JAXB等;采用不同的传输方式如:HTTP, JMSXMPP等;并提供嵌入式和灵巧的 API 接口函数;同时支持客户端和服务器端存根的生成。
3.实现
采用基于Web服务的系统集成,需要每个孤立系统都向外提供web服务的统一接口,通过数字签名和数学加密等技术手段来发送 SOAP消息,来保证web服务的完整性、机密性和安全性等需求。于是客户可以通过定位相关web服务来进行资源的交互。一般来说,各系统接口通常包括用户认证,用户管理和业务操作等相关模块。下面以用户统一认证模块为例,来实现用户单点登录的功能,
(1) 用户认证系统模型
3.1 过程如下:
用户采用表单的形式,提交用户名userName和用户密码到某系统登录进行认证,如果通过此系统的认证,则把用户IP,用户名userName 和采用 MD5 加密用户登录信息(用户MAC+用户密码+登录时间,记为vcode)保存在某服务器的持久层,此加密的信息将一直到用户从任一系统注销或超时为止才进行清除。当用户跳转到其他某系统的资源进行访问时,通过在本系统添加系统监听,用户不需要再次输入用户名和密码。而是通过监听首 先判断用户是否登录了本系统,如果未登录,则采用未登录直接跳转或提示用户输入用户和密码;如果己通过了本系统的认证,则同时采用表单的形式提交vcode到另一系统进行调用web服务提供的统一接口。此接口通过发送带vcode和用户MAC参数的SOAP消息进行web服务的调用来认证用户此用户的身份的合法性和有效性,查询和返回当前的用户名,并直接以此用户身份登录到其他某系统,这样就可以避免用户重复输入用户名和密码来登录多个相关的系统,从而实现了用户单点登录的功能。
3.2 代码如下:
认证用户类: package zist.web; public class User {//通过用户Mac地址和加密用户信息查询
public String userLogin(String userMac, String validCode) {String userName = false;
username = validateUser(userMac, validCode);
return userName;}}
采用XFire 发布web服务,首先开发人员只要集中精力完成各系统的业务类,比如用户 认证,用户添加,编辑,删除等功能,然后在classes资源文件目录下建立META-INF/xfire/services.xml文件,通过配置业务类的相关的对外公开业务方法名,复制相关的包到WEB-INF目录下,启动相关的web服务器,就可以看到发布的Web服务。services.xml文件配置内容见图2,自动生成的WSDL文件,见图3。
(2)services.xml 配置内容
(3)WSDL 文件
客户端调用代码如下:
import org.apache.axis.client. Service;
import org.apache.axis.client. Call;
import java.net.URL;
// web 服务定位
String endpoint = "http://localhost:8080/szist/services/userLogin";
// web 服务方法
String method = "userLogin";
// web 服务绑定参数
Object[] param = new String[]{userMac,passWord}; String userName = "";
try{
Service service=new Service();
Call call = (Call) service.createCall(); call.setTargetEndpointAddress(new URL(endpoint)); call.setOperationName(method);
// 调用 web 服务
userName = (String) call.invoke(param);
// 判断用户角色权限,跳转到相关页面
response.sendRedirect("/user/welcome.jsp");
}
catch(Exception e){
response.sendRedirect("/user/login.jsp");}
}
4.总结
由以上用户认证示例可以得出,采用基于Web服务实现系统集成,实现了各系统间的松散耦合性,与语言无关,支持异构系统的跨平台性等Web服务优点;同时系统的集成变得既简单又方便,不再像从前一样复杂而又烦琐,具有时间和成本的优越性;随着SOA(Service-Oriented Architectures)面向服务的体系结构技术的发展和运用,具有良好的可扩展性。下载本文