请求接收xml及响应报文

1、解析xml

public void parseXml(HttpServletRequest request, HttpServletResponse response) {
    //解析对方发来的xml数据
    String line = null;
    String xmlData ="";
    StringBuffer sb = new StringBuffer();
    try {
        BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream()));
        while ((line = br.readLine()) != null) {
            sb.append(line);
        }
        byte[] xmlDataByte = sb.toString().getBytes(StandardCharsets.UTF_8);
        xmlData = new String(xmlDataByte, "UTF-8");
        log.info("接口接收xml数据[{}]", xmlData);
        Map<String, String> map = parseXmlToMap(xmlData);
        log.info("xml数据转成Map结果{}", map);
        if (map.isEmpty()|| map == null){
            log.info("xml数据为空请,及时检查");
            return;
        }
        //hRet == 0 || status == 1800 成功
        response.setContentType("text/xml");
        if (map.get("hRet").equals("0") || map.get("status").equals("1800")){
            //保存mr数据
            String cpparam = map.get("cpparam");
            if (StringUtils.isNotBlank(cpparam)) {
                String[] arr = cpparam.split("|");
                String msg = arr[0];
                String mobile = arr[1];
                saveMr(msg, mobile);
                saveCommandMr(mobile, msg);
            }
            //成功返回结果报文
            String successXml = "<?xml version='1.0' encoding='UTF-8'?><response><hRet>0</hRet><message>successful</message></response>";
            //http://mgsyn.qi1game.com:9100/migusdk/mr
            responseContent(response,successXml);
        }else if(map.get("hRet").equals("1") || !map.get("status").equals("1800")){
            //失败返回结果报文
            String failureXml = "<?xml version='1.0' encoding='UTF-8'?><response><hRet>1</hRet><message>failure</message></response>";
            responseContent(response,failureXml);
        }
    } catch (Exception e) {
        log.warn("解析xml数据异常:{}", e);
    }finally {
        //同步报文数据到--->北分
        postXml(xmlData);
    }
}
private Map<String, String> parseXmlToMap(String xml) throws Exception {
    Map<String, String> map = Maps.newHashMap();
    Document doc = null;
    // 将字符串转为XML
    /*SAXReader reader = new SAXReader();
    doc = reader.read(xml);*/
    doc = DocumentHelper.parseText(xml);
    // 获取根节点
    Element rootElt = doc.getRootElement();
    // 获取request根节点下的子节点
    Iterator it = rootElt.elementIterator();
    while (it.hasNext()) {
        Element recordEle = (Element) it.next();
        map.put(recordEle.getName(), recordEle.getTextTrim());
    }
    return map;
}

2、解析多节点xml

List<HashMap<String, String>> personList = new ArrayList<HashMap<String, String>>();
try {
    Document document = DocumentHelper.parseText(xmlStr);
 
    Element rootElement = document.getRootElement();// 获取根节点
    for (Iterator<?> iterator = rootElement.elementIterator(); iterator.hasNext();) {
        Element element = (Element) iterator.next();
 
        Map<String, String> personMap = new HashMap<String, String>();
 
        Attribute genderAttr = element.attribute("gender");//获取元素的gender属性对象
        personMap.put("gender", StringUtils.trim(genderAttr.getValue()));// 获取属性对象的值并插入map中,键名为gender
 
        for (Iterator<?> iterator2 = element.elementIterator(); iterator2.hasNext();) {
            Element element2 = (Element) iterator2.next();
 
            personMap.put(element2.getName(), element2.getTextTrim());// 将子节点的名称和值分别插入map中
        }
        personList.add(personMap);//将map插入list中
    }
} catch (DocumentException e) {
    e.printStackTrace();
}

 

3、响应xml

/**
     * 响应xml
     * @param response
     * @param content
     */
    public static void responseContent(HttpServletResponse response,String content){
        try {
            //把xml字符串写入响应   
            byte[] xmlData = content.getBytes();   
 
            response.setContentLength(xmlData.length);   
 
            ServletOutputStream os = response.getOutputStream();
            os.write(xmlData);   
 
            os.flush();   
            os.close();  
        } catch (IOException e) {
            e.printStackTrace();
        }   
    }

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值