Soap报文解析

1.解析一段soap报文协议形如:
<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"><soap:Body><ns1:apiEntryResponse xmlns:ns1=\"http://i.api.ei.scnczxh.iih/\"><return xmlns=\"http://i.api.ei.scnczxh.iih/\"><result><resultmsg><code>0</code><message/></resultmsg><datas><data><mzcount>2</mzcount><name_org>南充市中心医院</name_org><bservationno>--</bservationno><mzno>1900077472</mzno><diseasecode>Z34.900</diseasecode><zytotalcost>--</zytotalcost><revisit>1</revisit><code_org>1001</code_org><majordescribe>--</majordescribe><diagnose>Z34.900</diagnose><outdoctorid>01520</outdoctorid><healthcheck>--</healthcheck><hzno>001174578800</hzno><illnow>--</illnow><regisway>--</regisway><illhistory>--</illhistory><age>27岁</age><outdeptid>0101010033</outdeptid><diseasename>正常妊娠监督</diseasename><registype>--</registype><mztime>2019-11-01 08:24:14</mztime><assitcheck>--</assitcheck><disposition>--</disposition></data><data><mzcount>6</mzcount><name_org>南充市中心医院</name_org><bservationno>--</bservationno><mzno>1900077479</mzno><diseasecode>K04.500</diseasecode><zytotalcost>--</zytotalcost><revisit>1</revisit><code_org>1001</code_org><majordescribe>--</majordescribe><diagnose>K04.500</diagnose><outdoctorid>01027</outdoctorid><healthcheck>--</healthcheck><hzno>000571414200</hzno><illnow>--</illnow><regisway>--</regisway><illhistory>--</illhistory><age>77岁</age><outdeptid>0101010018</outdeptid><diseasename>慢性根尖牙周炎</diseasename><registype>--</registype><mztime>2019-11-01 08:14:05</mztime><assitcheck>--</assitcheck><disposition>--</disposition></data></datas></result></return></ns1:apiEntryResponse></soap:Body></soap:Envelope>
2.代码实现如下:
package com.wuhj.springboot;

import cn.hutool.core.bean.BeanUtil;
import com.wuhj.springboot.domain.Data;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.springframework.util.StringUtils;

import java.util.*;


public class SoapXmlParse {
    
    public static void main(String[] args) throws DocumentException {
        String soap = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"><soap:Body><ns1:apiEntryResponse xmlns:ns1=\"http://i.api.ei.scnczxh.iih/\"><return xmlns=\"http://i.api.ei.scnczxh.iih/\"><result><resultmsg><code>0</code><message/></resultmsg><datas><data><mzcount>2</mzcount><name_org>南充市中心医院</name_org><bservationno>--</bservationno><mzno>1900077472</mzno><diseasecode>Z34.900</diseasecode><zytotalcost>--</zytotalcost><revisit>1</revisit><code_org>1001</code_org><majordescribe>--</majordescribe><diagnose>Z34.900</diagnose><outdoctorid>01520</outdoctorid><healthcheck>--</healthcheck><hzno>001174578800</hzno><illnow>--</illnow><regisway>--</regisway><illhistory>--</illhistory><age>27岁</age><outdeptid>0101010033</outdeptid><diseasename>正常妊娠监督</diseasename><registype>--</registype><mztime>2019-11-01 08:24:14</mztime><assitcheck>--</assitcheck><disposition>--</disposition></data><data><mzcount>6</mzcount><name_org>南充市中心医院</name_org><bservationno>--</bservationno><mzno>1900077479</mzno><diseasecode>K04.500</diseasecode><zytotalcost>--</zytotalcost><revisit>1</revisit><code_org>1001</code_org><majordescribe>--</majordescribe><diagnose>K04.500</diagnose><outdoctorid>01027</outdoctorid><healthcheck>--</healthcheck><hzno>000571414200</hzno><illnow>--</illnow><regisway>--</regisway><illhistory>--</illhistory><age>77岁</age><outdeptid>0101010018</outdeptid><diseasename>慢性根尖牙周炎</diseasename><registype>--</registype><mztime>2019-11-01 08:14:05</mztime><assitcheck>--</assitcheck><disposition>--</disposition></data></datas></result></return></ns1:apiEntryResponse></soap:Body></soap:Envelope>";
        
        Map map = new HashMap();
        List<Data> dataList = new ArrayList<>();
        Document doc = DocumentHelper.parseText(soap);
        //获取根元素,准备递归解析这个XML树
        Element root = doc.getRootElement();
        //获取到data的集合
        List<Element> mzList = root.element("Body").element("apiEntryResponse").element("return").element("result").element("datas").elements("data");
        //遍历data集合
        for (Element e : mzList) {
            List<Element> elements = e.elements();
            //遍历将元素中的key和value存到map中
            for (Element item : elements) {
                if (!StringUtils.isEmpty(item.getText())) {
                    map.put(item.getName(), item.getText());
                }
            }
            //将map转换成对象
            Data data = BeanUtil.mapToBean(map, Data.class, true);
            //对象存到集合中
            dataList.add(data);
        }
        //最后可以将取到的数据返回及其他等等操作
    }
}

 

3.Data对象如下:
package com.wuhj.springboot.domain;

import java.io.Serializable;

/**
 * @author wuhj
 * @date 2019/11/13 10:03
 */
public class Data implements Serializable {
    private String mzcount;
    private String name_org;
    private String bservationno;
    private String mzno;
    private String diseasecode;
    private String zytotalcost;
    private String revisit;
    private String code_org;
    private String majordescribe;
    private String diagnose;
    private String outdoctorid;
    private String healthcheck;
    private String hzno;
    private String illnow;
    private String regisway;
    private String illhistory;
    private String age;
    private String outdeptid;
    private String diseasename;
    private String registype;
    private String mztime;
    private String assitcheck;
    private String disposition;
    
    public String getMzcount() {
        return mzcount;
    }
    
    public void setMzcount(String mzcount) {
        this.mzcount = mzcount;
    }
    
    public String getName_org() {
        return name_org;
    }
    
    public void setName_org(String name_org) {
        this.name_org = name_org;
    }
    
    public String getBservationno() {
        return bservationno;
    }
    
    public void setBservationno(String bservationno) {
        this.bservationno = bservationno;
    }
    
    public String getMzno() {
        return mzno;
    }
    
    public void setMzno(String mzno) {
        this.mzno = mzno;
    }
    
    public String getDiseasecode() {
        return diseasecode;
    }
    
    public void setDiseasecode(String diseasecode) {
        this.diseasecode = diseasecode;
    }
    
    public String getZytotalcost() {
        return zytotalcost;
    }
    
    public void setZytotalcost(String zytotalcost) {
        this.zytotalcost = zytotalcost;
    }
    
    public String getRevisit() {
        return revisit;
    }
    
    public void setRevisit(String revisit) {
        this.revisit = revisit;
    }
    
    public String getCode_org() {
        return code_org;
    }
    
    public void setCode_org(String code_org) {
        this.code_org = code_org;
    }
    
    public String getMajordescribe() {
        return majordescribe;
    }
    
    public void setMajordescribe(String majordescribe) {
        this.majordescribe = majordescribe;
    }
    
    public String getDiagnose() {
        return diagnose;
    }
    
    public void setDiagnose(String diagnose) {
        this.diagnose = diagnose;
    }
    
    public String getOutdoctorid() {
        return outdoctorid;
    }
    
    public void setOutdoctorid(String outdoctorid) {
        this.outdoctorid = outdoctorid;
    }
    
    public String getHealthcheck() {
        return healthcheck;
    }
    
    public void setHealthcheck(String healthcheck) {
        this.healthcheck = healthcheck;
    }
    
    public String getHzno() {
        return hzno;
    }
    
    public void setHzno(String hzno) {
        this.hzno = hzno;
    }
    
    public String getIllnow() {
        return illnow;
    }
    
    public void setIllnow(String illnow) {
        this.illnow = illnow;
    }
    
    public String getRegisway() {
        return regisway;
    }
    
    public void setRegisway(String regisway) {
        this.regisway = regisway;
    }
    
    public String getIllhistory() {
        return illhistory;
    }
    
    public void setIllhistory(String illhistory) {
        this.illhistory = illhistory;
    }
    
    public String getAge() {
        return age;
    }
    
    public void setAge(String age) {
        this.age = age;
    }
    
    public String getOutdeptid() {
        return outdeptid;
    }
    
    public void setOutdeptid(String outdeptid) {
        this.outdeptid = outdeptid;
    }
    
    public String getDiseasename() {
        return diseasename;
    }
    
    public void setDiseasename(String diseasename) {
        this.diseasename = diseasename;
    }
    
    public String getRegistype() {
        return registype;
    }
    
    public void setRegistype(String registype) {
        this.registype = registype;
    }
    
    public String getMztime() {
        return mztime;
    }
    
    public void setMztime(String mztime) {
        this.mztime = mztime;
    }
    
    public String getAssitcheck() {
        return assitcheck;
    }
    
    public void setAssitcheck(String assitcheck) {
        this.assitcheck = assitcheck;
    }
    
    public String getDisposition() {
        return disposition;
    }
    
    public void setDisposition(String disposition) {
        this.disposition = disposition;
    }
}

 

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
在Java中发送SOAP报文,可以使用SOAP协议和相关的Java库来实现。 首先,你需要使用Java的Web服务相关的库来创建一个SOAP客户端。最常用的库是JAX-WS(Java API for XML Web Services)和Apache Axis。这些库提供了方便的API,用于创建和发送SOAP报文。 在使用这些库之前,你需要先定义一个WSDL(Web Services Description Language)文件,其中描述了你的SOAP服务的接口和操作。你可以使用WSDL编辑器或者手动编写WSDL文件。然后,利用JAX-WS提供的工具来生成Java类,这些类将用于创建和解析SOAP报文。 接下来,你需要创建一个SOAP客户端。使用生成的Java类,你可以通过调用相应的方法来构建SOAP请求报文。然后,将构建的SOAP请求报文发送到SOAP服务的URL。这可以通过在Java程序中使用HTTP连接来实现。你可以使用Java提供的URLConnection或Apache HttpClient等库来发送HTTP请求,并将SOAP请求作为HTTP请求的正文发送。 最后,你需要处理SOAP服务返回的SOAP响应报文。通过解析SOAP响应报文,你可以提取其中的数据并进行相应的处理。 总结起来,实现Java发送SOAP报文的步骤包括: 1. 定义WSDL文件描述SOAP服务接口和操作。 2. 使用JAX-WS生成Java类。 3. 创建SOAP客户端,构建SOAP请求报文,并发送到SOAP服务的URL。 4. 处理SOAP服务的响应报文,提取数据并进行相应的处理。 以上是一个简单的概述,实际的实现可能会涉及更多的细节和配置。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值