目录
问题需求
响应报文格式
1,开发导入的依赖
2,开发样例
3,测试结果
问题需求
在工作中此项目请求指定项目之后,项目会返回一个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,测试结果