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; 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; import java.util.HashMap; import java.util.Map; public class XMLUtils { //构建返回值 public static String count2XML(Map 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 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 parseXMLToMap(String xmlString) { // new BaseBean().writeLog("xmlString=="+xmlString); // xmlString = new String(xmlString.getBytes(StandardCb harsets.UTF_8)).trim(); // new BaseBean().writeLog("xmlString=="+xmlString); xmlString = xmlString.trim(); Map resultMap = new HashMap<>(); try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(xmlString.getBytes(StandardCharsets.UTF_8)); Document document = builder.parse(byteArrayInputStream); Element rootElement = document.getDocumentElement(); extractValues(rootElement, resultMap); } catch (Exception e) { new BaseBean().writeLog(e.getMessage()); e.printStackTrace(); } return resultMap; } private static void extractValues(Element element, Map 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); } } } //财务系统构建返回体 public static String CW2XML(Map 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); // 创建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(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 ""; } }