发明内容
本发明的目的是克服了上述现有技术中的缺点,提供一种能够通过扩展的方式增加新的数据类型的转换支持、简单明确、配置方便、运行期效率较高、系统性能稳定可靠,适用范围较为广泛的面向服务的体系结构的应用系统服务集成中实现数据转换的系统结构及其方法。
为了实现上述的目的,本发明的面向服务的体系结构的应用系统服务集成中实现数据转换的系统结构及其方法如下:
该面向服务的体系结构的应用系统服务集成中实现数据转换的系统结构,其主要特点是,所述的系统结构包括:
运行期通用框架模块,支撑不同数据对象的转换扩展;
开发期配置格式定义模块,与所述的运行期通用框架模块相连接,并进行数据对象转换的配置格式定义。
该面向服务的体系结构的应用系统服务集成中实现数据转换的系统结构中的运行期通用框架模块包括:
配置加载单元,进行数据对象转换信息的配置加载;
有向图单元,该有向图单元根据所述的配置加载单元所配置加载的数据对象转换信息而生成,且提供从源数据类型到目标数据类型转换所需的最短路径,并针对接入服务以及接出服务时提供不同数据对象的转换操作,其中,数据转换过程中的接口元数据统一用Web Service定义语言进行描述。
该面向服务的体系结构的应用系统服务集成中实现数据转换的系统结构中的开发期配置格式定义模块包括:
接口转换器,实现特定数据类型的转换操作;
转换器注册单元,对所述的接口转换器进行注册。
该基于上述的系统结构实现面向服务的体系结构的应用系统服务集成中数据转换的方法,其主要特点是,所述的方法包括开发期数据对象转换的配置格式定义操作、运行期数据对象转换的配置加载操作、运行期接入服务的数据对象转换操作和运行期接出服务的数据对象转换操作,所述的开发期数据对象转换的配置格式定义操作,包括以下步骤:
(11)所述的开发期配置格式定义模块新建数据对象转换扩展包;
(12)所述的开发期配置格式定义模块导入外部服务的描述文件;
(13)所述的开发期配置格式定义模块根据用户的输入操作,生成实现数据对象转换接口的实现类;
(14)所述的开发期配置格式定义模块配置数据对象转换规则;
(15)所述的开发期配置格式定义模块将数据对象扩展包部署到运行环境中;
所述的运行期数据对象转换的配置加载操作,包括以下步骤:
(21)所述的运行期通用框架模块提供支持数据对象转换扩展的接口类,以供扩展;
(22)所述的运行期通用框架模块加载导入的服务对应的数据对象描述文件WSDL以及其中的数据类型定义XSD Schema信息;
(23)所述的运行期通用框架模块加载定义的数据对象转换配置文件;
(24)所述的运行期通用框架模块根据数据对象转换配置文件中定义的源、目标数据类型形成类型转换有向图;
所述的运行期接入服务的数据对象转换操作,包括以下步骤:
(31)所述的运行期通用框架模块根据接入服务的协议类型,确定服务对应的数据转换类型;
(32)所述的运行期通用框架模块对接入的服务生成服务代理;
(33)在所述的服务代理中针对每一个服务方法调用生成调用链;
(34)在所述的服务代理中根据服务对应的数据转换类型,在方法的调用链中添加数据转换的拦截器;
(35)在所述的数据转换的拦截器中根据数据对象转换有向图,查找最优的数据转换路径;
(36)所述的运行期通用框架模块调用所定义的数据对象格式转换实现类,实现不同数据对象的类型转换;
所述的运行期接出服务的数据对象转换操作,包括以下步骤:
(41)所述的运行期通用框架模块根据接出服务的类型,确定服务对应的数据转换类型;
(42)所述的运行期通用框架模块对接出的服务生成服务代理;
(43)在所述的服务代理中针对每一个方法调用生成调用链;
(44)在所述的服务代理中根据服务对应的数据转换类型,在方法的调用链中添加数据转换的拦截器;
(45)在所述的数据转换的拦截器中,根据数据对象转换有向图,查找最优的数据转换路径;
(46)所述的运行期通用框架模块调用定义的数据对象格式转换实现类,实现不同数据对象的类型转换。
该实现面向服务的体系结构的应用系统服务集成中数据转换的方法中的数据对象转换扩展包为包含一定功能逻辑的物理单元,每个数据对象转换扩展包作为一个最小的部署单元部署到运行环境中,且该数据对象转换扩展包中包含了实现数据转换功能的所有依赖资源,数据对象转换扩展包在物理上同一文件目录对应。
该实现面向服务的体系结构的应用系统服务集成中数据转换的方法中的依赖资源包括WSDL文件、XSD文件、数据对象转换配置文件、Java运行时需要的类文件。
该实现面向服务的体系结构的应用系统服务集成中数据转换的方法中的导入外部服务的描述文件,包括以下步骤:
(121)所述的开发期配置格式定义模块根据用户通过在数据对象转换扩展包右键菜单的选择操作,并根据外部服务的类型进行导入操作;
(122)导入时,从本地选择服务的描述文件或者根据所提供的URL从远程下载服务的描述文件;
(123)根据导入的服务描述文件统一生成WSDL接口描述;
(124)将所下载的WSDL文件和接口生成的WSDL文件默认保存到对应扩展包资源树下的“接口”结点下;
(125)将接口中的操作作为资源树“接口”结点的子结点进行显示。
该实现面向服务的体系结构的应用系统服务集成中数据转换的方法中的服务的描述文件包括Java接口文件、WSDL文件、IDL文件。
该实现面向服务的体系结构的应用系统服务集成中数据转换的方法中的从远程下载服务的描述文件,包括以下步骤:
(1221)分析所下载的服务的描述文件;
(1222)如果所下载的服务的描述文件中包含通过import或者include方式所引用的其它服务的描述文件,则一并下载到本地;
(1223)分析所下载的所有服务的描述文件,如果该服务的描述文件中的类型定义<types>部分包含通过import或者include方式所引用的其它XSD文件,则把引用的XSD文件下载到本地;
(1224)分析所下载的所有XSD文件,如果包含通过import或者include方式所引用的其它XSD文件,则同时把引用的XSD文件下载到本地;
(1225)将所下载的XSD文件默认保存到相应包资源树下的“XML Schema”结点下。
该实现面向服务的体系结构的应用系统服务集成中数据转换的方法中的生成实现数据对象转换接口的实现类,包括以下步骤:
(131)所述的开发期配置格式定义模块根据用户操作,新建Java类,实现数据对象的转换接口IDataTransformer;
(132)实现数据对象转换接口的transform接口,把源数据按照服务定义的数据对象描述的格式转换为目标数据格式;
(133)所述的开发期配置格式定义模块设置数据对象接口的源数据类型;
(134)所述的开发期配置格式定义模块设置数据对象接口的目标数据类型;
(135)所述的开发期配置格式定义模块设置数据对象转换中源数据类型到目标数据类型的转换权重,以便查找最优转换路径。
该实现面向服务的体系结构的应用系统服务集成中数据转换的方法中的配置数据对象转换规则,包括以下步骤:
(141)所述的开发期配置格式定义模块在数据对象转换对应扩展包资源树下的“配置”结点下新建文件DataTransformer.conf;
(142)所述的开发期配置格式定义模块在文件中配置数据对象的转换类。
该实现面向服务的体系结构的应用系统服务集成中数据转换的方法中的数据对象的转换类的格式具体为:
数据对象转换类全名;sourceType=源数据类型全名,targetType=目标数据类型全名,weight=数据类型转换权重。
该实现面向服务的体系结构的应用系统服务集成中数据转换的方法中的将数据对象扩展包部署到运行环境中,包括以下步骤:
(151)所述的开发期配置格式定义模块根据用户在数据对象转换对应扩展包资源树上的操作,接受用户的部署选择操作;
(152)所述的开发期配置格式定义模块将数据对象转换对应扩展包下的资源按目录结构部署到运行环境中。
该实现面向服务的体系结构的应用系统服务集成中数据转换的方法中的提供支持数据对象转换扩展的接口类,包括以下步骤:
(211)所述的运行期通用框架模块定义数据转换操作的接口类IDataTransformer,供用户扩展,接口中包括数据对象的类型转换操作以及此转换对应的源和目标数据类型和转换的权重;
(212)所述的运行期通用框架模块提供根据输入、输出数据类型获取数据转换类列表的工厂类DataTransformerFactory。
该实现面向服务的体系结构的应用系统服务集成中数据转换的方法中的加载导入的服务对应的数据对象描述文件WSDL以及其中的数据类型定义XSD Schema信息,包括以下步骤:
(221)所述的运行期通用框架模块解析导入的所有XSD文件,对其中的类型定义形成内存模型;
(222)所述的运行期通用框架模块解析导入的所有WSDL文件,对其中定义的Schema Type进行解析,对其中的类型定义形成内存模型;
(223)所述的运行期通用框架模块解析所有WSDL文件中的接口定义,形成接口、操作以及操作参数的映射关系;
(224)所述的运行期通用框架模块对所有的XSD、WSDL中的类型定义模型进行缓存;
(225)所述的运行期通用框架模块对所有的WSDL中的PortType接口定义进行缓存。
该实现面向服务的体系结构的应用系统服务集成中数据转换的方法中的加载定义的数据对象转换配置文件,包括以下步骤:
(231)所述的运行期通用框架模块查找构件包中配置文件DataTransformer.conf;
(232)所述的运行期通用框架模块读取配置文件中的内容,文件中每一行对应一种数据类型的转换定义;
(233)所述的运行期通用框架模块将配置文件中定义的每个转换器进行实例化;
(234)所述的运行期通用框架模块将数据转换器实例注册到数据转换器注册仓库中。
该实现面向服务的体系结构的应用系统服务集成中数据转换的方法中的根据数据对象转换配置文件中定义的源、目标数据类型形成类型转换有向图,包括以下步骤:
(241)所述的运行期通用框架模块从数据转换器实例注册仓库中读取所有的数据转换器;
(242)所述的运行期通用框架模块创建有向图Graph对象;
(243)所述的运行期通用框架模块遍历所有的数据转换器;
(244)所述的各个数据转换器形成有向图的边,其中源数据类型和目标数据类型作为边两端的结点;
(245)所述的运行期通用框架模块根据数据转换器的设置的权重,设置每条边的权重。
该实现面向服务的体系结构的应用系统服务集成中数据转换的方法中的根据接入服务的协议类型确定服务对应的数据转换类型,包括以下步骤:
(311)所述的运行期通用框架模块对接入服务确定服务所对应的输入源数据类型;
(312)所述的运行期通用框架模块查找接入的服务,确定服务对应业务操作的数据类型;
(313)所述的运行期通用框架模块设置接入服务对应输入的数据类型转换;
(314)所述的运行期通用框架模块设置接入服务对应输出的数据类型转换。
该实现面向服务的体系结构的应用系统服务集成中数据转换的方法中的对接入的服务生成服务代理,包括以下步骤:
(321)所述的运行期通用框架模块查找服务定义的接口类型;
(322)所述的运行期通用框架模块根据服务接口类型,生成基于接口或者基于类的代理;
(323)所述的运行期通用框架模块根据服务接口定义,遍历服务中的所有方法,确定其输入以及输出数据类型;
(324)所述的运行期通用框架模块对服务中的方法以及方法的类型进行缓存,以增加性能。
该实现面向服务的体系结构的应用系统服务集成中数据转换的方法中的在服务代理中针对每一个服务方法调用生成调用链,包括以下步骤:
(331)实现基于代理的接口方法invoke;
(332)根据要调用的服务方法名称以及参数类型,找到服务对应的目标方法;
(333)对方法调用的参数进行封装,统一为包装数据对象Message,该包装数据对象Message作为所有数据类型的总线对象进行传递;
(334)针对每个方法,生成相应的调用链,调用链中的每一部分封装为拦截器;
(335)业务方法的调用封装为调用的拦截器,并加入到调用链的头部。
该实现面向服务的体系结构的应用系统服务集成中数据转换的方法中的根据服务对应的数据转换类型在方法的调用链中添加数据转换的拦截器,包括以下步骤:
(341)根据服务对应的输入以及输出数据类型,判断是否需要进行数据转换;
(342)如果需要,在方法调用的调用链中添加数据转换拦截器;
(343)添加对输入数据进行转换拦截器到调用链首;
(344)添加对输出数据进行转换拦截器到调用链尾。
该实现面向服务的体系结构的应用系统服务集成中数据转换的方法中的数据转换的拦截器中根据数据对象转换有向图查找最优的数据转换路径,包括以下步骤:
(351)在数据转换拦截器中,查找服务调用方法所对应的输入、输出类型;
(352)查找调用服务所要求使用的输入以及输出数据类型;
(353)从数据转换注册库生成的有向图中查找服务输入数据所需的转换器列表,并要求从源到目标数据类型的转换器的权重最小;
(354)从数据转换注册库生成的有向图中查找服务输出数据所需的转换器列表,并要求从源到目标数据类型的转换器的权重最小。
该实现面向服务的体系结构的应用系统服务集成中数据转换的方法中的调用所定义的数据对象格式转换实现类实现不同数据对象的类型转换,包括以下步骤:
(361)所述的运行期通用框架模块依次调用所需转换类的invoke方法,实现管道调用的方式,并将上一次的输出作为本次调用的输入;
(362)在调用结束后返回转换后的数据,传递给业务方法调用。
该实现面向服务的体系结构的应用系统服务集成中数据转换的方法中的根据接出服务的类型确定服务对应的数据转换类型,包括以下步骤:
(411)所述的运行期通用框架模块对接出服务确定服务所对应的输出源数据类型;
(412)所述的运行期通用框架模块查找接出的服务,确定服务对应业务操作的数据类型;
(413)所述的运行期通用框架模块设置接出服务对应输入的数据类型转换;
(414)所述的运行期通用框架模块设置接出服务对应输出的数据类型转换。
该实现面向服务的体系结构的应用系统服务集成中数据转换的方法中的对接出的服务生成服务代理,包括以下步骤:
(421)所述的运行期通用框架模块查找需要接出服务的业务方法中对应的接口类型;
(422)所述的运行期通用框架模块根据业务方法的接口类型,生成基于接口或者基于类的代理;
(423)所述的运行期通用框架模块根据业务接口定义,遍历接口中的所有方法,确定其输入以及输出数据类型;
(424)所述的运行期通用框架模块对业务接口中的方法以及方法的类型进行缓存,以增加性能。
采用了该发明的面向服务的体系结构的应用系统服务集成中实现数据转换的系统结构及其方法,由于其中针对不同服务调用,系统能自动根据服务的类型进行数据的转换,以适应不同服务的要求,同时新增不同类型服务集成时,减少了调用的操作步骤和对不同外部工具的依赖,真正做到了灵活的调用,同时传递的数据采用统一的数据总线Message进行封装,能够适应不同服务的数据转换,从而使得系统的集成工作变得简单而高效,不再需要维护大量的转换器代码,而且对于外部不同的数据类型变化能够快速适应,从而使数据类型转换的开发、调用过程更加直观,提高了调用的效率,快捷方便,系统运行效率较高,性能稳定可靠,降低了开发维护的成本;同时增强了系统可移植性和可扩展性,能够快速适应业务需求的变化和技术变化,能够支撑建立高度模块化而且又高度整合的软件系统,不必修改核心代码就能增加新的数据类型的转换支持,以支持不同外部服务的需要,开发期简单,接口明确,配置方便,运行期效率较高、系统性能稳定可靠,适用范围较为广泛,为SOA系统的集成发展打下了坚实的基础。
具体实施方式
为了能够更清楚地理解本发明的技术内容,特举以下实施例详细说明。
请参阅图1至图6所示,该面向服务的体系结构的应用系统服务集成中实现数据转换的系统结构,其中,所述的系统结构包括:
(1)运行期通用框架模块,支撑不同数据对象的转换扩展,其中包括:
(a)配置加载单元,进行数据对象转换信息的配置加载;
(b)有向图单元,该有向图单元根据所述的配置加载单元所配置加载的数据对象转换信息而生成,且提供从源数据类型到目标数据类型转换所需的最短路径,并针对接入服务以及接出服务时提供不同数据对象的转换操作,其中,数据转换过程中的接口元数据统一用Web Service定义语言进行描述;
(2)开发期配置格式定义模块,与所述的运行期通用框架模块相连接,并进行数据对象转换的配置格式定义,其中包括:
(a)接口转换器,实现特定数据类型的转换操作;
(b)转换器注册单元,对所述的接口转换器进行注册。
该基于上述的系统结构实现面向服务的体系结构的应用系统服务集成中数据转换的方法,其中,所述的方法包括开发期数据对象转换的配置格式定义操作、运行期数据对象转换的配置加载操作、运行期接入服务的数据对象转换操作和运行期接出服务的数据对象转换操作,所述的开发期数据对象转换的配置格式定义操作,包括以下步骤:
(11)所述的开发期配置格式定义模块新建数据对象转换扩展包;该数据对象转换扩展包为包含一定功能逻辑的物理单元,每个数据对象转换扩展包作为一个最小的部署单元部署到运行环境中,且该数据对象转换扩展包中包含了实现数据转换功能的所有依赖资源,数据对象转换扩展包在物理上同一文件目录对应,该依赖资源包括WSDL文件、XSD文件、数据对象转换配置文件、Java运行时需要的类文件;
(12)所述的开发期配置格式定义模块导入外部服务的描述文件,包括以下步骤:
(a)所述的开发期配置格式定义模块根据用户通过在数据对象转换扩展包右键菜单的选择操作,并根据外部服务的类型进行导入操作;
(b)导入时,从本地选择服务的描述文件或者根据所提供的URL从远程下载服务的描述文件;该描述文件包括Java接口文件、WSDL文件、IDL文件;该从远程下载服务的描述文件,包括以下步骤:
(i)分析所下载的服务的描述文件;
(ii)如果所下载的服务的描述文件中包含通过import或者include方式所引用的其它服务的描述文件,则一并下载到本地;
(iii)分析所下载的所有服务的描述文件,如果该服务的描述文件中的类型定义<types>部分包含通过import或者include方式所引用的其它XSD文件,则把引用的XSD文件下载到本地;
(iv)分析所下载的所有XSD文件,如果包含通过import或者include方式所引用的其它XSD文件,则同时把引用的XSD文件下载到本地;
(v)将所下载的XSD文件默认保存到相应包资源树下的“XML Schema”结点下;
(c)根据导入的服务描述文件统一生成WSDL接口描述;
(d)将所下载的WSDL文件和接口生成的WSDL文件默认保存到对应扩展包资源树下的“接口”结点下;
(e)将接口中的操作作为资源树“接口”结点的子结点进行显示;
(13)所述的开发期配置格式定义模块根据用户的输入操作,生成实现数据对象转换接口的实现类,包括以下步骤:
(a)所述的开发期配置格式定义模块根据用户操作,新建Java类,实现数据对象的转换接口IDataTransformer;
(b)实现数据对象转换接口的transform接口,把源数据按照服务定义的数据对象描述的格式转换为目标数据格式;
(c)所述的开发期配置格式定义模块设置数据对象接口的源数据类型;
(d)所述的开发期配置格式定义模块设置数据对象接口的目标数据类型;
(e)所述的开发期配置格式定义模块设置数据对象转换中源数据类型到目标数据类型的转换权重,以便查找最优转换路径;
(14)所述的开发期配置格式定义模块配置数据对象转换规则,包括以下步骤:
(a)所述的开发期配置格式定义模块在数据对象转换对应扩展包资源树下的“配置”结点下新建文件DataTransformer.conf;
(b)所述的开发期配置格式定义模块在文件中配置数据对象的转换类,该数据对象的转换类的格式具体为:
数据对象转换类全名;sourceType=源数据类型全名,targetType=目标数据类型全名,weight=数据类型转换权重;
(15)所述的开发期配置格式定义模块将数据对象扩展包部署到运行环境中,包括以下步骤:
(a)所述的开发期配置格式定义模块根据用户在数据对象转换对应扩展包资源树上的操作,接受用户的部署选择操作;
(b)所述的开发期配置格式定义模块将数据对象转换对应扩展包下的资源按目录结构部署到运行环境中;
所述的运行期数据对象转换的配置加载操作,包括以下步骤:
(21)所述的运行期通用框架模块提供支持数据对象转换扩展的接口类,以供扩展,包括以下步骤:
(a)所述的运行期通用框架模块定义数据转换操作的接口类IDataTransformer,供用户扩展,接口中包括数据对象的类型转换操作以及此转换对应的源和目标数据类型和转换的权重;
(b)所述的运行期通用框架模块提供根据输入、输出数据类型获取数据转换类列表的工厂类DataTransformerFactory;
(22)所述的运行期通用框架模块加载导入的服务对应的数据对象描述文件WSDL以及其中的数据类型定义XSD Schema信息,包括以下步骤:
(a)所述的运行期通用框架模块解析导入的所有XSD文件,对其中的类型定义形成内存模型;
(b)所述的运行期通用框架模块解析导入的所有WSDL文件,对其中定义的SchemaType进行解析,对其中的类型定义形成内存模型;
(c)所述的运行期通用框架模块解析所有WSDL文件中的接口定义,形成接口、操作以及操作参数的映射关系;
(d)所述的运行期通用框架模块对所有的XSD、WSDL中的类型定义模型进行缓存;
(e)所述的运行期通用框架模块对所有的WSDL中的PortType接口定义进行缓存;
(23)所述的运行期通用框架模块加载定义的数据对象转换配置文件,包括以下步骤:
(a)所述的运行期通用框架模块查找构件包中配置文件DataTransformer.conf;
(b)所述的运行期通用框架模块读取配置文件中的内容,文件中每一行对应一种数据类型的转换定义;
(c)所述的运行期通用框架模块将配置文件中定义的每个转换器进行实例化;
(d)所述的运行期通用框架模块将数据转换器实例注册到数据转换器注册仓库中;
(24)所述的运行期通用框架模块根据数据对象转换配置文件中定义的源、目标数据类型形成类型转换有向图,包括以下步骤:
(a)所述的运行期通用框架模块从数据转换器实例注册仓库中读取所有的数据转换器;
(b)所述的运行期通用框架模块创建有向图Graph对象;
(c)所述的运行期通用框架模块遍历所有的数据转换器;
(d)所述的各个数据转换器形成有向图的边,其中源数据类型和目标数据类型作为边两端的结点;
(e)所述的运行期通用框架模块根据数据转换器的设置的权重,设置每条边的权重;所述的运行期接入服务的数据对象转换操作,包括以下步骤:
(31)所述的运行期通用框架模块根据接入服务的协议类型,确定服务对应的数据转换类型,包括以下步骤:
(a)所述的运行期通用框架模块对接入服务确定服务所对应的输入源数据类型;
(b)所述的运行期通用框架模块查找接入的服务,确定服务对应业务操作的数据类型;
(c)所述的运行期通用框架模块设置接入服务对应输入的数据类型转换;
(d)所述的运行期通用框架模块设置接入服务对应输出的数据类型转换;
(32)所述的运行期通用框架模块对接入的服务生成服务代理,包括以下步骤:
(a)所述的运行期通用框架模块查找服务定义的接口类型;
(b)所述的运行期通用框架模块根据服务接口类型,生成基于接口或者基于类的代理;
(c)所述的运行期通用框架模块根据服务接口定义,遍历服务中的所有方法,确定其输入以及输出数据类型;
(d)所述的运行期通用框架模块对服务中的方法以及方法的类型进行缓存,以增加性能;
(33)在所述的服务代理中针对每一个服务方法调用生成调用链,包括以下步骤:
(a)实现基于代理的接口方法invoke;
(b)根据要调用的服务方法名称以及参数类型,找到服务对应的目标方法;
(c)对方法调用的参数进行封装,统一为包装数据对象Message,该包装数据对象Message作为所有数据类型的总线对象进行传递;
(d)针对每个方法,生成相应的调用链,调用链中的每一部分封装为拦截器;
(e)业务方法的调用封装为调用的拦截器,并加入到调用链的头部;
(34)在所述的服务代理中根据服务对应的数据转换类型,在方法的调用链中添加数据转换的拦截器,包括以下步骤:
(a)根据服务对应的输入以及输出数据类型,判断是否需要进行数据转换;
(b)如果需要,在方法调用的调用链中添加数据转换拦截器;
(c)添加对输入数据进行转换拦截器到调用链首;
(d)添加对输出数据进行转换拦截器到调用链尾;
(35)在所述的数据转换的拦截器中根据数据对象转换有向图,查找最优的数据转换路径;该实现面向服务的体系结构的应用系统服务集成中数据转换的方法中的数据转换的拦截器中根据数据对象转换有向图查找最优的数据转换路径,包括以下步骤:
(a)在数据转换拦截器中,查找服务调用方法所对应的输入、输出类型;
(b)查找调用服务所要求使用的输入以及输出数据类型;
(c)从数据转换注册库生成的有向图中查找服务输入数据所需的转换器列表,并要求从源到目标数据类型的转换器的权重最小;
(d)从数据转换注册库生成的有向图中查找服务输出数据所需的转换器列表,并要求从源到目标数据类型的转换器的权重最小;
(36)所述的运行期通用框架模块调用所定义的数据对象格式转换实现类,实现不同数据对象的类型转换,包括以下步骤:
(a)所述的运行期通用框架模块依次调用所需转换类的invoke方法,实现管道调用的方式,并将上一次的输出作为本次调用的输入;
(b)在调用结束后返回转换后的数据,传递给业务方法调用;
所述的运行期接出服务的数据对象转换操作,包括以下步骤:
(41)所述的运行期通用框架模块根据接出服务的类型,确定服务对应的数据转换类型,包括以下步骤:
(a)所述的运行期通用框架模块对接出服务确定服务所对应的输出源数据类型;
(b)所述的运行期通用框架模块查找接出的服务,确定服务对应业务操作的数据类型;
(c)所述的运行期通用框架模块设置接出服务对应输入的数据类型转换;
(d)所述的运行期通用框架模块设置接出服务对应输出的数据类型转换;
(42)所述的运行期通用框架模块对接出的服务生成服务代理,包括以下步骤:
(a)所述的运行期通用框架模块查找需要接出服务的业务方法中对应的接口类型;
(b)所述的运行期通用框架模块根据业务方法的接口类型,生成基于接口或者基于类的代理;
(c)所述的运行期通用框架模块根据业务接口定义,遍历接口中的所有方法,确定其输入以及输出数据类型;
(d)所述的运行期通用框架模块对业务接口中的方法以及方法的类型进行缓存,以增加性能。
(43)在所述的服务代理中针对每一个方法调用生成调用链;
(44)在所述的服务代理中根据服务对应的数据转换类型,在方法的调用链中添加数据转换的拦截器;
(45)在所述的数据转换的拦截器中,根据数据对象转换有向图,查找最优的数据转换路径;
(46)所述的运行期通用框架模块调用定义的数据对象格式转换实现类,实现不同数据对象的类型转换。
本发明中,在发布或者调用Web Service服务时,客户端与服务器端交互的桥梁是WSDL(Web Service Definition Language),其中包括了以下几个主要元素:
●types——数据类型定义的容器,使用XML Schema来描述数据类型的结构信息。
●portType——描述服务操作的抽象集合,与Java接口类似。
●binding——数据传输过程中指定的具体传输协议以及所定义操作的数据格式规范。
●service——对外提供的服务。
●operation——对服务中所支持的操作的抽象描述,描述了访问入口的请求/响应消息以及异常的声明。
●在调用Web Service过程中,客户端与服务器端交互的信息为SOAP消息,以XML格式进行定义,其结构如图12如示,其中包括了以下几个主要元素:
●SOAP Body——封装了要传递的数据。
●SOAP Header——作为传递消息的扩展,可以自由添加。
本发明的该SOA应用系统服务集成中实现数据转换的方法,包括图形化开发平台和数据转换器的运行平台,所述的方法包括运行期支撑不同数据对象转换扩展的通用框架和开发期数据对象转换的配置格式定义。运行期支撑不同数据对象转换扩展的通用框架包括数据对象转换的配置加载,通过该配置形成数据类型转换的有向图,根据有向图能找到从源数据类型到目标数据类型转换所需的最短路径,同时针对接入服务以及接出服务时提供不同数据对象的转换操作,数据转换时,接口元数据统一用WSDL进行描述。开发期数据对象转换的配置格式定义包括了针对特定数据类型转换的接口实现以及对转换器的注册。
所述的开发期数据对象转换的配置格式定义包括以下步骤:
(1)新建数据对象转换扩展包,包括以下步骤:
a)通过“文件”菜单中新建子菜单,选择新建数据对象转换扩展包;
b)输入数据对象转换扩展包的名称,系统创建相应的目录结构;
c)生成数据对象转换扩展包的资源树,包括配置、接口、XML Schema等结点。
(2)导入外部服务的描述文件,包括以下步骤:
a)根据外部服务的类型,通过在数据对象转换扩展包右键菜单,选择导入WSDL操作;
b)导入时,从本地选择外部服务的描述文件WSDL;
c)导入时,根据提供的外部WebService的URL,从远程下载服务的WSDL描述文件;
i)分析下载的WSDL文件,如果下载的WSDL文件中包含通过{http://schemas.xmlsoap.org/wsdl/}import或者{http://schemas.xmlsoap.org/wsdl/}include引用的其它WSDL文件,则一并下载到本地;
ii)分析下载的所有WSDL文件,如果WSDL文件中的类型定义<types>部分包含通过{http://www.w3.org/2001/XMLSchem}import或者{http://www.w3.org/2001/XMLSchem}include引用的其它XSD文件,则把引用的XSD文件下载到本地;
iii)分析下载的所有XSD文件,如果包含通过{http://www.w3.org/2001/XMLSchem}import或者{http://www.w3.org/2001/XMLSchem}include引用的其它XSD文件,则同时把引用的XSD文件下载到本地;
iv)下载的XSD文件默认保存到相应包资源树下的“XML Schema”结点下;
d)下载的WSDL文件默认保存到对应扩展包资源树下的“接口”结点下;
e)WSDL接口PortType中的操作作为资源树“接口”结点的子结点进行显示。
(3)编写实现数据对象转换接口的实现类,包括以下步骤:
a)新建Java Class,实现数据对象的转换接口IDataTransformer,其类图如图1如示;
b)实现数据对象转换接口的transform接口,把源数据按照服务定义的数据对象描述的格式转换为目标数据格式;
c)设置数据对象接口的源数据类型;
d)设置数据对象接口的目标数据类型;
e)设置数据对象转换中源数据类型到目标数据类型的转换权重,以便查找最优转换路径。
(4)配置数据对象转换规则,包括以下步骤:
a)在数据对象转换对应扩展包资源树下的“配置”结点下新建文件DataTransformer.conf;
b)在文件中配置数据对象的转换类,格式如下:
数据对象转换类全名;sourceType=源数据类型全名,targetType=目标数据类型全名,weight=数据类型转换权重。
如有把字符串转换为文档对象的转换类为com.transformer.String2Document,权重为100的配置为:
com.transformer.String2Document;sourceType=java.lang.String,targetType=org.w3c.dom.Document,weight=100。
(5)数据对象扩展包部署到运行环境中,包括以下步骤:
a)在数据对象转换对应扩展包资源树上右击,在弹出菜单中选择“部署”菜单;
b)数据对象转换对应扩展包下的资源按目录结构部署到运行环境中。
经过以上步骤,数据转换器的准备阶段已经完成,用户在添加新的数据类型转换时,通过几个简单的步骤:导入元数据描述、实现数据转换接口以及配置转换规则就完成了。
所述的运行期数据对象转换的配置加载包括以下步骤:
(1)提供支持数据对象转换扩展的接口类,以供扩展,包括以下步骤:
a)定义数据转换操作的接口类IDataTransformer,其类图如图1所示,供用户扩展,接口中包括数据对象的类型转换操作以及此转换对应的源和目标数据类型和转换的权重;
b)提供根据输入、输出数据类型获取数据转换类列表的工厂类DataTransformerFactory,其类图如图2如示。
(2)加载导入的服务对应的数据对象描述文件WSDL以及其中的数据类型定义XSDSchema信息,包括以下步骤:
a)解析导入的所有XSD文件,对其中的类型定义形成内存模型;
b)解析导入的所有WSDL文件,对其中定义的Schema Type进行解析,对其中的类型定义形成内存模型;
c)解析所有WSDL文件中的接口(PortType)定义,形成接口、操作以及操作参数的映射关系,类图如图3如示;
d)对所有的XSD、WSDL中的类型定义模型进行缓存;
e)对所有的WSDL中的PortType接口定义进行缓存。
(3)加载定义的数据对象转换配置文件,包括以下步骤:
a)查找构件包中配置文件DataTransformer.conf;
b)读取配置文件中的内容,文件中每一行对应一种数据类型的转换定义;
c)配置文件中定义的每个转换器进行实例化;
d)数据转换器实例注册到仓库DataTransformerRepository中。
(4)根据数据对象转换配置文件中定义的源、目标数据类型形成类型转换有向图,包括以下步骤:
a)从数据转换器实例注册仓库DataTransformerRepository中读取所有的数据转换器;
b)创建有向图Graph对象;
c)遍历所有的数据转换器;
d)每一数据转换器的形成有向图的边,其中源数据类型和目标数据类型作为边两端的结点,其类图如图4如示;
e)根据数据转换器的设置的权重,设置每条边的权重,形成的有向图图例如图5所示。
所述的运行期接入服务的数据对象转换包括以下步骤:
(1)根据接入服务的协议类型,确定服务对应的数据转换类型,包括以下步骤:
a)对接入服务,确定服务所对应的输入源数据类型;
b)查找接入的服务,确定服务对应业务操作的数据类型;
c)对接入服务,设置输入的数据类型转换;
d)对接入服务,设置输出的数据类型转换。
(2)对接入的服务生成服务代理,包括以下步骤:
a)查找服务定义的接口类型;
b)根据服务接口类型,生成基于接口或者基于类的代理;
c)根据服务接口定义,遍历服务中的所有方法,确定其输入以及输出数据类型;
d)对服务中的方法以及方法的类型进行缓存,以增加性能。
(3)服务代理中针对每一个服务方法调用生成调用链(InvocationChain),包括以下步骤:
a)实现基于代理的接口方法invoke;
b)根据要调用的服务方法名称以及参数类型,找到服务对应的目标方法;
c)对方法调用的参数进行封装,统一为包装数据对象Message,Message对象作为所有数据类型的总线对象进行传递;
d)针对每个方法,生成调用链(InvocationChain),调用链中的每一部分封装为Interceptor,其类图如图6所示;
e)业务方法的调用封装为调用的Interceptor,并加入到调用链的头部。
(4)服务代理中根据服务对应的数据转换类型,在方法的调用链中添加数据转换的拦截器(Interceptor),包括以下步骤:
a)根据服务对应的输入以及输出数据类型,判断是否需要进行数据转换;
b)如果需要,在方法调用的调用链中添加数据转换拦截器;
c)添加对输入数据进行转换拦截器到调用链首;
d)添加对输出数据进行转换拦截器到调用链尾,接入服务如图7所示,接出服务如图8所示。
(5)数据转换的拦截器(Interceptor)中,根据数据对象转换有向图,查找最优的数据转换路径,包括以下步骤:
a)根据服务对应的输入以及输出数据类型,判断是否需要进行数据转换;
b)如果需要,在方法调用的调用链中添加数据转换拦截器;
c)添加对输入数据进行转换拦截器到调用链首;
d)添加对输出数据进行转换拦截器到调用链尾,接入服务如图7所示,接出服务如图8所示。
(6)调用定义的数据对象格式转换实现类,实现不同数据对象的类型转换,包括以下步骤:
a)依次调用所需转换类的invoke方法,实现管道调用的方式,上一次的输出作为本次调用的输入,如图9所示;
b)调用结束,返回转换后的数据,传递给业务方法调用,调用过程如图10所示。
所述的运行期接出服务的数据对象转换包括以下步骤:
(1)根据接出服务的类型,确定服务对应的数据转换类型,包括以下步骤:
a)对接出服务,确定服务所对应的输出源数据类型;
b)查找接出的服务,确定服务对应业务操作的数据类型;
c)设置接出服务对应输入的数据类型转换;
d)设置接出服务对应输出的数据类型转换。
(2)对接出的服务生成服务代理,包括以下步骤:
a)查找需要接出服务的业务方法中对应的接口类型;
b)根据业务方法的接口类型,生成基于接口或者基于类的代理;
c)根据业务接口定义,遍历接口中的所有方法,确定其输入以及输出数据类型;
d)对业务接口中的方法以及方法的类型进行缓存,以增加性能。
(3)服务代理中针对每一个方法调用生成调用链(InvocationChain),包括以下步骤:
a)实现基于代理的接口方法invoke;
b)根据要调用的服务方法名称以及参数类型,找到服务对应的目标方法;
c)对方法调用的参数进行封装,统一为包装数据对象Message,Message对象作为所有数据类型的总线对象进行传递;
d)针对每个方法,生成调用链(InvocationChain),调用链中的每一部分封装为Interceptor,其类图如图6所示;
e)业务方法的调用封装为调用的Interceptor,并加入到调用链的头部。
(4)服务代理中根据服务对应的数据转换类型,在方法的调用链中添加数据转换的拦截器(Interceptor),包括以下步骤:
a)根据服务对应的输入以及输出数据类型,判断是否需要进行数据转换;
b)如果需要,在方法调用的调用链中添加数据转换拦截器;
c)添加对输入数据进行转换拦截器到调用链首;
d)添加对输出数据进行转换拦截器到调用链尾,接入服务如图7所示,接出服务如图8所示。
(5)数据转换的拦截器(Interceptor)中,根据数据对象转换有向图,查找最优的数据转换路径,包括以下步骤:
a)根据服务对应的输入以及输出数据类型,判断是否需要进行数据转换;
b)如果需要,在方法调用的调用链中添加数据转换拦截器;
c)添加对输入数据进行转换拦截器到调用链首;
d)添加对输出数据进行转换拦截器到调用链尾,接入服务如图7所示,接出服务如图8所示。
(6)调用定义的数据对象格式转换实现类,实现不同数据对象的类型转换,包括以下步骤:
a)依次调用所需转换类的invoke方法,实现管道调用的方式,上一次的输出作为本次调用的输入,如图9所示;
b)调用结束,返回转换后的数据,传递给业务方法调用,调用过程如图11所示。
经过以上步骤,服务集成中关于数据类型转换过程全部完成,从中可以得出采用了该发明的SOA应用系统服务集成中实现数据转换的方法,使系统的集成工作变得简单而高效,不再需要维护大量的转换器代码,而且对于外部不同的数据类型变化能够快速适应。
采用了该发明的面向服务的体系结构的应用系统服务集成中实现数据转换的系统结构及其方法,由于其中针对不同服务调用,系统能自动根据服务的类型进行数据的转换,以适应不同服务的要求,同时新增不同类型服务集成时,减少了调用的操作步骤和对不同外部工具的依赖,真正做到了灵活的调用,同时传递的数据采用统一的数据总线Message进行封装,能够适应不同服务的数据转换,从而使得系统的集成工作变得简单而高效,不再需要维护大量的转换器代码,而且对于外部不同的数据类型变化能够快速适应,从而使数据类型转换的开发、调用过程更加直观,提高了调用的效率,快捷方便,系统运行效率较高,性能稳定可靠,降低了开发维护的成本;同时增强了系统可移植性和可扩展性,能够快速适应业务需求的变化和技术变化,能够支撑建立高度模块化而且又高度整合的软件系统,不必修改核心代码就能增加新的数据类型的转换支持,以支持不同外部服务的需要,开发期简单,接口明确,配置方便,运行期效率较高、系统性能稳定可靠,适用范围较为广泛,为SOA系统的集成发展打下了坚实的基础。
在此说明书中,本发明已参照其特定的实施例作了描述。但是,很显然仍可以作出各种修改和变换而不背离本发明的精神和范围。因此,说明书和附图应被认为是说明性的而非限制性的。