一种基于FreeMarker模板引擎的金融报文转换方法及系统与流程

文档序号:28699343发布日期:2022-01-29 12:58阅读:279来源:国知局
一种基于FreeMarker模板引擎的金融报文转换方法及系统与流程
一种基于freemarker模板引擎的金融报文转换方法及系统
技术领域
1.本发明涉及源系统与目标系统之间的金融报文转换技术,特别是一种基于freemarker模板引擎的金融报文转换方法及系统。


背景技术:

2.在当前信息技术快速发展的大背景下,金融行业尤其是银行系统也面临需要不断更新换代的问题。其中,作为银行信息科技中起支撑作用的目标系统,已经逐渐无法满足行业发展需要,各家银行纷纷开展新一代目标系统建设任务,由传统集中式技术架构向分布式、微服务、云计算领域更新换代。在新老目标系统替换过程中,由于与目标系统交互的源系统繁多且业务关系复杂,会造成项目整体开发难度大、替换进度慢等难点。本发明的报文转换系统主要用于解决各源系统调用目标系统报文接口不一致、报文转换效率低等问题,可以在最大程度减少源系统调用的目标系统服务接口的变化,对外围渠道提供的实时交易数据接口进行交易服务数据接口转换,满足各家银行快速上线目标系统,尽量降低源系统改动而带来的上线周期长的问题,保障顺利完成目标上线任务。其涉及到的开发工具freemarker是一种基于模板和要改变的数据,并用来生成输出文本(htl网页、电子邮件、配置文件、源代码等)的模板引擎。模板编写为freemarker template language(ftl),它是简单的、专用的语言,不是像php那样成熟的编程语言。在模板中,可以专注于如何展现数据,而在模板之外可以专注于要展示什么数据。


技术实现要素:

3.本发明针对现有技术的缺陷或不足,提供一种基于freemarker模板引擎的金融报文转换方法及系统。
4.本发明的技术解决方案如下:一种基于freemarker模板引擎的金融报文转换方法,用于源系统与目标系统之间的报文传输,所述源系统是金融交易报文的发起方,所述目标系统是所述金融交易报文的响应方,所述源系统的发起金融交易报文因不符合所述目标系统的响应要求而存在报文交互障碍,其特征在于,包括以下步骤以消除所述报文交互障碍:步骤a,源系统发送金融交易报文到金融报文转换系统的前置消息队列;步骤b,金融报文转换系统读取所述前置消息队列中的所述金融交易报文数据,根据交易码字段匹配freemaker模板引擎中预设模板进行报文转换;步骤c,将转换生成的目标系统格式的报文通过tuxedo适配层发送给目标系统。
5.步骤d,所述目标系统根据所述源系统的发起金融交易报文生成响应金融交易报文,并将所述响应金融交易报文发送到所述金融报文转换系统的应答接收队列;步骤e,所述金融报文转换系统对所述响应金融交易报文进行报文逆转换后返回到所述源系统。
6.所述步骤a中的消息队列对所述源系统的发起金融交易报文进行缓存处理,所述
缓存处理包括报文字段的映射缓存,报文值的映射缓存,以及全报文模板缓存,缓存采用初始化数据库加载到执行引擎中,由执行引擎调用缓存参数,完成使用缓存的目的。
7.所述步骤b中的报文转换采用以下3种方式中一种:只针对报文数据而不针对报文结构;只针对报文结构而不针对报文数据;报文结构和报文数据兼具。
8.所述步骤b中的报文转换包括以下具体步骤:步骤b1,创建一个configuration对象,直接new一个对象,构造方法的参数就是freemarker对应的版本号;步骤b2,设置模板文件所在的路径;步骤b3,设置模板文件使用的字符集;步骤b4,加载一个模板,创建一个模板对象;步骤b5,创建一个模板使用的数据集;步骤b6,创建一个writer对象,指定生成的文件名;步骤b7,调用模板对象的process方法输出文件;步骤b8,关闭流。
9.所述金融报文转换系统在启动时包括初始化freemarker模板路径,初始化配置依赖及类依赖,所述配置依赖路径为/mid/webcontent/web-inf/env/context/mid.xml;所述类依赖路径为spc.webos.util.systemutil;所述初始化freemarker模板包括配合freemarker的懒加载策略,在每支交易第一次使用的时候对应的freemarker模板被加载到系统缓存中,之后再调用该交易则会从缓存中读取模板信息以提高交易性能。
10.所述金融报文转换系统在初始化时,包括按交易配置好各交易源系统报文结构到目标系统报文结构的映射关系,并导入到数据库中,同时加载到应用缓存区。
11.所述步骤b中的报文转换为只针对报文结构而不针对报文数据的报文结构转换,所述金融报文转换系统按交易配置好各交易源系统报文结构到目标系统报文结构的映射关系,并导入到数据库中,同时加载到应用缓存区;当所述金融报文转换系统接收到做完字段映射以及字典码转换的报文后,先从源系统报文头中找到该报文的交易码,通过交易码,从应用缓存中找到该交易的报文结构映射关系后按照以下流程开始转换:读取源系统报文stdfix标签下的内容,按报文定长头的映射关系对数据补位并转换为目标系统定长头放到报文开始;读取源系统报文stdxmlreq标签下的内容,按xml报文头的映射关系将数据转换到目标系统xml报文头中;读取源系统报文request下xml报文体的所有内容,按该交易xml报文体配置的映射关系将数据转换到目标系统xml报文体中;然后组装目标系统报文,先将目标系统xml报文头和目标系统xml报文体组装,合并到目标系统xml报文结构中,然后将目标系统定长头和目标系统xml报文合并为整体报文;根据配置在整体报文前加上报文长度位,然后将该报文通过通讯适配器tuxedo发送到目标系统。
12.一种基于freemarker模板引擎的金融报文转换系统,其特征在于,包括包括与报文转换装置分别连接的报文接收装置、报文发送装置和freemarker模板引擎;
所述报文接收装置从源系统接收报文数据到消息队列;消息队列mq是一种应用程序对应用程序的通信方法,应用程序通过写和检索出入列队的针对应用程序的数据来通信,而无需专用连接来链接它们,队列的使用除去了接收和发送应用程序同时执行的要求;所述报文转换装置启动时会初始化freemarker模板路径,初始化依赖配置及依赖类,配置及初始化方法包括配合freemarker的懒加载策略在每支交易第一次使用的时候,对应的freemarker模板会被加载到系统缓存中,之后再调用该交易则会从缓存中读取模板信息以提高交易性能,报文转换装置是担任了源系统与目标系统通讯中间件角色,由于源系统与目标系统两方的报文格式不一致,所以报文转换装置中间转换,即拆解源系统上送报文到map中,经过目标系统的字典映射等方面转换后,将上送目标系统的报文内容与上送目标系统的freemarker报文模板进行组装,目标系统响应则是一种相应的逆操作;所述报文发送装置通过tuxedo通信选择java的方式调用jolt连接池,所述jolt通用调用包需要通过配置文件来进行配置,根据协议文档的内容,获取tuxedo服务返回的各个数据项,将生成的统一格式报文发送给目标系统。
13.本发明的技术效果如下:本发明一种基于freemarker模板引擎的金融报文转换方法及系统,担任了源系统与目标系统通讯中间件角色,由于源系统与目标系统两方的报文格式不一致,所以报文转换装置中间转换,即拆解源系统上送报文到map中,经过目标系统的字典映射等方面转换后,将上送目标系统的报文内容与上送目标系统的freemarker报文模板进行组装,目标系统响应则是一种相应的逆操作。总而言之,freemarker模板在主数据集成交互中提供了更多的可扩展性,因为基于freemarker的特性,在进行主数据与目标系统集成时,不需要进行代码和接口的二次开发,就能方便快捷地实现特殊报文处理,使得源系统与目标系统的数据集成交互更加高效,并具有更好的可移植性。
附图说明
14.图1是实施本发明一种基于freemarker模板引擎的金融报文转换方法的工作流程示意图。图1中包括步骤a,源系统发送交易报文到金融报文转换系统的前置消息队列;步骤b,金融报文转换系统读取所述前置消息队列中的所述交易报文数据,根据交易码字段匹配freemaker模板引擎中预设模板进行报文转换;步骤c,将转换生成的目标系统格式的报文通过tuxedo适配层发送给目标系统。freemarker是一种基于模板和要改变的数据,并用来生成输出文本(htl网页、电子邮件、配置文件、源代码等)的模板引擎。tuxedo是通讯适配器。消息队列(mq)是一种应用程序对应用程序的通信方法,应用程序通过写和检索出入队列的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们,队列的使用除去了接收和发送应用程序同时执行的要求。
15.图2是实施本发明一种基于freemarker模板引擎的金融报文转换系统结构示意图。图2中金融报文转换系统包括与报文转换装置分别连接的报文接收装置、报文发送装置和freemarker模板引擎。
具体实施方式
16.下面结合附图(图1-图2)对本发明进行说明。
17.图1是实施本发明一种基于freemarker模板引擎的金融报文转换方法的工作流程
示意图。图2是实施本发明一种基于freemarker模板引擎的金融报文转换系统结构示意图。参考图1至图2所示,一种基于freemarker模板引擎的金融报文转换方法,用于源系统与目标系统之间的报文传输,所述源系统是金融交易报文的发起方,所述目标系统是所述金融交易报文的响应方,所述源系统的发起金融交易报文因不符合所述目标系统的响应要求而存在报文交互障碍,其特征在于,包括以下步骤以消除所述报文交互障碍:步骤a,源系统发送金融交易报文到金融报文转换系统的前置消息队列;步骤b,金融报文转换系统读取所述前置消息队列中的所述金融交易报文数据,根据交易码字段匹配freemaker模板引擎中预设模板进行报文转换;步骤c,将转换生成的目标系统格式的报文通过tuxedo适配层发送给目标系统。步骤d,所述目标系统根据所述源系统的发起金融交易报文生成响应金融交易报文,并将所述响应金融交易报文发送到所述金融报文转换系统的应答接收队列;步骤e,所述金融报文转换系统对所述响应金融交易报文进行报文逆转换后返回到所述源系统。
18.所述步骤a中的消息队列对所述源系统的发起金融交易报文进行缓存处理,所述缓存处理包括报文字段的映射缓存,报文值的映射缓存,以及全报文模板缓存,缓存采用初始化数据库加载到执行引擎中,由执行引擎调用缓存参数,完成使用缓存的目的。所述步骤b中的报文转换采用以下3种方式中一种:只针对报文数据而不针对报文结构;只针对报文结构而不针对报文数据;报文结构和报文数据兼具。
19.所述步骤b中的报文转换包括以下具体步骤:步骤b1,创建一个configuration对象,直接new一个对象,构造方法的参数就是freemarker对应的版本号;步骤b2,设置模板文件所在的路径;步骤b3,设置模板文件使用的字符集;步骤b4,加载一个模板,创建一个模板对象;步骤b5,创建一个模板使用的数据集;步骤b6,创建一个writer对象,指定生成的文件名;步骤b7,调用模板对象的process方法输出文件;步骤b8,关闭流。
20.所述金融报文转换系统在启动时包括初始化freemarker模板路径,初始化配置依赖及类依赖,所述配置依赖路径为/mid/webcontent/web-inf/env/context/mid.xml;所述类依赖路径为spc.webos.util.systemutil;所述初始化freemarker模板包括配合freemarker的懒加载策略,在每支交易第一次使用的时候对应的freemarker模板被加载到系统缓存中,之后再调用该交易则会从缓存中读取模板信息以提高交易性能。所述金融报文转换系统在初始化时,包括按交易配置好各交易源系统报文结构到目标系统报文结构的映射关系,并导入到数据库中,同时加载到应用缓存区。
21.所述步骤b中的报文转换为只针对报文结构而不针对报文数据的报文结构转换,所述金融报文转换系统按交易配置好各交易源系统报文结构到目标系统报文结构的映射关系,并导入到数据库中,同时加载到应用缓存区;当所述金融报文转换系统接收到做完字段映射以及字典码转换的报文后,先从源系统报文头中找到该报文的交易码,通过交易码,从应用缓存中找到该交易的报文结构映射关系后按照以下流程开始转换:读取源系统报文stdfix标签下的内容,按报文定长头的映射关系对数据补位并转换为目标系统定长头放到报文开始;读取源系统报文stdxmlreq标签下的内容,按xml报文头的映射关系将数据转换到目标系统xml报文头中;读取源系统报文request下xml报文体的所有内容,按该交易xml报文体配置的映射关系将数据转换到目标系统xml报文体中;然后组装目标系统报文,先将目标系统xml报文头和目标系统xml报文体组装,合并到目标系统xml报文结构中,然后将目标系统定长头和目标系统xml报文合并为整体报文;根据配置在整体报文前加上报文长度
位,然后将该报文通过通讯适配器tuxedo发送到目标系统。
22.一种基于freemarker模板引擎的金融报文转换系统,包括包括与报文转换装置分别连接的报文接收装置、报文发送装置和freemarker模板引擎;所述报文接收装置从源系统接收报文数据到消息队列;消息队列mq是一种应用程序对应用程序的通信方法,应用程序通过写和检索出入列队的针对应用程序的数据来通信,而无需专用连接来链接它们,队列的使用除去了接收和发送应用程序同时执行的要求;所述报文转换装置启动时会初始化freemarker模板路径,初始化依赖配置及依赖类,配置及初始化方法包括配合freemarker的懒加载策略在每支交易第一次使用的时候,对应的freemarker模板会被加载到系统缓存中,之后再调用该交易则会从缓存中读取模板信息以提高交易性能,报文转换装置是担任了源系统与目标系统通讯中间件角色,由于源系统与目标系统两方的报文格式不一致,所以报文转换装置中间转换,即拆解源系统上送报文到map中,经过目标系统的字典映射等方面转换后,将上送目标系统的报文内容与上送目标系统的freemarker报文模板进行组装,目标系统响应则是一种相应的逆操作;所述报文发送装置通过tuxedo通信选择java的方式调用jolt连接池,所述jolt通用调用包需要通过配置文件来进行配置,根据协议文档的内容,获取tuxedo服务返回的各个数据项,将生成的统一格式报文发送给目标系统。
23.为了解决现有技术中存在的多种源报文格式的数据不能进行统一转换或转换效率低等问题,本发明提供了一种基于freemarker模板引擎的报文数据转换方法,达到了高效接受多种来源、多格式的报文数据,并能够快速转换的效果。本发明要解决的技术问题通过以下技术方案实现:一方面,本发明提供了一种基于freemarker模板的报文数据转换方法,包括以下步骤:步骤s1、报文发起方系统(源系统)发送交易报文到报文转换系统接收模块(消息队列);由消息队列将报文进行缓存处理;缓存服务包括:报文字段的映射缓存、报文值的映射缓存(字典映射缓存)、以及全报文模板的缓存。缓存采用初始化数据库加载到执行引擎中。由执行引擎调用缓存参数,完成使用缓存的目的。
24.步骤s2、报文转换系统读取消息队列中的报文数据,根据交易码字段匹配freemaker模板引擎中预设模板进行报文格式转换,生成目标系统格式报文;步骤s3、处理报文格式转换后,报文转换系统通过tuxedo或者mq将目标格式报文发送给目标系统。
25.进一步的,所述步骤s2的具体步骤为:第一步:创建一个configuration对象,直接new一个对象。构造方法的参数就是freemarker对于的版本号。
26.第二步:设置模板文件所在的路径。
27.第三步:设置模板文件使用的字符集。一般就是utf-8.第四步:加载一个模板,创建一个模板对象。
28.第五步:创建一个模板使用的数据集,可以是pojo也可以是map。一般是map。
29.第六步:创建一个writer对象,一般创建一filewriter对象,指定生成的文件名。
30.第七步:调用模板对象的process方法输出文件。
31.第八步:关闭流。
32.进一步的,初始化:mip启动时会在初始化freemarker模板路径,初始化依赖配置及依赖类如下:配置依赖:/mid/webcontent/web-inf/env/context/mid.xml《bean class="com.trc.mid.boot.systemutil" factory-method="getinstance"
ꢀꢀꢀꢀꢀꢀꢀ
init-method="init" p:jvm="${app.jvm}" p:app="${app.name}"》
ꢀꢀꢀꢀꢀꢀꢀ
《property name="templatelocations"》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《list》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《value》${app.envdir}/ftl/《/value》
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
《/list》
ꢀꢀꢀꢀꢀꢀꢀ
《/property》
ꢀꢀꢀ
《/bean》。
33.类依赖:spc.webos.util.systemutil。
34.初始化方法:public void init() throws exception {
ꢀꢀꢀꢀꢀꢀꢀ
freemarkutil.setresourceloader(resourceloader);
ꢀꢀꢀꢀꢀꢀꢀ
freemarkutil.settemplatelocations(templatelocations);
ꢀꢀꢀꢀꢀꢀꢀ
initfreemarkerconf();
ꢀꢀꢀ
}。
35.通过上述配置及初始化方法,配合freemarker的懒加载策略(默认策略)在每支交易第一次使用的时候对应的freemarker模板会被加载到系统缓存中,之后再调用该交易则会从缓存中读取模板信息,提高交易性能。
36.在源系统与目标系统通讯时,由于双方系统之间报文结构的差异,需要建立报文结构转换机制,将源系统发送目标系统的报文转换为目标系统可识别的报文结构、将目标系统响应源系统的报文转换为源系统标准报文结构。报文结构转换只针对报文结构,不涉及报文数据转换。
37.初始化时,按交易配置好各交易源系统报文结构到目标系统报文结构的映射关系。并导入到数据库中,同时加载到应用缓存区。
38.结构转换组件接收到做完字段映射以及字典码转换的报文后,先从源系统报文头中找到该报文的交易码。
39.通过交易码,从应用缓存中找到该交易的报文结构映射关系。开始转换:读取源系统报文stdfix标签下的内容,按报文定长头的映射关系对数据补位并转换为目标系统定长头放到报文开始。
40.读取源系统报文stdxmlreq标签下的内容,按xml报文头的映射关系将数据转换到目标系统xml报文头中。
41.读取源系统报文request下xml报文体的所有内容,按该交易xml报文体配置的映射关系将数据转换到目标系统xml报文体中。
42.然后组装目标系统报文,先将目标系统xml报文头和目标系统xml报文体组装,合并到目标系统xml报文结构(root标签)中。然后将目标系统定长头和目标系统xml报文合并
为整体报文。
43.根据配置在整体报文前加上报文长度位。然后将该报文通过通讯适配器(tuxedo)发送到目标系统。
44.报文转换系统是担任了渠道与目标系统之间的通讯中间件角色,由于渠道与目标系统两方的报文格式不一致,所以需要报文转换系统进行中间转换,即拆解渠道上送报文到map中,经过向目标的字典映射等方面转换后,将上送目标系统的报文内容与上送目标系统的freemarker报文模板进行组装,目标系统响应则是上面过程的逆操作。
45.总而言之,freemarker模板在主数据集成交互中提供了更多的可扩展性,因为基于freemarker的特性,在进行主数据与目标系统集成时,不需要进行代码和接口的二次开发,就能方便快捷地实现特殊报文处理,使得源系统与目标系统的数据集成交互更加高效,并具有更好的可移植性。
46.另一方面,本发明提供了一种基于freemarker模板的报文数据转换系统,该系统包括以下装置:报文接收装置:从源系统接收报文数据到消息队列;消息队列(mq)是一种应用程序对应用程序的通信方法。应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们。队列的使用除去了接收和发送应用程序同时执行的要求。
47.报文转换装置:报文转换装置启动时会初始化freemarker模板路径,初始化依赖配置及依赖类。配置及初始化方法,配合freemarker的懒加载策略(默认策略)在每支交易第一次使用的时候,对应的freemarker模板会被加载到系统缓存中,之后再调用该交易则会从缓存中读取模板信息,提高交易性能。报文转换装置是担任了源系统与目标系统通讯中间件角色,由于源系统与目标系统两方的报文格式不一致,所以报文转换装置中间转换,即拆解源系统上送报文到map中,经过目标系统的字典映射等方面转换后,将上送目标系统的报文内容与上送目标系统的freemarker报文模板进行组装,目标系统响应则是上面过程的逆操作。
48.报文发送装置:报文发送装置通过tuxedo通信选择java的方式调用jolt连接池。通常,jolt通用调用包需要通过配置文件来进行配置。根据协议文档的内容,获取tuxedo服务返回的各个数据项,将生成的统一格式报文发送给目标系统。
49.实现代码举例:public void test() throws ioexception, templateexception {// 第一步:创建一个configuration对象,直接new一个对象。构造方法的参数就是freemarker对于的版本号。
50.configuration configuration = new configuration(configuration.getversion());// 第二步:设置模板文件所在的路径。
51.configuration.setdirectoryfortemplateloading(new file("d:\\java\\eclipse\\workspace_test\\freemarker\\src\\main\\webapp\\web-inf\\ftl"));// 第三步:设置模板文件使用的字符集。一般就是utf-8.
configuration.setdefaultencoding("utf-8");// 第四步:加载一个模板,创建一个模板对象。
52.template template = configuration.gettemplate("hello.ftl");// 第五步:创建一个模板使用的数据集,可以是pojo也可以是map。一般是map。
53.map datamodel = new hashmap();// 向数据集中添加数据datamodel.put("hello", "this is my first freemarker test.");// 第六步:创建一个writer对象,一般创建一filewriter对象,指定生成的文件名。
54.writer out = new filewriter(new file("d:\\java\\eclipse\\workspace_test\\freemarker\\out\\hello.html"));// 第七步:调用模板对象的process方法输出文件。
55.template.process(datamodel, out);// 第八步:关闭流。
56.out.close();}。
57.本发明说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。在此指明,以上叙述有助于本领域技术人员理解本发明创造,但并非限制本发明创造的保护范围。任何没有脱离本发明创造实质内容的对以上叙述的等同替换、修饰改进和/或删繁从简而进行的实施,均落入本发明创造的保护范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1