宇信易诚信贷产品部XML渠道接入V1.0文件修订历史记录版本修订日期修订者修改描述第一章前言在进行服务端配置时需要确认ECLIPSE开发工具已经安装了EMP的IDE工具,并且已经为该工程添加了“为该项目添加EMP支持”,并且能够打开EMPExplore视图,才能进行后续的EMP配置操作。其他要求:EMPIDE插件支持项目工程添加EMP支持第二章XML报文服务端配置1.1.业务逻辑1.1.1.新建文件夹1.如上图所示,进入EMPExplore,选择工程下的:业务逻辑》CMISBiz,点击右键,选择:新建》新增文件夹。2.如上图所示:按照分类情况输入新增的文件夹名称,此处示例文件夹名称为“demo”,点击“Finish”,完成文件夹添加。1.1.2.新增业务逻辑构建1.如上图所示:在建立的文件夹“demo”下建立相应的业务逻辑构建,选择:demo,点击右键,选择:新建》新增业务逻辑构建。2.如上图所示:根据实际情况在弹出的面板中输入业务逻辑构建ID,此处示例以“demo”为构建ID,点击“Finish”,完成新建业务逻辑构建。1.1.3.业务逻辑构建参数设置1.如上图所示,打开新增的业务逻辑构建“demo.biz”,在基本属性tab页勾选“是一个无Session交易Context连接到:”,并且选择“Root”。2.如上图所示,在逻辑处理流程页面,选择“添加”,在弹出的面板中录入业务逻辑ID、和业务逻辑名称,点击“Finish”完成。3.如上图所示,还需要定义“组件”,组件定义参照组件定义。请先定义组件后在继续向下操作。注意:此处最好重新打开demo.biz,保证数据拿到最新值。4.如上图所示,鼠标左键单击,选择组件定义下的“交易实例”,在右侧空白面板中左键点击一下,并且用上述的红色方框标注的箭头从开始→交易实例→结束。然后点击保存。1.1.4.组件定义说明:组件的定义其实可以理解为定义该交易的业务逻辑实现类,即处理交易的逻辑代码类。并且组件定义一定要求通过如下方式新建,不允许自己写java类。1.如上图所示,选择:项目公共定义》组件扩展》新建》新增EMPAction,建立自定义组件。2.如上图所示,依次填写“包名”、“组件ID(类名)”、“组件名称”,选择“所属分类”,点击“Finish”完成组件定义。1.2.渠道逻辑1.2.1.新建XML渠道接入定义1.如上图所示,在渠道逻辑上点击鼠标右键,选择“新建渠道接入定义”。2.如上图所示,在打开的面板选择“TCPIP渠道接入”,并且录入名称,此处示例使用“TCPIPServerDemo”,点击“Finish”完成新建渠道接入定义。1.2.2.配置XML渠道接入参数1.如上图所示,选择“TCPIP渠道接入”,在右侧的显示面板中选择“业务逻辑分组名称”的下拉框,选择“CMISBiz”。2.如上图所示,选择“会话管理”,在右侧的显示面板中根据实际需求配置超时设置。此处默认。3.如上图所示,选择“通讯设定”,在右侧的显示面板中将连接方式设置为“短连接”,双工模式设置为“true”,具体实际情况需要根据需求。4.如上图所示,选择“监听端口”,在右侧的显示面板中将端口设置为约定的端口号(需要注意端口在5000之内的一般作为系统保留端口,不建议使用),此处以9000为例。设置持久连接为“false”,最大连接限制(根据性能设置)设置为“50”,使用线程缓冲选择为“true”,缓冲线程数依据实际情况设置。5.如上图所示,选择“解包处理”,查看右侧的“实现类”,此处实现类可依据实际需求进行调整,此处如果发现右侧面板中无法直接修改则需要通过将“TCPIPServerDemo.acc”通过文本方式打开,找到如下所示节点:CommProcessorname=CommProcessorlabel=解包处理class=com.ecc.emp.tcpip.EMPCommProcessor/修改为:CommProcessorname=CommProcessorlabel=解包处理class=com.yucheng.cmis.pub.format.xml.OLSServerCommProcessor/修改后需要重新在EMPExplore中打开,修改后如下图所示:修改完成后保存。6.如上图所示,选择“接入逻辑”,在右侧的显示面板中选择“serviceIdField”,将serviceId的值改为我们所定义的交易码字段。此处暂用“tranCode”。另,保存后需要以文本方式打开“TCPIPServerDemo.acc”,将实现类按照如下修改:TCPIPRequestHandlerappendReqHead=truelabel=接入逻辑serviceIdField=serviceIdclass=com.ecc.emp.access.tcpip.EMPTCPIPRequestHandlerappendRepHead=true修改为:TCPIPRequestHandlerappendReqHead=truelabel=接入逻辑serviceIdField=serviceIdclass=com.yucheng.cmis.pub.format.xml.OLSTCPIPRequestHandlerappendRepHead=true修改后需要重新在EMPExplore中打开,修改后如下图所示:1.2.3.渠道逻辑与业务逻辑关联1.如上图所示,右键选择“TCPIP渠道接入”,选择:新建》TCPIP接入交易。2.如上图所示,选择新建的业务逻辑“demo.biz”,点击“Next”,进入下一步。3.如上图所示,选择之前所选的业务构件中的业务逻辑“TRAN001”,点击“Finish”,完成。4.如上图所示,选择接入的业务逻辑“demo”,在右侧的面板中,将交易该接入逻辑所属的交易码写入。保存。1.2.4.类映射定义1.如上图所示,依次将RequestHeadFormat、ResponseHeadFormat项的值修改为:com.yucheng.cmis.pub.format.xml.OLSXmlHeadFormat,将TCPIPService的值修改为:com.yucheng.cmis.pub.format.xml.OLSTCPIPRequestService。修改后的截图如下:修改完成后保存。2.如上图所示,点击“add”,按钮,分别添加“requestDataFormat”,“responseDataFormat”,两个映射配置,将Class的值设置为“com.yucheng.cmis.pub.format.xml.OLSXmlBodyFormat”。设置后截图如下所示:1.2.5.修改web.xml文件在新建XML渠道定义时,EMP平台会同步的在系统的web.xml文件中生成一段配置信息。如上图所示,将factoryName的值修改为“CMISBiz”,将init-param/init-param节点删除,将启动顺序修改为“3”。修改后的结果如下所示:servletservlet-nameTCPIPServerDemo/servlet-nameservlet-classcom.ecc.emp.access.tcpip.EMPTCPIPServiceServlet/servlet-classinit-paramparam-namefactoryName/param-nameparam-valueCMISBiz/param-value/init-paraminit-paramparam-nameservletContextFile/param-nameparam-valueWEB-INF/channels/TCPIPServerDemo.xml/param-value/init-paraminit-paramparam-namesessionIdField/param-nameparam-value//init-paramload-on-startup3/load-on-startup/servlet1.3.模板校验配置1.3.1.cmis.properties配置在工程的cmis.properties文件中添加模板文件路径,具体代码如下:#XML模版文件路径XmlFilePath=E:\\SRCB\\POC\\cmis\\WebContent\\xmltemplate\\在上述路径下,将下述xmlFormats.xml文件存放于该路径下。模板文件配置示例:xmlFormats.xml1.3.2.添加启动加载在CMISInitializer.java类的initialize方法中添加如下代码:UnionpayXmlLoader.loadToContext(rootCtx);2.XML报文客户端配置2.1.客户端端节点定义(services.xml)TCPIPServiceid=spdTcpIpServerimplClass=com.ecc.emp.tcpip.TCPIPServicekeepAlive=falsedual=trueConnectToHostimplClass=com.ecc.emp.tcpip.ConnectToHostport=10001hostAddr=10.112.6.65/CommProcessorname=CommProcessorimplClass=com.yucheng.cmis.pub.format.xml.OLSClientCommProcessor//TCPIPService其中,hostAddr为IP地址,prot为端口号2.2.contexts.xml文件配置refServicealias=spdTcpIpServertype=servicerefId=spdTcpIpServer/其中alias、refId的值与TCPIPService节点id一致2.3.客户端调用示例TCPIPServicetcpipService=(TCPIPService)context.getService(SERVICES_ID);byte[]resMsg=null;resMsg=tcpipService.sendAndWait(null,reqMsg.getBytes(ENCODING_ID),SESSION_TIME);其中SERVICES为上述2.1配置的节点ID,ENCODING_ID为编码“utf-8”,SESSION_TIME为客户端超时时间。