CN116800866A - 一种基于流机制解析xml支持平台多格式报文的方法及系统 - Google Patents
一种基于流机制解析xml支持平台多格式报文的方法及系统 Download PDFInfo
- Publication number
- CN116800866A CN116800866A CN202310803055.5A CN202310803055A CN116800866A CN 116800866 A CN116800866 A CN 116800866A CN 202310803055 A CN202310803055 A CN 202310803055A CN 116800866 A CN116800866 A CN 116800866A
- Authority
- CN
- China
- Prior art keywords
- node
- output stream
- xml
- application layer
- content
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 55
- 230000007246 mechanism Effects 0.000 title claims abstract description 46
- 230000000694 effects Effects 0.000 claims abstract description 9
- 230000008569 process Effects 0.000 claims description 9
- 230000000977 initiatory effect Effects 0.000 claims description 3
- 238000000926 separation method Methods 0.000 claims description 2
- 230000004048 modification Effects 0.000 description 6
- 238000012986 modification Methods 0.000 description 6
- 230000001960 triggered effect Effects 0.000 description 6
- 238000004458 analytical method Methods 0.000 description 4
- 230000004075 alteration Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 239000003153 chemical reaction reagent Substances 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000036316 preload Effects 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
Landscapes
- Document Processing Apparatus (AREA)
Abstract
本发明提供一种基于流机制解析XML支持平台多格式报文的方法及系统,包括:将要传入的标准ESB报文的节点、属性信息填写配置成XML模板文件,存放于项目运行根目录;将body节点设置成include标签子节点,将要写入body节点的内容,按标签名‑标签值的形式,放入Map中,将Map作为参数传入框架;使用流机制读取模板文件,将模板配置的需要生成的节点和属性依次写入out输出流;在写入输出流时,如果读到include节点,且key值与应用层传入的key相同,则将应用层传入的键值对,键名为标签名,键值为标签值,依次生成独立的与include节点同级的节点;将out输出流的内容返回至应用层,完成请求报文的组装。本发明基于流机制解析XML文本,实现了统一支付平台高效动态支持多格式报文效果。
Description
技术领域
本发明涉及远程接口调用技术领域,更具体地,涉及一种基于流机制解析XML支持平台多格式报文的方法及系统。
背景技术
银行支付系统分为网关模块,路由模块、通道业务处理模块、批处理模块。各服务之间采用DUBBO RPC协议通信。
商户调用支付系统提供的服务时,按照支付系统提供的标准接口文档进行接入。请求经由银行的企业服务总线(ESB)治理,再经由F5做负载均衡,到达支付系统网关层。网关层将接收到的请求报文,进行解析、校验、分发到路由层。路由层按照预设的路由规则,分发到匹配的通道服务。
解析XML文本时,通常有两种方式:
一种是树形解析器,将读入的XML文档转换成树结构对象Document。这是基于内存读取,无论文件有多大,都会将所有的内容预先装载到内存中。特点是可以读取XML文件内容,也可以向XML文件中插入数据和修改数据。
另一种是流机制解析器,在读入XML文档时生成相应的事件。这是基于事件的,当某个事件被触发时,才获取相应的XML的部分数据,占用内存较小。按顺序一边读取数据,一边进行解析,在读取数据的时候会触发事件,每触发一次,就执行一次触发方法。特点是只能对XML文件内容进行读取,而不能在文件中插入或修改数据。
如果采取DOM树解析,读写便捷,但是占用内存较大,应用性能降低。如果采用流机制解析,写入不便,但是内存占用小,应用性能提升。
发明内容
本发明针对现有技术中存在的技术问题,提供一种基于流机制解析XML支持平台多格式报文的方法及系统,本发明解决的问题是统一支付平台接收的请求报文原本是在body节点下固定放入两个节点,一个是PLAIN节点,送业务数据,多个业务数据字段以“;”分隔,另一个是SIGNATURE节点,送业务数据的MD5加密串。现在有需求要变更PLAIN节点值,修改为一个业务数据单独使用一个节点的形式。
根据本发明的第一方面,提供了一种基于流机制解析XML支持平台多格式报文的方法,所述方法包括以下步骤:
步骤1,将要传入的标准ESB报文的节点、属性信息填写配置成XML模板文件,存放于项目特定目录;
步骤2,在模板文件中,将body节点设置成include标签子节点,设置key值;应用层将要写入body节点的内容,按标签名-标签值的形式,放入Map中,Map中要指定存放key-value,将Map作为参数传入框架对外暴露的调用方法;
步骤3,框架层使用流机制读取模板文件,并将模板配置的需要生成的节点和属性依次写入out输出流;
步骤4,框架层在写入输出流时,如果读到include节点,且key值与应用层传入的key相同,则将应用层传入的键值对,键名为标签名,键值为标签值,依次生成独立的与include节点同级的节点;
步骤5,将out输出流的内容返回至应用层,完成请求报文的组装。
在上述技术方案的基础上,本发明还可以作出如下改进。
可选的,所述应用层是项目中针对不同的场景会做不同的业务处理,面向业务逻辑编写代码和处理数据;无论是需要传入以符号“;”分隔还是以多节点形式的报文,在本框架下均能动态支持多格式报文的效果。
可选的,所述框架层即是项目中将公用方法抽象出来,封装成一个盒子,作为对外暴露一个窗口,在编写逻辑代码时,将要填充的数据送进窗口,盒子会将数据按照逻辑加工成完整的ESB请求报文;所述框架层使用流机制读取模板文件,并将模板配置的需要生成的节点和属性依次写入out输出流包括:
在遇到<Group name=”app-header”>的节点时,向输出流中写入<sys-header>,其他节点依此类逐步生成并依次写入out输出流。
可选的,所述依次生成独立的与include节点同级的节点包括:假如应用层传入的键值对为k1-v1,则会生成结构如下:
<body>
<data name="k1">
<field type="string"length="2">v1</field>
</data>
</body>。
可选的,所述将out输出流的内容返回至应用层,完成请求报文的组装具体包括:
经过基于流机制读取XML模板文件,遇到标签的开始和关闭事件时,对内容进行增加和修改,最终将out输出流的内容返回至应用层,完成了请求报文的组装。
根据本发明的第二方面,提供一种基于流机制解析XML支持平台多格式报文的系统,包括:
请求发起模块,用于将要传入的标准ESB报文的节点、属性信息填写配置成一个XML模板文件,存放于项目特定目录;在模板文件中,将body节点设置一个include标签子节点,设置key值;应用层将要写入body节点的内容,按标签名-标签值的形式,放入Map中,Map中要指定存放一个key-value,将Map作为参数传入框架对外暴露的调用方法;
框架模块,用于将框架层使用流机制读取模板文件,并将模板配置的需要生成的节点和属性依次写入out输出流;框架层在写入输出流时,如果读到include节点,且key值与应用层传入的key相同,则将应用层传入的键值对,键名为标签名,键值为标签值,依次生成独立的与include节点同级的节点;
应用模块,用于将out输出流的内容返回至应用层,则完成了请求报文的组装。
可选的,所述将模板配置的需要生成的节点和属性依次写入out输出流包括:
在遇到<Group name=”app-header”>的节点时,向输出流中写入<sys-header>,其他节点依此类逐步生成并依次写入out输出流。
可选的,所述将out输出流的内容返回至应用层,完成请求报文的组装具体包括:
经过基于流机制读取XML模板文件,遇到标签的开始和关闭事件时,对内容进行增加和修改,最终将out输出流的内容返回至应用层,完成了请求报文的组装。
本发明的技术效果和优点:
本发明提供了一种基于流机制解析XML支持平台多格式报文的方法及系统,其基于流机制解析器,高效解析XML文本,在框架层按照预设的XML结构模板,于指定节点处动态添加子节点,且动态解析接收的请求XML内容,将字段名与字段值放进系统内存中,供灵活取用。
本发明基于流机制解析XML文本,实现了统一支付平台高效动态支持多格式报文效果。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在说明书、权利要求书以及附图中所指出的结构来实现和获得。
附图说明
图1为本发明实施例提供的处理标签开始事件;
图2为本发明实施例提供的处理标签结束事件;
图3为本发明实施例提供的基于流机制解析XML支持平台多格式报文的方法流程图;
图4为本发明实施例提供的节点内容演示代码。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在现有技术中,统一支付平台作为支付中间平台,提供鉴权、代付和协议支付的服务。接收商户请求之后,根据预设的路由规则,调用到对应的支付通道,完成客户的鉴权、提现和充值等要求。
商户发起的请求,需要先通过企业服务总线ESB,做相应的治理,请求报文结构首先按照ESB统一规范组装,在约定的body节点下,填充业务数据。请求提交到统一支付之后,统一支付平台通过流机制解析请求内容。现有解析步骤有:
步骤一、创建SAXParserFactory的实例,这是JDK提供的类。使用SAXParserFactory.newInstance()的方式,创建工厂的实例,工厂会按照开发者的需要,从内存中创建出要使用对象的实例,类似工厂制造产品的模式;
步骤二、通过SAXParserFactory的实例,创建SAXParser的实例;使用SAXParserFactory.newSaxParser()的方式,从步骤一中的工厂对象中创建一个SaxParser对象,该对象提供相应的方法,触发对文档以及标签开始和结束事件的调用;
步骤三、编写自定义Handler类,使其继承JDK提供的Handler类,重写父类;在该类中定义文档开始,标签开始,标签结束,文档结束等事件的响应方法,在各自方法中,使用者可以自由读取或是写入内容;
在本步骤中,重写父类的方法包括:
startDocument:触发开始解析xml文本的事件时调用;
startElement:触发解析节点的开始标签的事件时调用;
characters:触发解析完节点的开始标签之后事件的调用,会将节点的标签名、节点值、属性名、属性值;
endElement:触发解析节点的结束标签的事件时调用;
endDocument:触发结束解析xml文本的事件时调用;
步骤四、调用SAXParser的parse()方法,开始解析文本,触发相关事件,调用事件回调方法完成整个文档的流式读写内容;
步骤五、在characters()方法中,读取了预先配置的ESB标准模板文件。
进一步地,为了更详细地表达这个过程,列出读取数据的简单示例,具体如图1和图2所示,分别是处理标签开始和标签结束的事件,在事件回调方法中向类定义的全局变量分别写入了标签,标签属性和标签值。完成了从一个XML文本流式读入,然后流式输出写入另一个XML文本,实现了动态写入的效果。
基于上述的讲解,统一支付平台原本就是在框架层动态解析请求报文,无论上送的body节点下是单个节点还是多个节点,都能动态解析出内容,以HashMap的数据结构存放于内存中,供业务代码按需取用。所以本发明实施例主要重点讲述组装请求报文的方式。
可以理解的是,基于背景技术中的缺陷,具体如图3所示,本发明实施例提出了一种基于流机制解析XML支持平台多格式报文的方法,所述方法包括以下步骤:
步骤1,将要传入的标准ESB报文的节点、属性等信息填写配置成一个XML模板文件,存放于项目运行根目录;
步骤2,将body节点设置一个include标签子节点,设置key值;应用层将要写入body节点的内容,按标签名-标签值的形式,放入Map中,Map中要指定存放一个key-value,表示要填充到模板的何处。将Map作为参数传入框架对外暴露的调用方法;
在本实施例中,所有调用本行系统服务的请求报文,必须经过ESB治理,且报文需要符合ESB的结构要求,除了<body>节点内容是系统自定义的数据以外,其他所有节点,均是固定不变的内容,如图4所示,像<sys-header>、<app-header>等节点均是固定节点固定值,所以项目将这些固定的内容填写完毕作为通用模板存储,设置一个可替换的节点,用key值标记。并根据不同的业务要求,替换成对应的节点内容。
步骤3,框架层使用流机制读取模板文件,并将模板配置的需要生成的节点和属性依次写入out输出流。
需要进行说明的是,在实施例中,框架层即是项目中将公用方法抽象出来,封装成一个盒子,对外暴露一个窗口,程序员编写逻辑代码时,把要填充的数据送进窗口,盒子会将数据按照上述逻辑加工成完整的ESB请求报文。
所述框架层使用流机制读取模板文件,并将模板配置的需要生成的节点和属性依次写入out输出流具体包括:
框架层使用流机制逐行读取模板文件中的标签内容,假如遇到类似<Group name=”app-header”>的节点时,会向输出流中写入<sys-header>,其他节点同理逐步生成并依次写入out输出流。
步骤4,框架层在写入输出流时,如果读到include节点,且key值与应用层传入的key相同,则将应用层传入的键值对,键名为标签名,键值为标签值,依次生成独立的与include节点同级的节点;
在本实施例中,应用层即是项目中针对不同的场景会做不同的业务处理,面向业务逻辑编写代码和处理数据。
应用层无论是需要传入以符号“;”分隔还是以多节点形式的报文,在本框架下均能动态支持,实现了支持多格式报文的效果。
所述依次生成独立的与include节点同级的节点具体如下所示:
假如应用层传入的键值对为k1-v1,则会生成这样的一个结构:
<body>
<data name="k1">
<field type="string"length="2">v1</field>
</data>
</body>。
步骤5,将out输出流的内容返回至应用层,则完成了请求报文的组装。
在本实施例中,经过基于流机制读取XML模板文件,遇到标签的开始和关闭事件时,对内容进行增加和修改,实现了文本内容的替换和增加,最终将out输出流的内容返回至应用层,则完成了请求报文的组装。由模板文件转化至标准请求报文的效果。
综上所述,本发明实施例所要解决的问题是统一支付平台接收的请求报文原本是在body节点下固定放入两个节点,一个是PLAIN节点,送业务数据,多个业务数据字段以“;”分隔,另一个是SIGNATURE节点,送业务数据的MD5加密串。现在有需求要变更PLAIN节点值,修改为一个业务数据单独使用一个节点的形式。本发明基于流机制解析XML文本,实现了统一支付平台高效动态支持多格式报文效果。
本发明实施例还提供一种基于流机制解析XML支持平台多格式报文的系统,所述系统包括以下模块:
请求发起模块,用于将要传入的标准ESB报文的节点、属性信息填写配置成一个XML模板文件,存放于项目特定目录;在模板文件中,将body节点设置一个include标签子节点,设置key值;应用层将要写入body节点的内容,按标签名-标签值的形式,放入Map中,Map中要指定存放一个key-value,将Map作为参数传入框架对外暴露的调用方法;
框架模块,用于将框架层使用流机制读取模板文件,并将模板配置的需要生成的节点和属性依次写入out输出流;框架层在写入输出流时,如果读到include节点,且key值与应用层传入的key相同,则将应用层传入的键值对,键名为标签名,键值为标签值,依次生成独立的与include节点同级的节点;
应用模块,用于将out输出流的内容返回至应用层,则完成了请求报文的组装。
可以理解的是,本发明提供的一种基于流机制解析XML支持平台多格式报文的系统与前述各实施例提供的一种基于流机制解析XML支持平台多格式报文的方法相对应,一种基于流机制解析XML支持平台多格式报文的系统的相关技术特征可参考一种基于流机制解析XML支持平台多格式报文的方法的相关技术特征,在此不再赘述。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包括这些改动和变型在内。
最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (8)
1.一种基于流机制解析XML支持平台多格式报文的方法,其特征在于,所述方法包括以下步骤:
步骤1,将要传入的标准ESB报文的节点、属性信息填写配置成XML模板文件,并存放于项目运行根目录;
步骤2,将body节点设置成include标签子节点,设置key值;应用层将要写入body节点的内容,按标签名-标签值的形式,放入Map中,Map中要指定存放关键字值,并将Map作为参数传入框架作为对外暴露的调用方法;
步骤3,框架层使用流机制读取模板文件,并将模板配置的需要生成的节点和属性依次写入out输出流;
步骤4,框架层在写入输出流时,如果读到include节点,且key值与应用层传入的key相同,则将应用层传入的键值对,键名为标签名,键值为标签值,依次生成独立的与include节点同级的节点;
步骤5,将out输出流的内容返回至应用层,完成请求报文的组装。
2.根据权利要求1所述的一种基于流机制解析XML支持平台多格式报文的方法,其特征在于,所述应用层是项目中针对不同的场景会做不同的业务处理,面向业务逻辑编写代码和处理数据;无论是需要传入以符号“;”分隔还是以多节点形式的报文,在本框架下均能动态支持多格式报文的效果。
3.根据权利要求1所述的一种基于流机制解析XML支持平台多格式报文的方法,其特征在于,所述框架层即是项目中将公用方法抽象出来,封装成一个盒子,作为对外暴露一个窗口,在编写逻辑代码时,将要填充的数据送进窗口,盒子会将数据按照逻辑加工成完整的ESB请求报文;所述框架层使用流机制读取模板文件,并将模板配置的需要生成的节点和属性依次写入out输出流包括:
在遇到<Group name=”app-header”>的节点时,向输出流中写入<sys-header>,其他节点依此类逐步生成并依次写入out输出流。
4.根据权利要求1所述的一种基于流机制解析XML支持平台多格式报文的方法,其特征在于,所述依次生成独立的与include节点同级的节点包括:假如应用层传入的键值对为k1-v1,则生成结构如下:
<body>
<data name="k1">
<field type="string"length="2">v1</field>
</data>
</body>。
5.根据权利要求1所述的一种基于流机制解析XML支持平台多格式报文的方法,其特征在于,所述将out输出流的内容返回至应用层,完成请求报文的组装包括:
在经过基于流机制读取XML模板文件,遇到标签的开始和关闭事件时,对内容进行增加和修改,最终将out输出流的内容返回至应用层,完成了请求报文的组装。
6.一种基于流机制解析XML支持平台多格式报文的系统,其特征在于,包括:
请求发起模块,用于将要传入的标准ESB报文的节点、属性信息填写配置成一个XML模板文件,存放于项目运行根目录;在模板文件中,将body节点设置一个include标签子节点,设置key值;应用层将要写入body节点的内容,按标签名-标签值的形式,放入Map中,Map中要指定存放一个关键字值,将Map作为参数传入框架作为对外暴露的调用方法;
框架模块,用于将框架层使用流机制读取模板文件,并将模板配置的需要生成的节点和属性依次写入out输出流;框架层在写入输出流时,如果读到include节点,且key值与应用层传入的key相同,则将应用层传入的键值对,键名为标签名,键值为标签值,依次生成独立的与include节点同级的节点;
应用模块,用于将out输出流的内容返回至应用层,则完成了请求报文的组装。
7.根据权利要求6所述的一种基于流机制解析XML支持平台多格式报文的系统,其特征在于,所述将模板配置的需要生成的节点和属性依次写入out输出流包括:
在遇到<Group name=”app-header”>的节点时,向输出流中写入<sys-header>,其他节点依此类逐步生成并依次写入out输出流。
8.根据权利要求6所述的一种基于流机制解析XML支持平台多格式报文的系统,其特征在于,所述将out输出流的内容返回至应用层,完成请求报文的组装具体包括:
经过基于流机制读取XML模板文件,遇到标签的开始和关闭事件时,对内容进行增加和修改,最终将out输出流的内容返回至应用层,完成了请求报文的组装。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310803055.5A CN116800866A (zh) | 2023-06-30 | 2023-06-30 | 一种基于流机制解析xml支持平台多格式报文的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310803055.5A CN116800866A (zh) | 2023-06-30 | 2023-06-30 | 一种基于流机制解析xml支持平台多格式报文的方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116800866A true CN116800866A (zh) | 2023-09-22 |
Family
ID=88034436
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310803055.5A Pending CN116800866A (zh) | 2023-06-30 | 2023-06-30 | 一种基于流机制解析xml支持平台多格式报文的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116800866A (zh) |
-
2023
- 2023-06-30 CN CN202310803055.5A patent/CN116800866A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4015375B2 (ja) | クライアント側ユーザインタフェース要素を処理するサーバ側制御オブジェクト | |
CN100416567C (zh) | 用于对象模型与xml间转换的可共享双向方法和系统 | |
KR101331256B1 (ko) | Mime의 문서 객체 모델 api | |
US20130066947A1 (en) | System and Method for Managing Applications for Multiple Computing Endpoints and Multiple Endpoint Types | |
CN101609415B (zh) | 基于中间件的通用服务调用系统及方法 | |
US20100058285A1 (en) | Compositional view of imperative object model | |
US20050091249A1 (en) | Single file serialization for physical and logical meta-model information | |
US20120159306A1 (en) | System And Method For Processing XML Documents | |
CN102566984B (zh) | 一种配置参数的方法及装置 | |
CN113434175B (zh) | 数据处理方法、装置、存储介质及设备 | |
US8914482B2 (en) | Translation of technology-agnostic management commands into multiple management protocols | |
CN101197818A (zh) | 一种asn.1报文面向对象的处理方法 | |
US10223108B2 (en) | System and method of reconstructing complex custom objects | |
CN113050946A (zh) | 生成网站应用系统的方法、装置、电子设备及存储介质 | |
US10944824B2 (en) | Method and apparatus for processing media type in rest software architecture | |
KR20090000199A (ko) | 웹 서버 어플리케이션 프레임워크와 상기 프레임워크를이용한 웹 어플리케이션 처리 방법 및 이를 구현할 수 있는컴퓨터로 읽을 수 있는 기록 매체 | |
CN111124924B (zh) | Api部署方法、装置、电子设备及存储介质 | |
CN111143310B (zh) | 日志记录方法及装置、可读存储介质 | |
CN116800866A (zh) | 一种基于流机制解析xml支持平台多格式报文的方法及系统 | |
Ma et al. | Model-based management of service composition | |
US20090276795A1 (en) | Virtual automata | |
US20070112793A1 (en) | Model publishing framework | |
US8239419B2 (en) | Generating service component definition language from metadata | |
Nataf et al. | End-to-end YANG-based configuration management | |
US20160117151A1 (en) | GENERATING CONSUMER-ORIENTED APIs FROM A UI MODEL |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |