中征征信java_征信接口调用,解析(xml)
数据传输格式报文格式:xmlpublic CisReportRoot queryCisReport(PyQueryBean pyQueryBean) throwsException {
CisReportRoot cisReportRoot=invokePy(pyQueryBean){
CisReportRoot cisReportRoot=queryCisReportFromPyServer(pyQueryBean); } }
pyQueryBean--CisReportRoot
注意:接口数据传输通过xml,无论发送请求,还是获取响应都需要经过经过xml格式转化。1,CisReportRoot cisReportRoot = getCisReportRoot(doc); pyQueryBean--Map--doc--xmL
//实体转化为Map
2,Map map = CommonUtils.beanToMap(pyQueryBean);
//Map转化为指定标签的xml字符串 Map-doc-xml
3,String queryInfo = XmlUtil.createQueryCondition(map);
//从鹏元获取Xml,转化为doc xml-doc-
4,Document doc =pyClient.connectToPyClient(queryInfo);
//解析doc中数据,赋值到实体
5,CisReportRoot cisReportRoot = getCisReportRoot(doc);
具体实现如下:2,public static MapbeanToMap(Object obj) {if (obj == null) {return null;
}
Map map = new HashMap<>();try{
BeanInfo beanInfo=Introspector.getBeanInfo(obj.getClass());
PropertyDescriptor[] propertyDescriptors=beanInfo.getPropertyDescriptors();for(PropertyDescriptor property : propertyDescriptors) {
String key=property.getName();//过滤class属性
if (!"class".equals(key)) {//得到property对应的getter方法
Method getter =property.getReadMethod();
Object value=getter.invoke(obj);
map.put(key, String.valueOf(value));
}
}
}catch(Exception e) {
System.out.println("transBean2Map@CommonUtils_Exception" +e);
}returnmap;
}3, 构建请求xmlpublic static String createQueryCondition(Map map) throwsException {
Document document=DocumentHelper.createDocument();
document.setXMLEncoding(ENCODING);
Element root= document.addElement("conditions");
Element conditionElement= root.addElement("condition");
conditionElement.addAttribute("queryType", map.get("queryType"));
Element itemName= conditionElement.addElement("item");
itemName.addElement("name").addText("name");
itemName.addElement("value").addText(map.get("name") == null ? "" : map.get("name"));
Element itemDocumentNo= conditionElement.addElement("item");
itemDocumentNo.addElement("name").addText("documentNo");
itemDocumentNo.addElement("value").addText(map.get("documentNo") == null ? "" : map.get("documentNo"));
Element itemPhone= conditionElement.addElement("item");
itemPhone.addElement("name").addText("phone");
itemPhone.addElement("value").addText(map.get("phone") == null ? "" : map.get("phone"));
Element itemQueryReasonID= conditionElement.addElement("item");
itemQueryReasonID.addElement("name").addText("queryReasonID");
itemQueryReasonID.addElement("value").addText(map.get("queryReasonID") == null ? "" : map.get("queryReasonID"));
Element itemSubreportIDs= conditionElement.addElement("item");
itemSubreportIDs.addElement("name").addText("subreportIDs");
itemSubreportIDs.addElement("value").addText(map.get("subreportIDs") == null ? "" : map.get("subreportIDs"));
Element itemRefID= conditionElement.addElement("item");
itemRefID.addElement("name").addText("refID");
itemRefID.addElement("value").addText(map.get("refID") == null ? "" : map.get("refID"));returndocument.asXML();
}4,获取鹏飞响应Xml/*** 连接到鹏飞服务端
*
*@paramqueryInfo 查询信息--Xml格式
*@return返回查询结果*/
public Document connectToPyClient(String queryInfo) throwsException {try{
Client client= new Client(newURL(configInfo.getPy_ssl_ip()));
Object[] results= client.invoke(QUERY_REPORT, new Object[]{configInfo.getPy_username(), configInfo.getPy_password(), queryInfo, "xml"});
Document dom4j;if (results[FIRST_NODE] instanceoforg.w3c.dom.Document) {//FIRST_NODE = 0
org.w3c.dom.Document doc =(org.w3c.dom.Document) results[FIRST_NODE];
org.w3c.dom.Element element=doc.getDocumentElement();//获取所有子节点
NodeList children =element.getChildNodes();//获取第一个子节点//xml to dom
dom4j =XmlUtil.getDoc(children.item(FIRST_NODE).getNodeValue());//获取根节点
Element root =dom4j.getRootElement();
Element statusElement=root.element(STATUS);
String ba64;if(statusElement.getData().equals(SUCCESS)) {/*客户端获取该returnValue值后需要依次做以下工作:
1、 把returnValue值用Base64解码,把字符串(string)转成字节流(byte[]);
2、 把字节流解压缩后,获取到相应的多个输出文件,其中html和pdf是压缩文件;
3、 解析reports.xml获取xml报告的详细内容;*/
//1、 把returnValue值用Base64解码,把字符串(string)转成字节流(byte[]);
ba64 =root.element(RETURN_VALUE).getData().toString();byte[] re =Base64Utils.decode(ba64);//2、 把字节流解压缩后,获取到相应的多个输出文件,其中html和pdf是压缩文件;
String xml =CompressStringUtil.decompress(re);
logger.info(xml);//3、 解析reports.xml获取xml报告的详细内容;
returnXmlUtil.getDoc(xml);
}else{
StringBuilder sb= newStringBuilder(PyCreditServiceErrorEnum.PY_SYS_ERROR.getMsg());
String xml=XmlUtil.getString(dom4j);
logger.error(xml);if (null != root.element("errorMessage")) {
sb.append(", ").append(root.element("errorMessage").getData().toString());
logger.error("py server has problem, errorMessage: " +sb.toString());
}throw newCreditException(PyCreditServiceErrorEnum.PY_SYS_ERROR.getCode(), sb.toString());
}
}return null;
}catch(SocketTimeoutException e) {
logger.error("level0_loadClient@PyClientService_Exception", e);throw newCreditException(PyCreditServiceErrorEnum.PY_SYS_TIMEOUT.getCode(), PyCreditServiceErrorEnum.PY_SYS_TIMEOUT.getMsg());
}catch(Exception e) {
logger.error("level0_connectToPyClient@ConnectToPyClient_Exception", e);throwe;
}
}5,解析xml报告中数据
CisReportRoot cisReportRoot = getCisReportRoot(doc);
总括:解析doc每一层节点,获取属性,当前子节点数据,以此类推分层解析。思路:属性,子节点List-map-通过反射给实体赋值
中征征信java_征信接口调用,解析(xml)相关推荐
- java 短信验证码(创蓝接口)调用
接口文档 : https://zz.253.com/v5.html#/api_word /*** 手机号码限制* @author w* */ @Retention(RetentionPolicy.RU ...
- 通达信软件开发自定义接口的功能
通达信软件开发自定义接口的功能,自定义数据是通达信提供给大家的可扩展数据接口. 这种数据类型带来了日期序列数据和字符串数据,极大地扩展了通达信本身的数据结构. 尤其是字符串功能,相当给力,可以在通达信 ...
- python中接口测试垃圾数据如何清理_Python接口测试题(持续更新中)
1.json和字典的区别? Json是轻量级的数据交互格式,以key-value的键值对形式来保存数据,结构清晰,可以说是目前互联网项目开发中最常用的一种数据交互格式. 字典,同样是以key-valu ...
- Vue项目中的接口调用
在企业开发过程中,往往有着明确的前后端的分工,前端负责接收.使用接口,后端负责编写.处理接口. 对于前端如何使用接口,今天在Vue中进行讲解. 一个项目往往由这几个部分组成. 其中在src文件夹中,, ...
- xml 名称中不能包含= 字符_可扩展标记语言:XML
XML技术(DOM.SAX解析XML) 1 掌握XML基本语法,命名规则 2 掌握什么是Schema,什么是DTD 3 掌握DOM解析XML 4 掌握SAX解析XML 5 掌握JDOM解析XML 6 ...
- java 异常补偿解决_第三方接口调用异常补偿机制实现实例记录
背景: 我们的组件(简称A),在业务链中属于数据支撑节点.其中与组件B存在接口同步数据的直接关系(API接口直接调用进行数据交互) 问题: 我们的上游有另一个组件C(带有界面),调用A(us)进行数据 ...
- 顺丰java_顺丰API调用java版
顺丰API调用java版 发布时间:2018-09-04 18:06, 浏览次数:3351 , 标签: 顺丰,api,web service 一.获取顾客编码及校验码 https://qiao.sf- ...
- 信联征信乔胜:数据只有具有流动性才能产生价值
深圳2018年9月5日电 /美通社/ -- 近日,亿欧专访深圳市信联征信有限公司总经理乔胜,探讨了在多维度征信业已成为征信行业的发展趋势下,信联征信作为早期拿到企业征信备案的机构之一,如何理解企业信用 ...
- 凤凰卫视对话信联征信,解读中国社会诚信体系建设
深圳2018年8月2日电 /美通社/ -- 当前,中国社会信用体系建设已经进入快车道,守信联合激励和失信联合惩戒制度初步形成.那么,在企业征信领域,企业信用信息在商业活动中具有怎样的作用?作为第三方征 ...
- 信联征信参与新国都首届国际代理商大会
-全球汇聚,共创美好生活 深圳2018年7月27日电 /美通社/ -- 2018年6月25日,以"共创美好生活"为主题的新国都首届国际代理商大会在深圳隆重召开.此次会议共有来自全球 ...
最新文章
- 万亿级日志与行为数据存储查询技术剖析——Hbase系预聚合方案、Dremel系parquet列存储、预聚合系、Lucene系...
- 千万级到10亿+的疯涨,搜狗商业平台服务化体系实践之路
- webpack 引入模块import 后面加入{}和不加大括号有什么区别
- 建议收藏!一文走遍机器学习的6个主流模型
- 缓存nginx服务器的静态文件
- Learn Python—表达式、数据类型、流程控制
- Keil5 software packs和legacy device database分类讲解
- xcode快捷键(二)
- 前端传入JSON数组转换对象存入数据库
- 电脑控制手机 易语言实现颜色识别功能
- 联通微服务怎么还款_重磅!中国联通推出微信签约代扣新功能
- 学习Python,你都遇到了哪些坑?
- java调用万网域名接口
- 【论文笔记】Expanding holographic embeddings for knowledge completion
- 自己写一个微型数据库_“最国际化的微型机构:”两名伦敦训练营的毕业生如何建造了一个远程…...
- 安装anaconda时需要卸载python么_怎么卸载python 安装 anaconda
- 第二期预告|中国工程院院刊:信息与电子工程领域青年学术前沿论坛
- 【附源码】计算机毕业设计SSM网络求职招聘系统
- zabbix添加邮件报警机制
- 测试用例设计方法_错误推测法(游戏向)