请求接收xml及响应报文
1、解析xmlpublic void parseXml(HttpServletRequest request, HttpServletResponse response) {//解析对方发来的xml数据String line = null;String xmlData ="";StringBuffer sb = new StringBuffer();...
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();
}
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)