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 parameters) { StringBuilder sb = new StringBuilder(); sb.append(""); 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("\n"); } } sb.append(""); 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 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 toMap(Element element) { Map rest = new HashMap<>(); List els = element.elements(); for (Element el : els) { rest.put(el.getName().toLowerCase(), el.getTextTrim()); } return rest; } public static String toXml(Map params) { StringBuilder buf = new StringBuilder(); List keys = new ArrayList<>(params.keySet()); Collections.sort(keys); buf.append(""); for (String key : keys) { buf.append("<").append(key).append(">"); buf.append(""); buf.append("\n"); } buf.append(""); return buf.toString(); } }