网关标准报文的拆组包配置

报文:
请求
{
"timeStamp": "时间戳",
"requestId": "请求标识",
"txBrNo": "机构编码",
"chnlCode": "渠道应用编码",
"serviceCode": "服务代码",
"svcSubCode": "服务细分编码",
"access_token": "token",
"sign": "签名",
"encryptAlgo": "加密算法",
"encodeKey": "加密算法密钥",
"version": "版本号",
"charset": "字符编码",
"requestData": {
"sysHead": {
"sourceSysTranDate": "发起系统交易日期",
"sourceSysTimeStamp": "发起系统交易时间",
"sourceSysCode": "发起方系统编码",
"glsTraceNo": "全局流水号",
"txMode": "交易模式",
"ttyId": "终端标识"
},
"body": {
"cstNo": "核心客户号"
}
}
}
响应:
{
"timeStamp": "时间戳",
"requestId": "请求标识",
"txBrNo": "机构编码",
"chnlCode": "渠道应用编码",
"serviceCode": "服务代码",
"svcSubCode": "服务细分编码",
"access_token": "token",
"sign": "签名",
"encryptAlgo": "加密算法",
"encodeKey": "加密算法密钥",
"version": "版本号",
"charset": "字符编码",
"responseData": {
"sysHead": {
"retCode": "交易返回码",
"retMsg": "交易返回信息",
"tranDate": "请求日期",
"tranTimeStamp": "请求时间"
},
"body": {
"cstNo": "核心客户号"
}
}
}

要求json转xml,xml转json的

接上一个回答的补充,增加了jsonArray的处理


import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.xml.sax.SAXException;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

/**
 * 
 * 〈XML和json相关转化〉<br/>
 * 〈包含主要入口类和相关测试〉<br/>
 * 〈此处使用了约定模式,json没有一个根节点的情况下,默认使用default_root,针对json的数组处理使用默认default_item〉
 *
 * @author ghostpbx
 * @see [相关类/方法](可选)
 * @since [产品/模块版本] (可选)
 */
public class XmlJsonTrans {

    private static final String ENCODING_UTF8 = "UTF-8";

    private static final String DEFAULT_ROOT = "default_root";

    private static final String ITEM_NAME = "default_item";

    public static void main(String[] args) throws IOException, SAXException, DocumentException {
        String jsonStr = readFileContent("D:/devEnv/13-file/jsondemo.txt");
        JSONObject jobj = JSON.parseObject(jsonStr);
        System.out.println(json2Xml(jobj));

        String xmlStr = readFileContent("D:/devEnv/13-file/xmldemo3.txt");
        System.out.println(xml2Json(xmlStr));
    }

    
    /**
     * 
     * 功能描述: <br/>
     * 〈JSON对象转xml字符串〉
     *
     * @param json
     * @return
     * @throws SAXException
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public static String json2Xml(JSONObject jsonObj) throws SAXException {
        return json2Doc(jsonObj).asXML();
    }

    /**
     * 
     * 功能描述: <br/>
     * 〈JSON对象转Document对象〉
     *
     * @param jsonObj
     * @return
     * @throws SAXException
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    private static Document json2Doc(JSONObject jsonObj) throws SAXException {
        Document doc = DocumentHelper.createDocument();
        doc.setXMLEncoding(ENCODING_UTF8);
        if (jsonObj.keySet().size() > 1) {
            Element root = json2Element(jsonObj, DEFAULT_ROOT);
            doc.add(root);
        } else {
            for (String rootKey : jsonObj.keySet()) {
                Object o = jsonObj.get(rootKey);
                if (o instanceof JSONObject) {
                    Element root = json2Element(jsonObj.getJSONObject(rootKey), rootKey);
                    doc.add(root);
                } else if (o instanceof JSONArray) {

                }
                break;
            }
        }

        return doc;
    }

    /**
     * 
     * 功能描述: <br/>
     * 〈obj对象转化为Element〉
     *
     * @param obj
     * @param nodeName
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    private static Element json2Element(Object obj, String nodeName) {
        if (obj instanceof JSONObject) {
            return jsonObj2Element((JSONObject) obj, nodeName);
        } else if (obj instanceof JSONArray) {
            return jsonArray2Element((JSONArray) obj, nodeName);
        }
        Element nodeEle = DocumentHelper.createElement(nodeName);

        return nodeEle;
    }

    /**
     * 
     * 功能描述: <br/>
     * 〈JSON对象转Element对象〉
     *
     * @param jsonObj
     * @param nodeName
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    private static Element jsonObj2Element(JSONObject jsonObj, String nodeName) {
        Element nodeEle = DocumentHelper.createElement(nodeName);
        for (String key : jsonObj.keySet()) {
            Object child = jsonObj.get(key);
            if (child instanceof JSONObject) {
                nodeEle.add(jsonObj2Element(jsonObj.getJSONObject(key), key));
            } else if (child instanceof JSONArray) {
                nodeEle.add(jsonArray2Element((JSONArray) child, key));
            } else {
                Element element = DocumentHelper.createElement(key);
                element.setText(jsonObj.getString(key));
                nodeEle.add(element);
            }
        }
        return nodeEle;
    }

    /**
     * 
     * 功能描述: <br/>
     * 〈json数组转化Element对象〉
     *
     * @param jsonArray
     * @param nodeName
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    private static Element jsonArray2Element(JSONArray jsonArray, String nodeName) {
        Element nodeEle = DocumentHelper.createElement(nodeName);
        for (int i = 0; i < jsonArray.size(); i++) {
            Object obj = jsonArray.get(i);
            if (obj instanceof JSONObject) {
                JSONObject jsonObj = (JSONObject) obj;
                nodeEle.add(json2Element(jsonObj, ITEM_NAME));
            } else if (obj instanceof JSONArray) {
                JSONArray childJsonArray = (JSONArray) obj;
                nodeEle.add(jsonArray2Element(childJsonArray, ITEM_NAME));
            }
        }
        return nodeEle;
    }

    /**
     * 
     * 功能描述: <br/>
     * 〈XML字符串转JSON对象〉
     *
     * @param xml
     * @return
     * @throws DocumentException
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public static String xml2Json(String xml) throws DocumentException {

        SAXReader reader = new SAXReader();
        Document document = reader.read(new StringReader(xml));
        Element root = document.getRootElement();

        if (!DEFAULT_ROOT.equals(root.getName())) {
            JSONObject json = new JSONObject();
            json.put(root.getName(), element2Json(root));
            return json.toString();
        } else {
            return element2Json(root).toString();
        }

    }

    /**
     * 
     * 功能描述: <br/>
     * 〈element转化为Object〉<br/>
     * 〈object为JSONObject和JSONArray对象〉
     * 
     *
     * @param element
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    private static Object element2Json(Element element) {

        JSONObject json = new JSONObject();
        JSONArray jsonArray = new JSONArray();
        boolean isArray = false;
        for (Object child : element.elements()) {
            Element e = (Element) child;
            if (ITEM_NAME.equals(e.getName())) {

                jsonArray.add(element2Json(e));
                isArray = true;
            } else {
                if (e.elements().isEmpty()) {
                    json.put(e.getName(), e.getText());
                } else {
                    json.put(e.getName(), element2Json(e));
                }
            }
        }

        return isArray ? jsonArray : json;
    }

    /**
     * 
     * 功能描述: <br/>
     * 〈读取文件,为了能够读取数据方便使用测试〉
     *
     * @param fileName
     * @return
     * @throws IOException
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    private static String readFileContent(String fileName) throws IOException {
        File file = new File(fileName);
        BufferedReader reader = null;
        StringBuffer sbf = new StringBuffer();
        try {
            reader = new BufferedReader(new FileReader(file));
            String tempStr;
            while ((tempStr = reader.readLine()) != null) {
                sbf.append(tempStr);
            }
            reader.close();
            return sbf.toString();
        } catch (IOException e) {
            throw e;
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e1) {
                    throw e1;
                }
            }
        }
    }

}

需要引入的jar

com.alibaba
fastjson
1.2.9


dom4j
dom4j
1.6.1

注意:fastJSON的安全问题,可以进行替换

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.xml.sax.SAXException;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
/**
 * 
 * 〈XML和json相关转化〉<br> 
 * 〈包含主要入口类和相关测试〉
 *
 * @author 14091863
 * @see [相关类/方法](可选)
 * @since [产品/模块版本] (可选)
 */
public class XmlJsonTrans {

    private static final String ENCODING_UTF8 = "UTF-8";
    
    private static final String DEFAULT_ROOT = "root";

    public static void main(String[] args) throws IOException, SAXException, DocumentException {
        String jsonStr = readFileContent("D:/devEnv/13-file/jsondemo.txt");
        JSONObject jobj = JSON.parseObject(jsonStr);
        System.out.println(json2Xml(jobj));
        
        String xmlStr = readFileContent("D:/devEnv/13-file/xmldemo.txt");
        System.out.println(xml2Json(xmlStr));
    }

    
    /**
     * 
     * 功能描述: <br>
     * 〈JSON对象转xml字符串〉
     *
     * @param json
     * @return
     * @throws SAXException
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public static String json2Xml(JSONObject jsonObj) throws SAXException {
        //String xmlHeader = "<?xml version=\"1.0\" encoding=\""+ENCODING_UTF8+"\"?>";
        //return xmlHeader+json2Doc(jsonObj).asXML();
        return json2Doc(jsonObj).asXML();
    }

    /**
     * 
     * 功能描述: <br>
     * 〈JSON对象转Document对象〉
     *
     * @param jsonObj
     * @return
     * @throws SAXException
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public static Document json2Doc(JSONObject jsonObj) throws SAXException {
        Document doc = DocumentHelper.createDocument();
        doc.setXMLEncoding(ENCODING_UTF8);
        if(jsonObj.keySet().size()>1){
            Element root = json2Element(jsonObj, DEFAULT_ROOT);
            doc.add(root);
        }else{
            for (String rootKey : jsonObj.keySet()) {
                Element root = json2Element(jsonObj.getJSONObject(rootKey), rootKey);
                doc.add(root);
                break;
            }
        }

        
        return doc;
    }

    /**
     * 
     * 功能描述: <br>
     * 〈JSON对象转Element对象〉
     *
     * @param jsonObj
     * @param nodeName
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public static Element json2Element(JSONObject jsonObj, String nodeName) {
        Element nodeEle = DocumentHelper.createElement(nodeName);
        for (String key : jsonObj.keySet()) {
            Object child = jsonObj.get(key);
            if (child instanceof JSONObject) {
                nodeEle.add(json2Element(jsonObj.getJSONObject(key), key));
            } else {
                Element element = DocumentHelper.createElement(key);
                element.setText(jsonObj.getString(key));
                nodeEle.add(element);
            }
        }

        return nodeEle;
    }

   /**
    * 
    * 功能描述: <br>
    * 〈XML字符串转JSON对象〉
    *
    * @param xml
    * @return
    * @throws DocumentException
    * @see [相关类/方法](可选)
    * @since [产品/模块版本](可选)
    */
    public static JSONObject xml2Json(String xml) throws DocumentException {
        JSONObject json = new JSONObject();
        SAXReader reader = new SAXReader();
        Document document = reader.read(new StringReader(xml));
        Element root = document.getRootElement();
        if(!DEFAULT_ROOT.equals(root.getName())){
            json.put(root.getName(), element2Json(root));
        }else{
            json = element2Json(root);
        }
        return json;
    }

    /**
     * 
     * 功能描述: <br>
     * 〈Element对象转JSON对象〉
     *
     * @param element
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public static JSONObject element2Json(Element element) {
        JSONObject json = new JSONObject();
        for (Object child : element.elements()) {
            Element e = (Element) child;
            if (e.elements().isEmpty()) {
                json.put(e.getName(), e.getText());
            } else {
                json.put(e.getName(), element2Json(e));
            }
        }

        return json;
    }
    /**
     * 
     * 功能描述: <br>
     * 〈读取文件,为了能够读取数据方便使用测试〉
     *
     * @param fileName
     * @return
     * @throws IOException 
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public static String readFileContent(String fileName) throws IOException {
        File file = new File(fileName);
        BufferedReader reader = null;
        StringBuffer sbf = new StringBuffer();
        try {
            reader = new BufferedReader(new FileReader(file));
            String tempStr;
            while ((tempStr = reader.readLine()) != null) {
                sbf.append(tempStr);
            }
            reader.close();
            return sbf.toString();
        } catch (IOException e) {
            throw e;
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e1) {
                    throw e1;
                }
            }
        }
    }

}

依赖的包:

json-lib-2.4-jdk15.jar

ezmorph-1.0.6.jar

xom-1.2.1.jar

commons-lang-2.1.jar

commons-io-1.3.2.jar

jaxen-1.1.jar

package com.cash.util;

import java.io.IOException;

import java.io.InputStream;

import org.apache.commons.io.IOUtils;

import net.sf.json.JSON;

import net.sf.json.xml.XMLSerializer;

public class Test {
public static void ConvertXMLtoJSON() {
InputStream is = ConvertXMLtoJSON.class.getResourceAsStream("sample.xml");

String xml;

try {
xml = IOUtils.toString(is);

System.out.println(xml);

XMLSerializer xmlSerializer = new XMLSerializer();

JSON json = xmlSerializer.read(xml);

System.out.println(json.toString(1));

} catch (IOException e) {
e.printstackTrace();

}

}

public static void main(String[] args) {
ConvertXMLtoJSON();

}

}

/**

* 将xml字符串转换为JSON对象

* @param xmlFile xml字符串

* @return JSON对象

*/

public JSON getJSONFromXml(String xmlString) {
XMLSerializer xmlSerializer = new XMLSerializer();

JSON json = xmlSerializer.read(xmlString);

return json;

}

/**

* 将xmlDocument转换为JSON对象

* @param xmlDocument XML Document

* @return JSON对象

*/

public JSON getJSONFromXml(Document xmlDocument) {
String xmlString = xmlDocument.toString();

return getJSONFromXml(xmlString);

}

/**

* 将xml字符串转换为JSON字符串

* @param xmlString

* @return JSON字符串

*/

public String getJSONStringFromXml(String xmlString ) {
return getJSONFromXml(xmlString).toString();

}

/**

* 将xmlDocument转换为JSON字符串

* @param xmlDocument XML Document

* @return JSON字符串

*/

public String getXMLtoJSONString(Document xmlDocument) {
return getJSONStringFromXml(xmlDocument.toString());

}

/**

* 读取XML文件准换为JSON字符串

* @param xmlFile XML文件

* @return JSON字符串

*/

public String getXMLFiletoJSONString(String xmlFile) {
InputStream is = JsonUtil.class.getResourceAsStream(xmlFile);

String xml;

JSON json = null;

try {
xml = IOUtils.toString(is);

XMLSerializer xmlSerializer = new XMLSerializer();

json = xmlSerializer.read(xml);

} catch (IOException e) {
e.printstackTrace();

}

return json.toString();

}

/**

* 将Java对象转换为JSON格式的字符串

*

* @param javaObj

* POJO,例如日志的model

* @return JSON格式的String字符串

*/

public static String getJsonStringFromJavaPOJO(Object javaObj) {
return JSONObject.fromObject(javaObj).toString(1);

}

/**

* 将Map准换为JSON字符串

* @param map

* @return JSON字符串

*/

public static String getJsonStringFromMap(Map, ?> map) {
JSONObject object = JSONObject.fromObject(map);

return object.toString();

}
public static JSONObject xmlToJson(String xml) throws DocumentException {
    JSONObject jsonObject = new JSONObject();
    Document document = DocumentHelper.parseText(xml);
    //获取根节点元素对象
    Element root = document.getRootElement();
    iterateNodes(root, jsonObject);
    return jsonObject;
}

private static void iterateNodes(Element node, JSONObject json) {
//获取当前元素名称
String nodeName = node.getName();
//判断已遍历的JSON中是否已经有了该元素的名称
if(json.containsKey(nodeName)){
//该元素在同级下有多个
Object Object = json.get(nodeName);
JSONArray array = null;
if(Object instanceof JSONArray){
array = (JSONArray) Object;
}else {
array = new JSONArray();
array.add(Object);
}
//获取该元素下所有子元素
List listElement = node.elements();
if(listElement.isEmpty()){
//该元素无子元素,获取元素的值
String nodeValue = node.getTextTrim();
array.add(nodeValue);
json.put(nodeName, array);
return ;
}
//有子元素
JSONObject newJson = new JSONObject();
//遍历所有子元素
for(Element e:listElement){
//递归
iterateNodes(e,newJson);
}
array.add(newJson);
json.put(nodeName, array);
return ;
}
//该元素同级下第一次遍历
//获取该元素下所有子元素
List listElement = node.elements();
if(listElement.isEmpty()){
//该元素无子元素,获取元素的值
String nodeValue = node.getTextTrim();
json.put(nodeName, nodeValue);
return ;
}
//有子节点,新建一个JSONObject来存储该节点下子节点的值
JSONObject object = new JSONObject();
for(Element e:listElement){
//递归
iterateNodes(e,object);
}
json.put(nodeName, object);
return ;
}

org.json.JSONObject bodyJson = XML.toJSONObject(xml);