PE发送报文
步骤:
1. 在 action 中使用发送报文,要指定报文在 router 端的交易名称
2. 如果使用 supe.execute(context) 来发送,不需要第一步
3. 配置从网银到 router 的 xml 报文
4. 根据网银交易名匹配到 router 端交易名(这里对应的是第 2 步,如果用第一步的方式,可以跳过)
5. 在 router 端配置交易,记住命名空间,交易名等要一致
6. 配置报文编码,转换为主机的编码(交易名对应的数字)
7. 配置 router 到主机的报文
8. 配置主机返回 router 的报文
9. 配置 router 返回网银的报文
发送报文配置 xml ,以查询卡信息为例 (CifActsQryByLHW) :
1. 在 Action 中调用这句,就是用一个 map 来装载返回的报文内容
toHostMap.put(Constants. HOST_TRANSACTION_CODE , "pquery.CifActsQryByLHW" );
双引号中的是在 router 端调用的交易名称,前半部为命名空间(同时也是 报文的名称)
// 还要使用这个来发送
Map resultMap=(Map) this .issueHostTrs(context,map);
使用这种方式发送报文,由于指定了 router 端的交易名称,所以不需要在 resolver.xml 中配置
也可以使用 super.execute(context) 来发送报文,这样上面两步都不用了,不过一样要引入父类 parent="BaseQueryAction" ,使用这种方式发送报文,报文交易名必须在 common 包下的 resolver.xml 中配置(否则不知道该调用 router 端的那个交易)
2. 配置从网银到路由的报文 fsegquery.CifActsQryByLHW.xml ,放在当前交易包下 ,
config.outbound.csxml.packets
< segment >
< xmlTag >< String name = "CardNo" ></ String ></ xmlTag >
< xmlTag >< String name = "PageNo" defaultValue = "0001" ></ String >
</ xmlTag >
</ segment >
格式就是 fseg+ 报文名称 .xml
3. 在 resolver.xml 中配置报文名称所对应的交易 id ,在 router 端还要调用这个交易去发报文到前置。该 xml 在网银端 common 包下(如果在第 1 步中指定了交易名称,此步可以跳过,它其实是根据网银交易名匹配 router 到主机的交易名)
< param name = "CifActsQryByLHW" > pquery.CifActsQryByLHW </ param >
前面的 name 就是网银交易名称,这个一般 router 中的和要发报文的交易都是相同的,后面的是报文名称,同时也是在 router 中的交易名称, pquery 为命名空间
4. 在 router 包的 xml 内定义交易,就是上面的那个 id ,注意 namespace 和 transaction 要与匹配的一致
< transaction id = "CifActsQryByLHW" template = "publicQueryTemplate" >
< actions >
< ref name = "action" > CifActsQryByCardQueryAction </ ref >
</ actions >
</ transaction >
这里是在 router 中定义的,一般查询就是用 publicQueryTemplate ,有操作的用 publicTwoPhaseTrsTemplate
5. 配置从路由到前置(主机)的报文 fsegpquery.CifActsQryByLHW.xml ,放在 router 包,
config.pquery.outbound.gdrcu.packets
< segment >
< xmlTag tagName = "card_no" >< String name = "CardNo" ></ String >
</ xmlTag >
< xmlTag tagName = "page_no" >< String name = "PageNo" ></ String >
</ xmlTag >
</ segment >
格式就是 fseg+ 报文名称 .xml
6. 在 router 端定义报文对应的接口名称,就是你所发报文与接口的对应关系,因为主机使用的是自己的编码,而不是网银的编码
< param name = "pquery.CifActsQryByLHW" > 11130004 </ param >
7. 配置前置到路由 router 的返回报文 pquery.CifActsQryByLHW.xml ,放在
Rotuer 端
(经过第 6 步的转换,这里自动由 p11130004.xml 变为 pquery.CifActsQryByLHW.xml)
< mapAlias name = "parse" >
< elementAlias name = "Currency" alias = "curreny" />
< elementAlias name = "AcctState" alias = "acct_status" />
</mapAlias>
格式就是 P+ 报文名称 .xml
如果返回的 是 list ,如下:
< mapAlias name = "parse" >
< mapAlias name = "List" alias = "list" >
< elementAlias name = "AcNo" alias = "acct_no" />
</ mapAlias >
</ mapAlias >
8. 配置路由router到网银的返回报文fsegpquery.CifActsQryByLHW.xml,放在
Router 端 config.inbound.csxml.packets
< segment >
< xmlTag >
< idxField name = "List" >
< Group name = "Map" >
< xmlTag >< String name = "AcNo" ></ String ></ xmlTag >
< xmlTag >< String name = "AcFlag" ></ String ></ xmlTag >
</ Group >
</ idxField >
</ xmlTag >
</ segment >
格式就是 fseg+ 报文名称 .xml
如果返回的是 map ,不是 list ,那么如下写:
< segment >
< xmlTag >< String name = "AcctNo" ></ String ></ xmlTag >
< xmlTag >< String name = "AcName" ></ String ></ xmlTag >
</segment>
PE发送报文的更多相关文章
- PE框架学习之道:PE框架——发送报文流程
PE框架发送报文,适用于PE及VX技术 步骤: 1.在action中使用发送报文,要指定报文在router端的交易名称 2.如果使用supe.execute(context)来发送,不需要第一步 3. ...
- java URL实现调用其他系统发送报文并获取返回数据
模拟本系统通过Url方式发送报文到目标服务器,并获取返回数据:(实现类) import java.io.BufferedOutputStream; import java.io.BufferedRea ...
- xcap发包工具的简单使用2(发送报文)
上一篇文章介绍了如何构造报文,现在简单讲一下发送报文的步骤 1.获取接口列表 点击主界面工具栏中的“刷新列表”按钮(或对应菜单“interface->Reference interfaces”) ...
- Linux服务器上使用curl命令发送报文
报文格式如下: curl -l -H "Content-type: application/json" -X POST -d 'postdata' http://172.20.10 ...
- soap发送报文请求和dom4j解析XML并且获得指定名称的节点信息
package com.lzw.b2b.soap; import java.io.ByteArrayInputStream;import java.io.InputStream;import java ...
- 用HttpURLConnection来完成HTTP发送报文接收报文!
public String sendMsg(String url, byte[] PostData) { String content = null; URL urls = null; try { u ...
- webService 发送soap请求,并解析返回的soap报文
本例应用场景:要做一个webService测试功能,不局限于任何一种固定格式的webService,所以像axis,cxf等框架就不好用了.只有深入到webService的原理,通过发收soap报文, ...
- HTTPAnalyzer截获SoapUI发送的接口报文
一.截获过程 1. 开启HTTPAnalyzer报文截获工具. 2. 通过SoapUI工具发送报文. 3. HTTPAnalyzer报文截获工具自动截获. 二.SoapUI报文准备 准备工作是:打 ...
- java socket解析和发送二进制报文工具(附java和C++转化问题)
解析: 首先是读取字节: /** * 读取输入流中指定字节的长度 * <p/> * 输入流 * * @param length 指定长度 * @return 指定长度的字节数组 */ pu ...
随机推荐
- BZOJ4817 [Sdoi2017]树点涂色 【LCT + 线段树】
题目 Bob有一棵n个点的有根树,其中1号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同.定义一条路 径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜色.Bob可能会进行这 ...
- POJ3671 Dining Cows
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8126 Accepted: 3441 Description The c ...
- vue slot 插槽备忘
老是记不住插槽咋回事 记录下来备忘 父组件 <tab><template slot="boy" slot-scope="test">{{ ...
- for循环创建对象
有时候奇怪的发现往list添加数据的时候,一直被最后一个元素覆盖,首先 ,我们得明白原理: 在new 一个对象的时候,对象的ID是唯一确定的:将对象add入list中时,放入list中的其实是对象的引 ...
- 转 C++ 面向对象程序设计的基本特点
传送门 Miss it C++ 面向对象程序设计的基本特点 First: 抽象 面向对象方法中的抽象,是指对具体问题(对象)进行概括,抽出一类对象公共性质并加以描述的过程. 抽象的过程,也是对问题 ...
- js中加“var”和不加“var”的区别,看完觉得这么多年js白学了
Javascript声明变量的时候,虽然用var关键字声明和不用关键字声明,很多时候运行并没有问题,但是这两种方式还是有区别的.可以正常运行的代码并不代表是合适的代码. var num = 1: 是在 ...
- 天啦噜!原来Chrome自带的开发者工具还能这么用!
作者:余博伦链接:https://zhuanlan.zhihu.com/p/22665710来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. Chrome自带开发者工具. ...
- 【spring data jpa】使用spring data jpa 的删除操作,需要加注解@Modifying @Transactional 否则报错如下: No EntityManager with actual transaction available for current thread - cannot reliably process 'remove' call
使用spring data jpa 的删除操作,需要加注解@Modifying @Transactional 否则报错如下: No EntityManager with actual tran ...
- C# 将long类型写入二进制文件用bw.Write(num);将其读出用long num= br.ReadInt64();
理由: 因为long类型是 System.Int64 (长整型,占 8 字节,表示 64 位整数,范围大约 -(10 的 19) 次方 到 10 的 19 次方) 而long BinaryReader ...
- andrid对不能导入的类,知道类路径怎样使用该类
andrid对不能导入的类,知道类路径怎样使用该类?使用java的反射机制. 下边是一个样例. MTK平台对Android源生的Telephone接口进行了扩展,加入了一个TelephonyManag ...