package com.oying.modules.hwc.utils;
|
|
import com.oying.exception.BadRequestException;
|
import org.dom4j.Document;
|
import org.dom4j.Element;
|
import org.dom4j.io.SAXReader;
|
import org.xml.sax.InputSource;
|
|
import javax.servlet.ServletInputStream;
|
import javax.servlet.http.HttpServletRequest;
|
import java.io.BufferedReader;
|
import java.io.ByteArrayInputStream;
|
import java.io.InputStreamReader;
|
import java.util.*;
|
|
/**
|
* ClassName:Xml
|
* Function: XML的工具方法
|
* Date: 2014-8-10 下午10:48:21
|
*/
|
@SuppressWarnings({"rawtypes", "unchecked"})
|
public class XmlUtils {
|
|
/**
|
* <一句话功能简述>
|
* <功能详细描述>request转字符串
|
*
|
* @see [类、类#方法、类#成员]
|
*/
|
public static String parseRequest(HttpServletRequest request) {
|
StringBuilder body = new StringBuilder();
|
try {
|
ServletInputStream inputStream = request.getInputStream();
|
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
|
while (true) {
|
String info = br.readLine();
|
if (info == null) {
|
break;
|
}
|
if (body.length() == 0) {
|
body = new StringBuilder(info);
|
} else {
|
body.append(info);
|
}
|
}
|
} catch (Exception e) {
|
throw new BadRequestException("读取数据流异常:" + e.getMessage());
|
}
|
return body.toString();
|
}
|
|
public static String parseXML(SortedMap<String, String> parameters) {
|
StringBuilder sb = new StringBuilder();
|
sb.append("<xml>");
|
Set es = parameters.entrySet();
|
for (Object e : es) {
|
Map.Entry entry = (Map.Entry) e;
|
String k = (String) entry.getKey();
|
String v = (String) entry.getValue();
|
if (null != v && !v.isEmpty() && !"appkey".equals(k)) {
|
sb.append("<").append(k).append(">").append(parameters.get(k)).append("</").append(k).append(">\n");
|
}
|
}
|
sb.append("</xml>");
|
return sb.toString();
|
}
|
|
/**
|
* 从request中获得参数Map,并返回可读的Map
|
*/
|
public static SortedMap getParameterMap(HttpServletRequest request) {
|
// 参数Map
|
Map properties = request.getParameterMap();
|
// 返回值Map
|
SortedMap returnMap = new TreeMap();
|
Iterator entries = properties.entrySet().iterator();
|
Map.Entry entry;
|
String name;
|
String value = "";
|
while (entries.hasNext()) {
|
entry = (Map.Entry) entries.next();
|
name = (String) entry.getKey();
|
Object valueObj = entry.getValue();
|
if (null == valueObj) {
|
value = "";
|
} else if (valueObj instanceof String[]) {
|
String[] values = (String[]) valueObj;
|
for (String s : values) {
|
value = s + ",";
|
}
|
value = value.substring(0, value.length() - 1);
|
} else {
|
value = valueObj.toString();
|
}
|
returnMap.put(name, value.trim());
|
}
|
returnMap.remove("method");
|
return returnMap;
|
}
|
|
/**
|
* 转XML map
|
*/
|
public static Map<String, String> toMap(byte[] xmlBytes, String charset) throws Exception {
|
SAXReader reader = new SAXReader(false);
|
InputSource source = new InputSource(new ByteArrayInputStream(xmlBytes));
|
source.setEncoding(charset);
|
Document doc = reader.read(source);
|
return XmlUtils.toMap(doc.getRootElement());
|
}
|
|
/**
|
* 转MAP
|
*/
|
public static Map<String, String> toMap(Element element) {
|
Map<String, String> rest = new HashMap<>();
|
List<Element> els = element.elements();
|
for (Element el : els) {
|
rest.put(el.getName().toLowerCase(), el.getTextTrim());
|
}
|
return rest;
|
}
|
|
public static String toXml(Map<String, String> params) {
|
StringBuilder buf = new StringBuilder();
|
List<String> keys = new ArrayList<>(params.keySet());
|
Collections.sort(keys);
|
buf.append("<xml>");
|
for (String key : keys) {
|
buf.append("<").append(key).append(">");
|
buf.append("<![CDATA[").append(params.get(key)).append("]]>");
|
buf.append("</").append(key).append(">\n");
|
}
|
buf.append("</xml>");
|
return buf.toString();
|
}
|
}
|