目录
问题需求
在工作中此项目请求指定项目之后,项目会返回一个xml报文格式的响应,此时我需要判断返回的报文是否是成功的响应报文,如果是成功的响应报文就会触发提醒服务功能,如果响应报文是失败的,就不触发提醒服务功能。
响应报文格式
//成功响应报文
<CAPRoot>
<SessionHeader>
<ActionCode>1</ActionCode>
<TransactionID>12105202105131526014007</TransactionID>
<RspTime>20220804093113</RspTime>
<DigitalSign/>
<Response>
<RspType>0</RspType>
<RspCode>0000</RspCode>
<RspDesc>成功</RspDesc>
</Response>
</SessionHeader>
</CAPRoot>
//失败响应报文
<CAPRoot>
<SessionHeader>
<ActionCode>1</ActionCode>
<TransactionID>3132504202103260661650793</TransactionID>
<RspTime>20221010095149</RspTime>
<DigitalSign/>
<Response>
<RspType>6</RspType>
<RspCode>6116</RspCode>
<RspDesc>重置失败</RspDesc>
</Response>
</SessionHeader>
</CAPRoot>
1,开发导入的依赖
<!-- xml -->
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<!-- xml end -->
2,开发样例
package test;
import com.ai.uag.cap.bean.RequestChange;
import com.alibaba.fastjson.JSON;
import com.linkage.ua.ct.util.HttpUtil;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.springframework.beans.factory.annotation.Value;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class ChangeRemin {
@Value("${aaa.notice.flag}")
public static String path;
public static void main(String[] args) {
String xmlString=
"<CAPRoot>\n" +
" <SessionHeader>\n" +
" <ActionCode>1</ActionCode>\n" +
" <TransactionID>12105202105131526014007</TransactionID>\n" +
" <RspTime>20220804093113</RspTime>\n" +
" <DigitalSign/>\n" +
" <Response>\n" +
" <RspType>0</RspType>\n" +
" <RspCode>0000</RspCode>\n" +
" <RspDesc>成功</RspDesc>\n" +
" </Response>\n" +
" </SessionHeader>\n" +
"</CAPRoot>";
readStringXmlUag(xmlString);
}
/*
* 解析报文的字段,通过工具类来解析报文每一个字段的值
* 首先,在解析字符串的时候,会根据<xxxx></xxxx>为开始分析,第一次层作为根节点
*
* */
public static void readStringXmlUag(String xml){
//创建文本对选哪个
Document doc = null;
try {
//将字符串报文解析成报文
doc = DocumentHelper.parseText(xml);
// 获取根节点
Element rootElt = doc.getRootElement();
//获取到根节点的名称
System.out.println("根节点:" + rootElt.getName());
//获取到第一级所有子节点
Iterator iter = rootElt.elementIterator("SessionHeader");
//遍历第一级所有节点
while (iter.hasNext()){
//获取到第二级节点元所有元素
Element sessionEle = (Element) iter.next();
System.out.println("-第一级节点名称: "+ sessionEle.getName());
//获取到第二级节点指定的子节点
String ActionCode = sessionEle.elementTextTrim("ActionCode");
System.out.println("-遍历得到第一级节点下的值="+ActionCode);
String TransactionID = sessionEle.elementTextTrim("TransactionID");
System.out.println("-遍历得到第一级节点下的值="+TransactionID);
String RspTime = sessionEle.elementTextTrim("RspTime");
System.out.println("-遍历得到第一级节点下的值="+RspTime);
//获取到第三级所有子节点
Iterator iterResponse = sessionEle.elementIterator("Response");
while (iterResponse.hasNext()){
//获取到所有第三级子节点所有元素
Element responseEle = (Element) iterResponse.next();
System.out.println("--第二级节点名称: "+ responseEle.getName());
//获取到第三级节点指定的子节点
String RspType = responseEle.elementTextTrim("RspType");
System.out.println("--遍历得到第二级节点下的值="+RspType);
String RspCode = responseEle.elementTextTrim("RspCode");
System.out.println("--遍历得到第二级节点下的值="+RspCode);
String RspDesc = responseEle.elementTextTrim("RspDesc");
System.out.println("--遍历得到第二级节点下的值="+RspDesc);
}
}
}catch (Exception e) {
e.printStackTrace();
}
}
}
3,测试结果