数据传输格式报文格式: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)相关推荐

  1. java 短信验证码(创蓝接口)调用

    接口文档 : https://zz.253.com/v5.html#/api_word /*** 手机号码限制* @author w* */ @Retention(RetentionPolicy.RU ...

  2. 通达信软件开发自定义接口的功能

    通达信软件开发自定义接口的功能,自定义数据是通达信提供给大家的可扩展数据接口. 这种数据类型带来了日期序列数据和字符串数据,极大地扩展了通达信本身的数据结构. 尤其是字符串功能,相当给力,可以在通达信 ...

  3. python中接口测试垃圾数据如何清理_Python接口测试题(持续更新中)

    1.json和字典的区别? Json是轻量级的数据交互格式,以key-value的键值对形式来保存数据,结构清晰,可以说是目前互联网项目开发中最常用的一种数据交互格式. 字典,同样是以key-valu ...

  4. Vue项目中的接口调用

    在企业开发过程中,往往有着明确的前后端的分工,前端负责接收.使用接口,后端负责编写.处理接口. 对于前端如何使用接口,今天在Vue中进行讲解. 一个项目往往由这几个部分组成. 其中在src文件夹中,, ...

  5. xml 名称中不能包含= 字符_可扩展标记语言:XML

    XML技术(DOM.SAX解析XML) 1 掌握XML基本语法,命名规则 2 掌握什么是Schema,什么是DTD 3 掌握DOM解析XML 4 掌握SAX解析XML 5 掌握JDOM解析XML 6 ...

  6. java 异常补偿解决_第三方接口调用异常补偿机制实现实例记录

    背景: 我们的组件(简称A),在业务链中属于数据支撑节点.其中与组件B存在接口同步数据的直接关系(API接口直接调用进行数据交互) 问题: 我们的上游有另一个组件C(带有界面),调用A(us)进行数据 ...

  7. 顺丰java_顺丰API调用java版

    顺丰API调用java版 发布时间:2018-09-04 18:06, 浏览次数:3351 , 标签: 顺丰,api,web service 一.获取顾客编码及校验码 https://qiao.sf- ...

  8. 信联征信乔胜:数据只有具有流动性才能产生价值

    深圳2018年9月5日电 /美通社/ -- 近日,亿欧专访深圳市信联征信有限公司总经理乔胜,探讨了在多维度征信业已成为征信行业的发展趋势下,信联征信作为早期拿到企业征信备案的机构之一,如何理解企业信用 ...

  9. 凤凰卫视对话信联征信,解读中国社会诚信体系建设

    深圳2018年8月2日电 /美通社/ -- 当前,中国社会信用体系建设已经进入快车道,守信联合激励和失信联合惩戒制度初步形成.那么,在企业征信领域,企业信用信息在商业活动中具有怎样的作用?作为第三方征 ...

  10. 信联征信参与新国都首届国际代理商大会

    -全球汇聚,共创美好生活 深圳2018年7月27日电 /美通社/ -- 2018年6月25日,以"共创美好生活"为主题的新国都首届国际代理商大会在深圳隆重召开.此次会议共有来自全球 ...

最新文章

  1. 万亿级日志与行为数据存储查询技术剖析——Hbase系预聚合方案、Dremel系parquet列存储、预聚合系、Lucene系...
  2. 千万级到10亿+的疯涨,搜狗商业平台服务化体系实践之路
  3. webpack 引入模块import 后面加入{}和不加大括号有什么区别
  4. 建议收藏!一文走遍机器学习的6个主流模型
  5. 缓存nginx服务器的静态文件
  6. Learn Python—表达式、数据类型、流程控制
  7. Keil5 software packs和legacy device database分类讲解
  8. xcode快捷键(二)
  9. 前端传入JSON数组转换对象存入数据库
  10. 电脑控制手机 易语言实现颜色识别功能
  11. 联通微服务怎么还款_重磅!中国联通推出微信签约代扣新功能
  12. 学习Python,你都遇到了哪些坑?
  13. java调用万网域名接口
  14. 【论文笔记】Expanding holographic embeddings for knowledge completion
  15. 自己写一个微型数据库_“最国际化的微型机构:”两名伦敦训练营的毕业生如何建造了一个远程…...
  16. 安装anaconda时需要卸载python么_怎么卸载python 安装 anaconda
  17. 第二期预告|中国工程院院刊:信息与电子工程领域青年学术前沿论坛
  18. 【附源码】计算机毕业设计SSM网络求职招聘系统
  19. zabbix添加邮件报警机制
  20. 测试用例设计方法_错误推测法(游戏向)

热门文章

  1. 在电脑上如何直接下载秒拍的视频?
  2. CentOS 6 安装免费虚拟主机控制面板ZPanel
  3. 【西语】【1】Te amor 我爱你
  4. 基于DTU的工业控制组网方案
  5. mysql查询手机号隐藏中间四位
  6. macOS wifi 密码 查看
  7. Linux#使用ll命令
  8. 架构漫谈(一):什么是架构? -王概凯 - 转
  9. XP盗版问题解决方案
  10. 交换机与路由器的配置