You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

263 lines
11 KiB
Java

2 years ago
package com.engine.util;
import com.alibaba.druid.util.StringUtils;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import weaver.general.BaseBean;
2 years ago
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.nio.charset.StandardCharsets;
2 years ago
import java.util.HashMap;
import java.util.Map;
public class XMLUtils {
//构建返回值
public static String count2XML(Map<String,String> headerParam,Integer todocount , Integer toreadcount ) {
try {
// 创建文档对象
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.newDocument();
// 创建根节点
Element rootElement = doc.createElement("Service");
doc.appendChild(rootElement);
addServiceHeader(doc,rootElement,headerParam);
// 创建Service_Body节点
Element serviceBodyElement = doc.createElement("Service_Body");
rootElement.appendChild(serviceBodyElement);
// 创建response节点
Element responseElement = doc.createElement("response");
serviceBodyElement.appendChild(responseElement);
// 创建todo节点
Element todoElement = doc.createElement("todo");
responseElement.appendChild(todoElement);
// 创建count节点并设置值
if(todocount != null) {
Element countElement = doc.createElement("count");
countElement.setTextContent(todocount + "");
todoElement.appendChild(countElement);
}
if(toreadcount != null){
Element countOneElement = doc.createElement("countOne");
countOneElement.setTextContent(toreadcount+"");
todoElement.appendChild(countOneElement);
}
// 将文档对象转换为XML字符串
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no"); // 设置不包含XML声明
DOMSource source = new DOMSource(doc);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
StreamResult result = new StreamResult(outputStream);
transformer.transform(source, result);
// 将XML结果转换为字符串
String xmlString = outputStream.toString("UTF-8");
//System.out.println(xmlString);
return xmlString;
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
private static void addServiceHeader(Document doc, Element rootElement, Map<String, String> headerParam) {
// 创建Service_Body节点
Element serviceHeaderElement = doc.createElement("Service_Header");
rootElement.appendChild(serviceHeaderElement);
//service_sn ESB服务流水号
if (!StringUtils.isEmpty(headerParam.get("service_sn"))){
Element serviceSnElement = doc.createElement("service_sn");
serviceSnElement.setTextContent(headerParam.get("service_sn"));
serviceHeaderElement.appendChild(serviceSnElement);
}
if (!StringUtils.isEmpty(headerParam.get("service_id"))){
Element serviceIdElement = doc.createElement("service_id");
serviceIdElement.setTextContent(headerParam.get("service_id"));
serviceHeaderElement.appendChild(serviceIdElement);
}
if (!StringUtils.isEmpty(headerParam.get("system_id"))){
Element systemIdElement = doc.createElement("system_id");
systemIdElement.setTextContent(headerParam.get("system_id"));
serviceHeaderElement.appendChild(systemIdElement);
}
if (!StringUtils.isEmpty(headerParam.get("requester_id"))){
Element requesterIdElement = doc.createElement("requester_id");
requesterIdElement.setTextContent(headerParam.get("requester_id"));
serviceHeaderElement.appendChild(requesterIdElement);
}
if (!StringUtils.isEmpty(headerParam.get("branch_id"))){
Element branchIdElement = doc.createElement("branch_id");
branchIdElement.setTextContent(headerParam.get("branch_id"));
serviceHeaderElement.appendChild(branchIdElement);
}
if (!StringUtils.isEmpty(headerParam.get("channel_id"))){
Element channelIdElement = doc.createElement("channel_id");
channelIdElement.setTextContent(headerParam.get("channel_id"));
serviceHeaderElement.appendChild(channelIdElement);
}
if (!StringUtils.isEmpty(headerParam.get("service_time"))){
Element serviceTimeElement = doc.createElement("requester_id");
serviceTimeElement.setTextContent(headerParam.get("service_time"));
serviceHeaderElement.appendChild(serviceTimeElement);
}
if (!StringUtils.isEmpty(headerParam.get("BnkSrlNo"))){
Element BnkSrlNoElement = doc.createElement("BnkSrlNo");
BnkSrlNoElement.setTextContent(headerParam.get("BnkSrlNo"));
serviceHeaderElement.appendChild(BnkSrlNoElement);
}
// if (!StringUtils.isEmpty(headerParam.get("FileFlg"))){
Element FileFlgElement = doc.createElement("FileFlg");
FileFlgElement.setTextContent("0");
serviceHeaderElement.appendChild(FileFlgElement);
// }
if (!StringUtils.isEmpty(headerParam.get("SvcCd"))){
Element SvcCdElement = doc.createElement("SvcCd");
SvcCdElement.setTextContent(headerParam.get("SvcCd"));
serviceHeaderElement.appendChild(SvcCdElement);
}
if (!StringUtils.isEmpty(headerParam.get("SvcScn"))){
Element SvcScnElement = doc.createElement("SvcScn");
SvcScnElement.setTextContent(headerParam.get("SvcScn"));
serviceHeaderElement.appendChild(SvcScnElement);
}
// 响应码
Element service_responseElement = doc.createElement("service_response");
serviceHeaderElement.appendChild(service_responseElement);
if (!StringUtils.isEmpty(headerParam.get("status"))){
Element statusElement = doc.createElement("status");
statusElement.setTextContent(headerParam.get("status"));
service_responseElement.appendChild(statusElement);
}
if (!StringUtils.isEmpty(headerParam.get("code"))){
Element codeElement = doc.createElement("code");
codeElement.setTextContent(headerParam.get("code"));
service_responseElement.appendChild(codeElement);
}
if (!StringUtils.isEmpty(headerParam.get("desc"))){
Element descElement = doc.createElement("desc");
descElement.setTextContent(headerParam.get("desc"));
service_responseElement.appendChild(descElement);
}
}
public static Map<String, String> parseXMLToMap(String xmlString) {
2 years ago
// new BaseBean().writeLog("xmlString=="+xmlString);
// xmlString = new String(xmlString.getBytes(StandardCb harsets.UTF_8)).trim();
// new BaseBean().writeLog("xmlString=="+xmlString);
xmlString = xmlString.trim();
2 years ago
Map<String, String> resultMap = new HashMap<>();
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
2 years ago
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(xmlString.getBytes(StandardCharsets.UTF_8));
Document document = builder.parse(byteArrayInputStream);
2 years ago
Element rootElement = document.getDocumentElement();
extractValues(rootElement, resultMap);
} catch (Exception e) {
new BaseBean().writeLog(e.getMessage());
2 years ago
e.printStackTrace();
}
return resultMap;
}
private static void extractValues(Element element, Map<String, String> resultMap) {
NodeList childNodes = element.getChildNodes();
for (int i = 0; i < childNodes.getLength(); i++) {
if (childNodes.item(i) instanceof Element) {
Element childElement = (Element) childNodes.item(i);
String nodeName = childElement.getNodeName();
String nodeValue = childElement.getTextContent();
resultMap.put(nodeName, nodeValue);
extractValues(childElement, resultMap);
}
}
}
2 years ago
//财务系统构建返回体
public static String CW2XML(Map<String,String> headerParam,String retCd , String errorMessage ) {
try {
// 创建文档对象
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.newDocument();
// 创建根节点
Element rootElement = doc.createElement("Service");
doc.appendChild(rootElement);
addServiceHeader(doc,rootElement,headerParam);
2 years ago
2 years ago
// 创建Service_Body节点
Element serviceBodyElement = doc.createElement("Service_Body");
rootElement.appendChild(serviceBodyElement);
2 years ago
2 years ago
// 创建response节点
Element responseElement = doc.createElement("response");
serviceBodyElement.appendChild(responseElement);
// // 创建todo节点
// Element todoElement = doc.createElement("todo");
// responseElement.appendChild(todoElement);
// 创建count节点并设置值
if(retCd != null) {
Element countElement = doc.createElement("retCd");
countElement.setTextContent(retCd + "");
responseElement.appendChild(countElement);
}
if(errorMessage != null){
Element countOneElement = doc.createElement("errorMessage");
countOneElement.setTextContent(errorMessage+"");
responseElement.appendChild(countOneElement);
}
// 将文档对象转换为XML字符串
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no"); // 设置不包含XML声明
DOMSource source = new DOMSource(doc);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
StreamResult result = new StreamResult(outputStream);
transformer.transform(source, result);
// 将XML结果转换为字符串
String xmlString = outputStream.toString("UTF-8");
//System.out.println(xmlString);
String length = String.format("%08d", xmlString.length());
return length+xmlString;
} catch (Exception e) {
e.printStackTrace();
}
return "";
2 years ago
}
}