JAVA解析xml报文

目录

问题需求

响应报文格式

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,测试结果

 

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
webservice响应报文的格式通常是XML格式。XML是一种可扩展标记语言,用于描述数据的结构和内容。在webservice中,响应报文的格式遵循SOAP协议,SOAP是一种基于XML的通信协议,用于在网络上交换结构化信息。SOAP协议定义了报文的格式和通信规则,以确保不同平台和系统之间的互操作性。响应报文的格式包含在SOAP Envelope元素中,其中包含SOAP Header和SOAP Body两个部分。SOAP Header用于传递额外的信息和参数,而SOAP Body包含实际的响应数据。在SOAP Body中,响应数据被封装在特定的命名空间下的元素中。这些元素的结构和内容由webservice的定义确定,以便客户端可以解析和处理响应数据。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [WebService soap报文请求返回xml格式以及自定义soap模板](https://blog.csdn.net/zz18435842675/article/details/96869484)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [WebService soap报文请求与响应报文解析JAVA)](https://blog.csdn.net/qq_27256783/article/details/103660512)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值