基于中间件的通用服务调用系统及方法

文档序号:7697823阅读:200来源:国知局
专利名称:基于中间件的通用服务调用系统及方法
技术领域
本发明涉及服务调用技术领域,尤其涉及一种基于中间件的通用服务调用系统及方法。

背景技术
在服务搜索引擎或者服务检索系统中,如果对每个服务构建一个调用客户端,将导致服务调用客户端的数目非常大,换句话说,如果每个服务都需要一个代码模块才能实现调用,那么系统的代码量和模块数都将非常庞大且不易于维护和使用;同时,服务的调用代码都需要对系统进行编译配置,对服务动态增长的系统而言,多次对其进行配置是很不方便的。因此,目前在服务搜索引擎或者服务检索系统中,系统运行端适于使用通用的服务调用程序。
IBM公司提供了不带有直接代码生成功能的新服务调用环境WSIF(Web ServicesInvocation Framework),其主要的特点是面向抽象服务编程,而不是面向SOAP允许无存根调用访问Web服务所需的所有信息,服务的抽象接口、绑定等信息通过WSDL获得;WSIF使用WSDL获得服务描述信息,直接“告诉”系统WSDL所处的地址,所使用的操作并对相对应的参数赋值即可对服务进行调用。
然而,WSIF应用框架直接使用WSDL文档,对WSDL文档带有依赖性,调用代码的编写方式类似于WSDL2Java,其适合于编写对单个服务进行调用的代码而不用于应用程序集成;在获得服务调用数据时,需要获得WSDL文档并对其进行解析,这样加剧了系统负荷降低了调用速度。在WSDL中,一个Operation有一个Input message以及一个可选的Output message或fault message。而在WSIF中,可看到一个类似的层次结构,WSDL与WSIF有比较密切的关系,参见下表的对应关系

发明内容
本发明的目的是提供一种基于中间件的通用服务调用系统及方法,以适应服务检索系统或服务搜索引擎,提高服务水平。
为达到上述目的,本发明采用如下的技术方案 WSDL解析模块,用于根据WSDL文档实现其所含服务信息到按中间件存储模式存储的自动转换; 中间件存储模块,将所述WSDL解析模块输入的服务信息采用中间件存储模式持久存储; 服务调用模块,用于对存储在所述中间件存储模块的服务信息进行服务调用; 服务索引模块,对所述中间件存储模块的服务信息构建索引; 服务查询接口模块,用于提供服务检索接口,根据服务检索接口接受的查询请求信息检索所述中间件存储模块中的相应服务信息,然后进入通用服务调用模块对服务进行调用。
所述中间件存储模块包括服务表、操作表和参数表,将服务信息内容分解为服务元素、操作元素、参数元素分别存储在服务表、操作表和参数表中。
所述服务调用模块采用Axis2平台构建。
基于中间件的通用服务调用方法,包括以下步骤 WSDL解析步骤,用于根据WSDL文档实现其所含服务信息进行解析后转存入一个更加简介的模式中; 服务调用步骤,基于转存的服务信息进行服务调用。
所述WSDL解析步骤包括以下子步骤 ①读取WSDL文档的根元素,构建一个Definition对象; ②使用Definition的子元素Types生成标准的Java对象Schema向量; ③获得在WSDL文档中定义的所有Service对象,提取每个Service对象的服务元素信息填入服务表;提取每个Service对象的端口集合得到相应绑定信息,从绑定信息中取得每个端口的操作集合和操作的地址信息,作为操作元素信息填入操作表;再对每个操作进行处理,得到每个操作相关的参数信息并填入参数表。
本发明具有以下优点和积极效果 1)在服务检索系统或服务搜索引擎领域,提高了服务支持的水平。
2)实现了中间件存储模式下的通用的调用服务。



图1是本发明基于中间件的通用服务调用系统的模块结构图。
图2是本发明基于中间件的通用服务调用系统的存储模块的存储模式示意图。
其中, 11-WSDL解析模块、12-中间件存储模块、13-服务调用模块、14-服务索引模块、15-服务查询接口模块、21-服务表、22-操作表、23-参数表。

具体实施例方式 下面以具体实施例结合附图对本发明作进一步说明 本发明提供的基于中间件的通用服务调用系统,具体采用如下的技术方案,参见图1,该基于中间件的通用服务调用系统包括WSDL解析模块11、中间件存储模块12、服务调用模块13、服务索引模块14、服务查询接口模块15;WSDL解析模块11,用于根据WSDL文档实现其所含服务信息到按中间件存储模式存储的自动转换;中间件存储模块12,将来自WSDL解析模块11输入的服务信息采用中间件存储模式持久存储;服务调用模块13,用于对存储在中间件存储模块12的服务信息进行服务调用;服务索引模块14,对中间件存储模块12的服务信息构建索引;服务查询接口模块15,用于提供服务检索接口,根据服务检索接口接受的查询请求信息检索中间件存储模块12中的相应服务信息,然后进入通用服务调用模块对服务进行调用。
下面进一步对本发明的基于中间件的通用服务调用系统的各个模块进行详细描述 用于存储持久服务信息的存储模块,可以采用多种方式实现存储,如内存中的对象或物理文件,也可以使用数据库与XML;服务信息内容也可以用多种结构被存储管理,例如直接用目前本领域常用的WSDL文档。而本发明为了提高响应查询请求信息的速度,保障检索结果准确性,具体实施方式
采用了中间件存储模式存储服务信息,即将服务信息内容分解为一项以上元素后分项存储。按照中间件存储模式存储服务信息,条理化结构化地存储管理服务信息所含内容,既便于支持服务检索接口的高级查询,还能快速响应查询请求信息,也便于在服务检索接口清晰地展示检索结果。更重要的是,中间件存储模式的目标是能够支持不同的应用,服务发现模块和服务调用代码生成模块都能方便地从存储模块调用服务信息。在以分布式数据库技术实现存储模块时,中间件存储模式具有支持分布式计算,提供跨网络、硬件和OS平台的交互优势,支持实现大规模的服务使用资源共享。
图2所示为本发明基于中间件的通用服务调用系统的存储模块的存储模式示意图,本实施例在存储模块中建立服务表21、操作表22和参数表23,将服务信息内容分解为3项元素,即服务元素、操作元素和参数元素后,然后分别存储到服务表、操作表和参数表,中间件存储模式将服务定义为包括多个属性的元组,这些属性可以包括服务调用所需要的信息、服务语义信息、服务属性的其他语言表示信息、用户自定义属性、服务包含的操作集合,附图2中的服务表21记载的服务信息包括服务名称、命名空间等,操作定义为操作各属性元组,以及所含有的输入输出参数集合;操作表22记载的操作信息包括操作的操作名称、SoapAction操作、绑定协议、传输方式、端口地址、服务ID等;参数定义为参数各属性元组,参数表23记载的参数信息包括参数名称、参数类型、参数排列方式、所属参数ID、参数数据类型、是否复杂类型、操作ID等。具体实施时,可以选择其它元素划分方式,按照更多项元素类别存储服务信息内容。
中间件的存储模式可以视为WSDL在结构上的简化与结构化,其与WSDL模式的关系如下第一,除去Definition元素,使用服务元素作为根元素,将命名空间信息存储于Service元素中;第二,除去Message元素,使用参数元素的参数类型标识参数属于操作的输入还是输出;第三,使用参数元素替代Part与DataType,使用的属性标识是否为复杂类型。使用嵌套引用的方法标识从属的父参数,以支持复杂数据类型;第四,将Port,Binding的信息合并存储操作元素中,即将服务的抽象与具体信息进行融合。某些情况下操作可能被多个端口支持,所以可能会出现少许数据冗余;第五,支持属性扩展,本模式中所有元素均可以进行属性扩展,比如语义信息,汉语标注信息均可以存储入中间件存储模式,这些信息可以支持系统生成更加丰富的代码。以上各英文标识为WSDL文档和java语言的标准用语,可以参见相关标准,本发明不予介绍。
WSDL4J技术构建与WSDL模式相对应的对象 Definition-WSDL的根元素。
Operation-对服务中所支持的操作的抽象描述,一般单个Operation描述了一个访问入口的请求/响应消息对。
PortType-对于某个访问入口点类型所支持的操作的抽象集合,这些操作可以由一个或多个服务访问点来支持。
Binding-特定端口类型的具体协议和数据格式规范的绑定。
Port-定义为协议/数据格式绑定与具体Web访问地址组合的单个服务访问点。
Service-相关服务访问点的集合。)建立这种机制后,本发明提出的服务客户端自动构建系统可以收录WSDL文档后自动转换存储,便于扩展服务使用支持范围。具体实施时,也可以建立更多样的转换机制,例如采用DOM技术将Xml文件转换为中间件存储模式的服务信息。
可以在存储模块中对已存储的服务信息建立服务索引,例如对中间件的各个元素的属性值与服务信息构建倒排索引。如果使用数据库存储服务信息信息,可以直接使用数据库的视图功能,将整个中间件存储模式建为一个视图,支持对视图进行检索。服务索引也可以不直接使用中间件信息进行构建,在索引文件中保存服务的编号即可将服务索引与服务相联,这使得本系统可以使用任何复杂的服务发现策略。
存储模块的具体实现可以由本领域技术人员运用现有数据库技术和java技术完成软件建设,本发明不予赘述。
本发明提供的基于中间件的通用服务调用系统使用Axis2平台,,Axis2由Axis 1.x处理程序模型提供支持,但它具有更强的灵活性并可扩展到新的体系结构,Axis2对象模型(Axis2 Object Model,AXIOM)是Axis2的基础,任何SOAP消息在Axis2中都表示为AXIOM。
一条SOAP消息只是一个XML文档,由一个强制性的SOAP Envelope组成,SOAPEnvelope有一个可选的SOAP Header和一个必须有的SOAP Body。其中各部分具体内容如下①Envelope定义各个SOAP消息的余下部分会使用的namespaces;②Header是可选的元素,它携带认证、事务处理和支付的辅助信息;③Body是消息的主要有效载体。当SOAP被用于执行一个RPC调用时,Body包含一个单独元素,这个元素包含方法名、参数和Web服务的目标地址。元素的namespace等于目标地址,根名是方法名。
当SOAP客户机向SOAP服务器发送SOAP消息时,用HTTP协议传输。即为SOAP与HTTP绑定。一个SOAP请求实际上就是一个HTTP POST请求。SOAP也可以与SMTP等协议绑定。
服务调用主要包括两个步骤将SOAPAddress,SOAPAction等信息用于构建HTTP报头,然后使用操作名与输入参数构建创建请求消息,每个输入参数作为一个AXIOM中的树结构的一个节点。
Web服务的调用原理,其实质为构建HTTP+XML的数据包并通过本地变量获得同样以XML为格式的返回数据。而通用的服务调用程序,即是通过服务的描述信息(已经解析入中间件),为HTTP包头赋值,动态生成调用数据的输入框,动态构建服务输入数据的XML文件,并接收其返回数据,其实现的伪代码如下 Step1 Initialize Middleware;//初始化中间件 Step2 //为使用中间件的数据为HTTP头赋值 Initialize Package Address using Operation Url; Initialize Action using Service Namespace+Operation Name; Initialize Transport Type and etc; //使用中间件中的参数数据为输入XML赋值 Create Parent XML Node using Root Input Parameter Name; For Each Input Parameter in Operation do If Parameter is a Simple Parameter//简单参数 Generate XML Node using Parameter Name;//使用参数名产生节点 Add XML Node to Parent Node;//将节点加入到跟节点下 Else Generate XML node using Parameter Name; For each Sub Parameter in Complex Parameter//复杂参数 Generate XML Node using Parameter Name;//产生子参数 Add XML Node to Parameter;//参数加入跟节点下 Get result XML and Restore it to Local; 基于中间件的服务通用调用系统可以与服务发现模块非常好的融合,服务发现模块用于构建服务索引并提供服务检索查询接口,根据服务检索接口接受的查询请求信息检索存储模块中的相应服务信息,展示检索结果并为检索到的相应服务信息建立检索结果索引;服务发现模块可以采用现有检索技术方便的实现,只需根据服务检索接口接受的查询请求信息检索存储模块中的相应服务信息即可。若存储模块建立了服务索引,使用服务索引文件对服务进行检索更加方便高效,用户可以使用中间件中各元素的所有属性进行查询。服务检索接口以列表的方式呈现服务信息,列表的每个元素呈现可视化的整个服务信息,用户可以很方便的看到服务是否满足需要。为了方便生成用户需要的服务调用代码,服务发现模块根据用户点选的列表项目建立检索结果索引,并传送到服务调用代码生成模块。检索结果索引包含用户点选的列表项目对应服务信息在存储模块中的地址,可以直接采用服务索引文件的相关内容。
本发明同时提供了一种基于中间件的通用服务调用方法,包括以下步骤 WSDL解析步骤,用于根据WSDL文档实现其所含服务信息进行解析后转存入一个更加简介的模式中; 服务调用步骤,基于转存的服务信息进行服务调用。
在上述的基于中间件的通用服务调用方法中所述WSDL解析步骤,具体包括如下子步骤 步骤一,读取WSDL文档的根元素,构建一个Definition对象; 步骤二,使用Definition的子元素Types生成标准的Java对象Schema向量; 步骤三,获得在WSDL文档中定义的所有Service对象,提取每个Service对象的服务元素信息填入服务表;提取每个Service对象的端口(PortType)集合得到相应绑定(Binding)信息,从绑定信息中取得每个端口的操作(Operation)集合和操作的地址信息,作为操作元素信息填入操作表;再对每个操作进行处理,得到每个操作相关的参数信息并填入参数表。
权利要求
1.一种基于中间件的通用服务调用系统,其特征在于,包括
WSDL解析模块(11),用于根据WSDL文档实现其所含服务信息到按中间件存储模式存储的自动转换;
中间件存储模块(12),将所述WSDL解析模块(11)输入的服务信息采用中间件存储模式持久存储;
服务调用模块(13),用于对存储在所述中间件存储模块(12)的服务信息进行服务调用;
服务索引模块(14),对所述中间件存储模块(12)的服务信息构建索引;
服务查询接口模块(15),用于提供服务检索接口,根据服务检索接口接受的查询请求信息检索所述中间件存储模块(12)中的相应服务信息,然后进入通用服务调用模块对服务进行调用。
2.根据权利要求1所述的基于中间件的通用服务调用系统,其特征在于
所述中间件存储模块包括服务表、操作表和参数表,将服务信息内容分解为服务元素、操作元素、参数元素分别存储在服务表、操作表和参数表中。
3.根据权利要求1所述的基于中间件的通用服务调用系统,其特征在于
所述服务调用模块采用Axis2平台构建。
4.一种基于中间件的通用服务调用方法,其特征在于,包括以下步骤
WSDL解析步骤,用于根据WSDL文档实现其所含服务信息进行解析后转存入一个更加简介的模式中;
服务调用步骤,基于转存的服务信息进行服务调用。
5.根据权利要求4所述的基于中间件的通用服务调用方法,其特征在于
所述WSDL解析步骤包括以下子步骤
①读取WSDL文档的根元素,构建一个Definition对象;
②使用Definition的子元素Types生成标准的Java对象Schema向量;
③获得在WSDL文档中定义的所有Service对象,提取每个Service对象的服务元素信息填入服务表;提取每个Service对象的端口集合得到相应绑定信息,从绑定信息中取得每个端口的操作集合和操作的地址信息,作为操作元素信息填入操作表;再对每个操作进行处理,得到每个操作相关的参数信息并填入参数表。
全文摘要
本发明涉及服务调用技术领域,尤其涉及一种基于中间件的通用服务调用系统及方法。本发明包括WSDL解析模块,用于根据WSDL文档实现其所含服务信息到按中间件存储模式存储的自动转换;中间件存储模块,将所述WSDL解析模块输入的服务信息采用中间件存储模式持久存储;服务调用模块,用于对存储在所述中间件存储模块的服务信息进行服务调用;服务索引模块,对所述中间件存储模块的服务信息构建索引;服务查询接口模块,用于提供服务检索接口,根据服务检索接口接受的查询请求信息检索所述中间件存储模块中的相应服务信息,然后进入通用服务调用模块对服务进行调用。本发明具备在服务检索系统或服务搜索引擎领域,提高了服务支持的水平的特点。
文档编号H04L29/08GK101609415SQ20091006320
公开日2009年12月23日 申请日期2009年7月17日 优先权日2009年7月17日
发明者彭智勇, 科 王, 欧伟杰, 承 曾, 莹 张 申请人:武汉大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1