##根据xml模板生成xml
package com.hanxu.utils.direct;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.hanxu.exception.BusinessException;
import org.apache.commons.lang.StringUtils;
import org.jdom.*;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;
import java.util.Objects;
import java.util.StringTokenizer;
/**
* xml模板解析
* @author hanxu
* @date 2021年03月26日 17:16
*/
public class XMLTempParseFactory {
private final static String DATA_KEY = "data";
private final static String IF_NODE_NAME = "x-if";
private final static String IF_NODE_ATTRIBUTE = "data";
private final static String SWITCH_NODE_NAME = "x-switch";
private final static String SWITCH_NODE_ATTRIBUTE = "data";
private final static String CASE_NODE_NAME = "x-case";
private final static String CASE_NODE_DATA = "data";
private final static String DEFAULT_NODE_NAME = "x-default";
private final static String LIST_NODE_NAME = "x-list";
private final static String LIST_NODE_ATTRIBUTE = "data";
private final static String DATA_NODE_NAME = "x-data";
private final static String DATA_NODE_ATTRIBUTE = "data";
private static JSONObject dataJson = new JSONObject();
// 单例
private static XMLTempParseFactory xmlTempParseFactory = null;
private XMLTempParseFactory(){
}
public static synchronized XMLTempParseFactory getXMLTempParseFactory(){
if (xmlTempParseFactory == null){
xmlTempParseFactory = new XMLTempParseFactory();
}
return xmlTempParseFactory;
}
/**
* 解析xml模板,生成xml文件字符串
* @param xmlTemp
* @param json
* @return
* @throws Exception
*/
public synchronized String parseXmlTemp(String xmlTemp, String json) throws Exception{
//1.创建SAXBuilder对象
SAXBuilder saxBuilder = new SAXBuilder();
String encoding = this.getEncoding(xmlTemp);
//3.将输入流加载到build中
xmlTemp = xmlTemp.trim().replaceAll("[\\n\u200B-\u200D\uFEFF]", "");// \\n:换行;\\u200B-\\u200D\\uFEFF: 0宽度空格
// xmlTemp = StringUtils.remove(xmlTemp, '\uFEFF'); // 去除零宽度空格(ZWSP)
// xmlTemp = StringUtils.remove(xmlTemp, '\u200B'); // 去除零宽度空格(ZWSP)
Document document = saxBuilder.build(new ByteArrayInputStream(xmlTemp.getBytes(encoding)));
//4.获取根节点
Element rootElement = document.getRootElement();
dataJson = JSONObject.parseObject(new String(json.getBytes(encoding), encoding));
this.parseNode(rootElement, dataJson, DATA_KEY);
// 设置xml格式化的属性
Format format = Format.getRawFormat();
format.setIndent(" "); // 文本缩进
format.setTextMode(Format.TextMode.TRIM_FULL_WHITE);
format.setEncoding(encoding);
// 创建xml输出流操作类
XMLOutputter xmlOutput = new XMLOutputter(format);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintWriter out = new PrintWriter(baos);
try {
xmlOutput.output(document, out);
return baos.toString();
}catch (Exception ex){
throw ex;
}finally {
baos.close();
}
}
/**
* 解析节点数据
* @param element :读取节点
* @param json :节点数据
*/
private void parseNode(Element element, JSONObject json, String firstKey){
String nodeName = element.getName();
if (StringUtils.isBlank(nodeName)){
return;
}
// 解析节点动态属性
this.parseElementAttribute(element, json, firstKey);
if (nodeName.startsWith(IF_NODE_NAME)){
// 拼接if标签
this.parseIf(element, json, firstKey);
}else if(nodeName.startsWith(SWITCH_NODE_NAME)){
// switch
this.parseSwtich(element, json, firstKey);
}else if(nodeName.startsWith(LIST_NODE_NAME)){
// 拼接list标签
this.parseList(element, json);
}else if(nodeName.startsWith(DATA_NODE_NAME)){
// 动态名称表单
this.parseData(element, json, firstKey);
}else {
List<Content> list = element.getContent();
if (list != null && list.size() > 0){
for (int i = 0; i < list.size(); i++){
Content content = list.get(i);
if (content instanceof Text){
String value = content.getValue();
if (StringUtils.isNotBlank(value) && value.trim().startsWith("${")){
Object text = this.getJsonValue(json, value, firstKey);
((Text) content).setText(this.objectToString(text));
}
}else if(content instanceof Element){
this.parseNode((Element)content, json, firstKey);
}
}
}
}
}
/**
* 解析节点的属性值
*/
private void parseElementAttribute(Element element, JSONObject json, String firstKey){
List<Attribute> attributeList = element.getAttributes();
if (attributeList != null && attributeList.size() > 0){
for (Attribute attribute : attributeList){
if (Objects.equals("data", attribute.getName())){
continue;
}
String value = attribute.getValue();
if (this.isReplaceString(value)){
Object obj = this.getJsonValue(json, value, firstKey);
attribute.setValue(String.valueOf(obj));
}
}
}
}
/**
* switch解析
*/
private void parseSwtich(Element element, JSONObject json, String firstKey) {
Attribute caseAttribute = element.getAttribute(SWITCH_NODE_ATTRIBUTE);
if (caseAttribute == null){
throw new BusinessException(SWITCH_NODE_NAME + "中【" + SWITCH_NODE_ATTRIBUTE + "】不能为空!");
}
String valueStr = caseAttribute.getValue();
Object valueObj = this.getJsonValue(json, valueStr, firstKey);
// case列表
List<Content> caseList = element.getContent();
if (caseList == null || caseList.size() == 0){
throw new BusinessException(SWITCH_NODE_NAME + "中case列表不能为空不能为空!");
}
// 当前switch得父级几点
Element parentElement = element.getParentElement();
parentElement.removeContent(element); // 删除当前switch标签
Element defaultElement = null;
for (Content content : caseList){
if (content instanceof Element){
Element caseItem = (Element) content.clone();
if (Objects.equals(caseItem.getName(), CASE_NODE_NAME)){
Attribute caseDataAttribute = caseItem.getAttribute(CASE_NODE_DATA);
if (caseDataAttribute == null){
throw new BusinessException(CASE_NODE_NAME + "中【" + CASE_NODE_DATA + "】不能为空!");
}
String dataStr = caseDataAttribute.getValue();
if (this.isReplaceString(dataStr)){// 如果case是表达是,将case解析
Object obj = this.getJsonValue(json, dataStr, firstKey);
dataStr = obj == null ? "" : obj.toString();
}
if (Objects.equals(dataStr, String.valueOf(valueObj))){// case判断通过,执行case
List<Content> caseContenList = caseItem.getContent();
if (caseContenList != null){
for (Content caseContentItem : caseContenList){
Content contentItem = (Content) caseContentItem.clone();
if(contentItem instanceof Element){
parentElement.addContent(contentItem);// 设置case节点的父级节点
this.parseNode((Element) contentItem, json, firstKey);
}else {
parentElement.addContent(contentItem);
}
}
}
return;
}
}else if (Objects.equals(caseItem.getName(), DEFAULT_NODE_NAME)){
defaultElement = caseItem;
}
}
}
if (defaultElement != null){
List<Content> defaultConentList = defaultElement.getContent();
if (defaultConentList != null){
for (Content defaultContent : defaultConentList){
Content defaultElementClone = (Content) defaultContent.clone();
if(defaultContent instanceof Element){
parentElement.addContent(defaultElementClone);// 设置default节点的父级节点
this.parseNode((Element) defaultElementClone, json, firstKey);
}else {
parentElement.addContent(defaultElementClone);
}
}
}
}
}
/**
* 拼接动态数据标签
*/
private void parseData(Element element, JSONObject json, String firstKey) {
Attribute testAttribute = element.getAttribute(DATA_NODE_ATTRIBUTE);
if (testAttribute == null){
throw new BusinessException(DATA_NODE_NAME + "中【" + DATA_NODE_ATTRIBUTE + "】不能为空!");
}
String attributeValue = testAttribute.getValue();
Object value = this.getJsonValue(json, attributeValue, firstKey);
element.setName(String.valueOf(value));
element.removeAttribute(DATA_NODE_ATTRIBUTE);
// 继续解析节点
this.parseNode(element, json, firstKey);
}
/**
* 解析if标签
*/
private void parseIf(Element element, JSONObject json, String firstKey){
Attribute testAttribute = element.getAttribute(IF_NODE_ATTRIBUTE);
if (testAttribute == null){
throw new BusinessException(IF_NODE_NAME + "中【" + IF_NODE_ATTRIBUTE + "】不能为空!");
}
String attributeValue = testAttribute.getValue();
Element parentElement = element.getParentElement();
parentElement.removeContent(element); // 删除当前if标签,下面会解析标签内容,并添加到当前if的父标签中
if (testBoolean(attributeValue, json, firstKey)){
List<Content> ifElement = element.getContent();
if (ifElement != null && ifElement.size() > 0){
if (ifElement.size() == 1){
Content content = ifElement.get(0);
if (content instanceof Element){
Element newElement = (Element) content.clone();
parentElement.addContent(0, newElement);
// 递归元素内容
this.parseNode(newElement, json, firstKey);
}else if (content instanceof Text){
if (parentElement.getContentSize() == 1){
String value = ((Text) content).getText();
if (this.isReplaceString(value)){
Object text = this.getJsonValue(json, value, firstKey);
parentElement.setText(this.objectToString(text));
}else {
parentElement.setContent((Content)content.clone());
}
}else {
throw new BusinessException("<x-if " + IF_NODE_ATTRIBUTE + "=\"" + attributeValue + "\">内需要增加标签内容。");
}
}
}else {
for (Content ele : ifElement){
if (ele instanceof Element){
Element newElement = (Element) ele.clone();
parentElement.addContent(0, newElement);
// 递归元素内容
this.parseNode(newElement, json, firstKey);
}else if(ele instanceof Text){
Content newElement = (Content) ele.clone();
parentElement.addContent(0, newElement);
}
}
}
}
}else {
// 删除当前元素
parentElement.removeContent(element);
}
}
/**
* 解析list标签
*/
private void parseList(Element element, JSONObject json){
Attribute listAttribute = element.getAttribute(LIST_NODE_ATTRIBUTE);
if (listAttribute == null){
throw new BusinessException(LIST_NODE_NAME + "中【" + LIST_NODE_ATTRIBUTE + "】不能为空!");
}
String listStr = listAttribute.getValue(); // item as data.list
String[] listAry = listStr.split("as");
if (listAry == null || listAry.length != 2){
throw new BusinessException("循环属性设置不正确:" + listStr);
}
String itemKeyName = listAry[0].trim(); // 循环子元素名称
if (Objects.equals(itemKeyName, DATA_KEY)){
throw new BusinessException("循环子元素不能命名为:" + DATA_KEY + ", [" + listStr + "]");
}
// list的父级
Element parent = element.getParentElement();
// 循环体内容
List<Content> itemList = element.getContent();
// 删除List标签,下面会解析标签内容,并拼接到parent中
parent.removeContent(element);
// 循环数据
JSONArray listArray = (JSONArray) getJsonValue(json, listAry[1].trim(), DATA_KEY);
if (listArray != null && listArray.size() > 0){
// 循环数据
Iterator iterator = listArray.iterator();
while (iterator.hasNext()){
Object itemData = iterator.next();
if (!(itemData instanceof JSONObject)){
throw new BusinessException("list子元素需要为json对象");
}
JSONObject itemJson = (JSONObject) itemData;
// list中的item
for (int i = 0; i < itemList.size(); i++){
Content newContent = (Content)itemList.get(i).clone();
if (newContent instanceof Text){ // 节点为文本
String text = ((Text) newContent).getText();
if (this.isReplaceString(text)){// 如果为需要替换的字符串
Object itemValue = this.getJsonValue(itemJson, text, itemKeyName);
parent.addContent(0, new Element(this.objectToString(itemValue)));
}else {
parent.addContent(0, newContent);
}
}else if (newContent instanceof Element){ // 节点为对象
parent.addContent(newContent);
this.parseNode((Element) newContent, itemJson, itemKeyName);
}
}
}
}
}
/**
* 获得if判断条件,返回的boolean值
*/
private boolean testBoolean(String test, JSONObject json, String firstKey){
try {
String[] testArray = test.split(" |!|!=|==|>=|<=|<|>|&|\\|");
for (String item : testArray){
if (StringUtils.isNotBlank(item) && item.trim().contains(".")){
String replaceItem = item.trim();
Object replaceValue = getJsonValue(json, replaceItem, firstKey);
if (replaceValue instanceof Integer || replaceValue instanceof Double){
test = test.replace(replaceItem, String.valueOf(replaceValue));
}else if(replaceValue == null){
test = test.replace(replaceItem, "\"\"");
}else {
test = test.replace(replaceItem, String.valueOf("\"" + replaceValue + "\""));
}
}
}
Boolean boo = Boolean.valueOf(ParseUtils.engine.eval(test).toString());
// System.out.println("(" + test + ") ==== " + boo);
return boo;
}catch (Exception ex){
ex.printStackTrace();
throw new BusinessException("解析if表达式失败:" + test + "|" + ex.toString());
}
}
/**
* 从json对象中取值,不存在返回空字符串
* @param json :取值对象(在list循环过程中取list数据中的子数据)
* @param keyStr :data.data
* @return
*/
private Object getJsonValue(JSONObject json, String keyStr, String firstKey){
if (StringUtils.isBlank(keyStr)){
return "";
}
keyStr = keyStr.trim().replace("${", "").replace("}", "");
String[] keyArray = keyStr.split("\\.");
String key = keyArray[0];
if (!Objects.equals(DATA_KEY, key) && StringUtils.isNotBlank(firstKey) && !Objects.equals(firstKey, key)){
throw new BusinessException("参数表达式不正确:" + keyStr);
}
// 如果是data.从全局取参数,如果是其他,从当前json中取
JSONObject jsonValue = Objects.equals(key, DATA_KEY) ? dataJson : json;
return ParseUtils.getJsonValue(jsonValue, keyStr);
}
/**
* 判断是否为需要替换的字符串
*/
private boolean isReplaceString(String text){
if (StringUtils.isNotBlank(text) && text.trim().startsWith("${") && text.trim().endsWith("}")){
return true;
}
return false;
}
/**
* 转string
*/
private String objectToString(Object obj) {
if (obj == null){
return null;
}
try {
// return new String(obj.toString().getBytes("GBK"), "UTF-8");
}catch (Exception ex){
ex.printStackTrace();
}
return obj.toString();
}
/**
* 获得xml编码格式
*/
private String getEncoding(String xml){
if (xml.startsWith("<?xml")) {
int end = xml.indexOf("?>");
String sub = xml.substring(0, end);
StringTokenizer tokens = new StringTokenizer(sub, " =\"'");
while (tokens.hasMoreTokens()) {
String token = tokens.nextToken();
if ("encoding".equals(token)) {
if (!(tokens.hasMoreTokens()))
break;
return tokens.nextToken();
}
}
}
return "UTF-8";
}
public static void main(String[] args) {
String xmlStr = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>" +
" <web>" +
" <data1>" +
" <x-if data=\"data.code == 'XY202103240002'\">" +
" <have>${data.code}</have>" +
" </x-if>" +
" <have>notif</have>" +
" </data1>" +
" <data2>" +
"<x-list data=\"item as data.childBankList\">" +
" <list>${item.accountNumber}</list>" +
" <x-if data=\"1 == 1\">" +
" <if>${item.type}</if>" +
" </x-if>" +
" </x-list>" +
" </data2>" +
" <data3>" +
" <x-data data=\"data.code\">${data.parentCompany}</x-data>" +
" </data3>" +
"</web>";
String json = "{\"code\":\"XY202103240002\",\"execEndType\":\"\",\"execCount\":\"3\",\"execTime\":\"14:00\",\"excelUrl\":\"\",\"nowRecordVersion\":\"1\",\"parentAccount\":\"77120122000016235\",\"type\":\"1\",\"triggerMoney\":\"\",\"execEndTime\":\"\",\"parentBranch\":\"宁波银行股份有限公司北京海淀科技支行\",\"validRecordVersion\":\"1\",\"execDay\":\"\",\"parentBankId\":\"319\",\"recordVersion\":\"1\",\"childBankList\":[{\"code\":\"\",\"lastModifyBy\":\"3991\",\"isDelete\":0,\"accountType\":\"一般户\",\"bankBranchName\":\"宁波银行股份有限公司北京海淀科技支行\",\"companyName\":\"天津车之家数据信息技术有限公司\",\"accountNumber\":\"77120122000016388\",\"type\":\"CHILD\",\"version\":1,\"recordId\":\"103\",\"bankId\":\"320\",\"createBy\":\"3991\",\"recordVersion\":\"1\",\"createTime\":\"2021-03-24 13:56:12\",\"lastModifyTime\":\"2021-03-24 13:56:12\",\"currency\":\"CNY\",\"id\":\"267\"},{\"code\":\"\",\"lastModifyBy\":\"3991\",\"isDelete\":0,\"accountType\":\"一般户\",\"bankBranchName\":\"宁波银行股份有限公司北京海淀科技支行\",\"companyName\":\"浙江车智广告有限公司\",\"accountNumber\":\"77120122000016500\",\"type\":\"CHILD\",\"version\":1,\"recordId\":\"103\",\"bankId\":\"321\",\"createBy\":\"3991\",\"recordVersion\":\"1\",\"createTime\":\"2021-03-24 13:56:12\",\"lastModifyTime\":\"2021-03-24 13:56:12\",\"currency\":\"CNY\",\"id\":\"268\"}],\"processId\":\"270830\",\"percentage\":\"\",\"id\":\"103\",\"execType\":\"2\",\"approveState\":\"4\",\"parentAccountType\":\"一般户\",\"cron\":\"0 0 14 * * ?\",\"parentCurrency\":\"CNY\",\"nowRecordId\":\"103\",\"createByName\":\"刘德凯\",\"lastModifyBy\":\"3991\",\"parentBank\":{\"code\":\"\",\"lastModifyBy\":\"3991\",\"isDelete\":0,\"accountType\":\"一般户\",\"bankBranchName\":\"宁波银行股份有限公司北京海淀科技支行\",\"companyName\":\"车智互通(北京)广告有限公司\",\"accountNumber\":\"77120122000016235\",\"type\":\"PARENT\",\"version\":2,\"recordId\":\"103\",\"bankId\":\"319\",\"createBy\":\"3991\",\"recordVersion\":\"1\",\"createTime\":\"2021-03-24 13:56:12\",\"lastModifyTime\":\"2021-03-24 13:56:12\",\"currency\":\"CNY\",\"id\":\"266\"},\"jobCenterId\":\"348\",\"isDelete\":0,\"reserveMoney\":\"\",\"validRecordId\":\"103\",\"priority\":\"\",\"hasApprovePermission\":false,\"lastModifyByName\":\"刘德凯\",\"version\":\"\",\"execCycle\":\"day\",\"parentCompany\":\"车智互通(北京)广告有限公司\",\"createBy\":\"3991\",\"money\":\"110000\",\"createTime\":\"2021-03-24 13:56:12\",\"lastModifyTime\":\"2021-03-24 14:38:13\",\"flowTypeCode\":\"CECASHPOOLV2\",\"name\":\"测试上划-不足不转\",\"formNo\":\"XY202103240002_1_0\",\"hasExecCount\":\"2\",\"intUnit\":\"\",\"status\":\"1\"}";
XMLTempParseFactory readXml = new XMLTempParseFactory();
String xml = null;
try {
xml = readXml.parseXmlTemp(xmlStr, json);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(xml);
}
}
package com.hanxu.utils.direct;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.hanxu.common.DateHelper;
import com.hanxu.dto.direct.DirectResponseData;
import com.hanxu.exception.BusinessException;
import com.hanxu.model.direct.TabBankDirectInterfaceTemp;
import org.apache.commons.lang.StringUtils;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import java.lang.reflect.Method;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author hanxu
* @date 2021年04月09日 10:09
*/
public class ParseUtils {
// 表单式解析引擎
public static ScriptEngine engine = null;
static {
ScriptEngineManager manager = new ScriptEngineManager();
engine = manager.getEngineByName("js");
}
/**
* 解析判断表达式
*/
public static boolean parseEstimateExpression(JSONObject json, String expression) throws Exception{
expression = expression.replace("${", "").replace("}", "");
String[] expressionArray = expression.split(" |!|!=|==|>=|<=|<|>|&|\\|");
for (String item : expressionArray){
if (StringUtils.isNotBlank(item) && item.trim().contains(".")){
String replaceItem = item.trim();
Object replaceValue = getJsonValue(json, replaceItem);
if (replaceValue instanceof Integer || replaceValue instanceof Double){
expression = expression.replace(replaceItem, String.valueOf(replaceValue));
}else if(replaceValue == null){
expression = expression.replace(replaceItem, "\"\"");
}else {
expression = expression.replace(replaceItem, String.valueOf("\"" + replaceValue + "\""));
}
}
}
return Boolean.valueOf(engine.eval(expression).toString());
}
/**
* 获得json内容
*/
public static Object getJsonValue(JSONObject jsonValue, String keyStr){
if (StringUtils.isBlank(keyStr)){
return "";
}
// 是否为时间格式需要转换
String parameterDateType = null;
String resultDateType = null;
if (keyStr.indexOf(",") > 0){// 包含格式信息
String[] parameterArray = keyStr.split(",");
keyStr = parameterArray[0].trim();
// 格式参数
Map<String, String> map = ParseUtils.getParameterMap(parameterArray);
parameterDateType = map.get("parameterDateType");
resultDateType = map.get("resultDateType");
}
String[] keyArray = keyStr.split("\\.");
if (keyArray == null || keyArray.length <= 0){
throw new BusinessException("参数格式不正确:" + keyStr);
}
if (parameterDateType != null){
return ParseUtils.getJsonDateValue(jsonValue, keyArray, parameterDateType, resultDateType);
}else {
return ParseUtils.getJsonValue(jsonValue, keyArray);
}
}
/**
* 获得json内容
*/
public static Object getJsonValue(JSONObject json, String[] keyArray){
Object jsonValue = json;
for (int i = 1; i < keyArray.length; i++){
String itemKey = keyArray[i];
if (StringUtils.isBlank(itemKey) || jsonValue == null){
continue;
}
if (jsonValue instanceof JSONObject){
jsonValue = ((JSONObject) jsonValue).get(itemKey);
}else if (jsonValue instanceof JSONArray){
if (Objects.equals(itemKey, "length") || Objects.equals(itemKey, "size")){
jsonValue = ((JSONArray) jsonValue).size();
}else {
jsonValue = null;
}
}else {
jsonValue = null;
}
}
return jsonValue;
}
/**
* 获得时间值
*/
public static String getJsonDateValue(JSONObject json, String[] keyArray, String parameterDateType, String resultDateType){
Object jsonValue = getJsonValue(json, keyArray);
if (jsonValue == null){
return null;
}
Date date = null;
if (jsonValue instanceof Date){
date = (Date) jsonValue;
}else {
if (StringUtils.isNotBlank(parameterDateType)){
String dateStr = jsonValue.toString();
parameterDateType = parameterDateType.replace("'", "").replace("\"", "");
try{
SimpleDateFormat sdf = new SimpleDateFormat(parameterDateType);
date = sdf.parse(dateStr);
}catch (Exception ex){
ex.printStackTrace();
}
}
}
if (date == null){
return null;
}
if (StringUtils.isNotBlank(resultDateType)){
resultDateType = resultDateType.replace("'", "").replace("\"", "");
return DateHelper.formatDate(date, resultDateType);
}else {
return DateHelper.formatDate(date, DateHelper.COMMON_DATE_FORMAT);
}
}
/**
* 解析参数
* @return
*/
public static Map<String, String> getParameterMap(String[] parameterArray){
Map<String, String> map = new HashMap<>();
if (parameterArray != null && parameterArray.length > 0){
for (String parameter : parameterArray){
String[] array = parameter.split("=");
if (array.length == 2){
map.put(StringUtils.trim(array[0]), StringUtils.trim(array[1]));
}
}
}
return map;
}
/**
* 根据模板列表解析数据
*/
public static DirectResponseData parseJsonByTempList(List<TabBankDirectInterfaceTemp> receiveTempList, JSONObject jsonData, DirectResponseData directResponseData) throws Exception {
receiveTempList = receiveTempList.stream().sorted((item1, item2) -> item2.getPriority() - item1.getPriority()).collect(Collectors.toList());
for (int i = 0; i < receiveTempList.size(); i++){
TabBankDirectInterfaceTemp receiveTemp = receiveTempList.get(i);
// 判断是否使用当前模板解析
if (ParseUtils.parseEstimateExpression(jsonData, receiveTemp.getCheckExpress())){
// 将结果解析为固定格式
Object parseJsonData = JSONTempParseFactory.getJSONTempParseFactory().parseJsonTemp(receiveTemp.getTemplate(), jsonData);
if (parseJsonData instanceof JSONObject){
directResponseData.setParseJsonData((JSONObject) parseJsonData);
directResponseData.setParseTemplateId(receiveTemp.getId());
directResponseData.setTabBankDirectInterfaceTemp(receiveTemp);
}
break;
}
}
return directResponseData;
}
/**
* 获得接口适配器
*/
public static DirectInterFaceHandler getHandler(String handlerClassPath){
if (StringUtils.isNotBlank(handlerClassPath)){
try {
Class cla = Class.forName(handlerClassPath);
Method getHandlerMethod = cla.getMethod("getHandler");
Object obj = getHandlerMethod.invoke(cla);
if (obj instanceof DirectInterFaceHandler){
return (DirectInterFaceHandler) obj;
}
}catch (Exception ex){
ex.printStackTrace();
}
}
return null;
}
}