实体类和xml字符串互转

560 阅读2分钟

一 .实体类转xml字符串

1.根据要转化的xml字符串编写对应的实体类

<?xml version="1.0" encoding="UTF-8"?>
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soap-env:Body xmlns:jns0='http://com.pft.webserviceintf' >
        <jns0:call>
            <servicename>ZZ39_P_WS_BDCGH</servicename>
            <params>1000111111</params>
            <params>淮北供水</params>
            <params>测试</params>
            <params>15258861987</params>
            <params>420281198910127670</params>
            <params>测试2</params>
            <params>123</params>
            <params>15258861987</params>
            <params>1234</params>
            <params>HB0001</params>
            <params>BDC001</params>
            <params>南黎路198号</params>
            <params>测试3</params>
        </jns0:call>
    </soap-env:Body>
</soap-env:Envelope>

2.对应实体类编写

@Data
@XmlRootElement(name = "soap-env:Envelope")
@XmlAccessorType(value = XmlAccessType.FIELD)
@XmlType(propOrder = {"Body"})
public class WaterRequestBean {

    @XmlAttribute(name="xmlns:soap-env")
    protected String soapenv="http://schemas.xmlsoap.org/soap/envelope/";

    @XmlAttribute(name="xmlns:soap")
    protected String soap="http://schemas.xmlsoap.org/wsdl/soap/";

    @XmlAttribute(name="xmlns:xsi")
    protected String xsi="http://www.w3.org/2001/XMLSchema-instance";

    @XmlElement(name="soap-env:Body")
    protected WaterBodyBean Body;
}

@Data
@XmlRootElement(name = "soap-env:Body")
@XmlAccessorType(value = XmlAccessType.FIELD)
@XmlType(propOrder = {"call"})
public class WaterBodyBean {

    @XmlAttribute(name="xmlns:jns0")
    protected String jns0="http://com.pft.webserviceintf";

    @XmlElement(name="jns0:call")
    private WaterRequestJhsnBean call;
}

@Data
@XmlRootElement(name = "jns0:call")
@XmlAccessorType(value = XmlAccessType.FIELD)
@XmlType(propOrder = {"HH", "BZMC", "LXR", "SJHM", "SFZBH","DBR", "DBRSFZBH", "DBRSJHM", "XYDM", "BDCZ","DYH", "MS1", "MS2"})
public class WaterRequestJhsnBean {

    private String HH;
    private String BZMC;
    private String LXR;
    private String SJHM;
    private String SFZBH;
    private String DBR;
    private String DBRSFZBH;
    private String DBRSJHM;
    private String XYDM;
    private String BDCZ;
    private String DYH;
    private String MS1;
    private String MS2;
}

3.使用工具类进行转化

public static void main(String[] args) {
    WaterRequestBean requestBean = new WaterRequestBean();
    WaterBodyBean bodyBean = new WaterBodyBean();
    WaterRequestJhsnBean row = new WaterRequestJhsnBean();
    row.setHH("111");
    row.setBZMC("111");
    row.setDBR("111");
    row.setLXR("111");
    row.setSJHM("111");
    row.setSFZBH("111");
    row.setDBRSFZBH("111");
    row.setDBRSJHM("111");
    row.setBDCZ("111");
    row.setDYH("111");
    row.setMS1("111");
    row.setMS2("111");
    bodyBean.setCall(row);
    requestBean.setBody(bodyBean);
    System.out.println(XmlUtils.getXml(requestBean));
}

4.对应的工具类方法:

/**
 * bean对象转换XML格式
 * @param caseBean
 * @return
 */
public static String getXml(Object caseBean) {
    String xmlObj = "";
    try {
        JAXBContext context = JAXBContext.newInstance(caseBean.getClass());
        Marshaller marshaller = context.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        marshaller.marshal(caseBean, baos);
        xmlObj = new String(baos.toByteArray());
    }catch (Exception e) {
        xmlObj = "";
        log.error("bean对象转换XML格式失败,原因是:", e);
    }
    return xmlObj;
}

结束。。

二. xml字符串转实体类

1.确认要转化的xml字符串

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <ns2:callResponse xmlns:ns2="http://com.pft.webserviceintf">
            <return>
                <ROOT>
                    <ROW>
	                    <JGBZ>0</JGBZ>
	                    <JGMS>成功</JGMS>
	                    <HH></HH>
	                    <BZMC>淮北供水</BZMC>
	                    <ZBWZ>南黎路198号</ZBWZ>
                    </ROW>
                </ROOT>
            </return>
        </ns2:callResponse>
    </soap:Body>
</soap:Envelope>

2.编写对应实体类

@Data
@XmlRootElement(name = "soap:Envelope")
@XmlAccessorType(value = XmlAccessType.FIELD)
@XmlType(propOrder = {"Body"})
public class WaterResultBean {

    @XmlAttribute(name="xmlns:soap")
    protected String soapenv="http://schemas.xmlsoap.org/soap/envelope/";

    @XmlElement(required = true,name="soap:Body")
    private WaterResultBodyBean Body;
}


@Data
@XmlRootElement(name = "soap:Body")
@XmlAccessorType(value = XmlAccessType.FIELD)
@XmlType(propOrder = {"callResponse"})
public class WaterResultBodyBean {

    @XmlElement(required = true,name="ns2:callResponse")
    private WaterCallResponseBean callResponse;
}


@Data
@XmlRootElement(name = "ns2:callResponse")
@XmlAccessorType(value = XmlAccessType.FIELD)
@XmlType(propOrder = {"returnBean"})
public class WaterCallResponseBean {

    @XmlAttribute(name="xmlns:ns2")
    protected String soapenv="http://com.pft.webserviceintf";

    @XmlElement(required = true,name="return")
    private WaterResultReturnBean returnBean;
}


@Data
@XmlRootElement(name = "return")
@XmlAccessorType(value = XmlAccessType.FIELD)
@XmlType(propOrder = {"ROOT"})
public class WaterResultReturnBean {

    @XmlElement(required = true,name="ROOT")
    private RootBean ROOT;
}


@Data
@XmlRootElement(name = "ROOT")
@XmlAccessorType(value = XmlAccessType.FIELD)
@XmlType(propOrder = {"ROW"})
public class RootBean {

    @XmlElement(required = true,name="ROW")
    private RowBean ROW;
}


@Data
@XmlRootElement(name = "ROW")
@XmlAccessorType(value = XmlAccessType.FIELD)
@XmlType(propOrder = {"JGBZ","JGMS","HH","BZMC","ZBWZ"})
public class RowBean {

    private String JGBZ;
    private String JGMS;
    private String HH;
    private String BZMC;
    private String ZBWZ;
}

3.使用工具类转化

/**
 * XML格式转换bean对象
 * @param clazz
 * @param xmlStr
 * @return
 */
public Object xmlStrToOject(Class<?> clazz, String xmlStr){
    Object xmlObject = null;
    Reader reader = null;
    try {
        JAXBContext context = JAXBContext.newInstance(clazz);
        // XML 转为对象的接口
        Unmarshaller unmarshaller = context.createUnmarshaller();
        reader = new StringReader(xmlStr);
        //以文件流的方式传入这个string
        xmlObject = unmarshaller.unmarshal(reader);
        if (null != reader) {
            reader.close();
        }
    }catch (Exception e) {
        xmlObject = null;
        e.printStackTrace();
    }
    return xmlObject;
}