一 .实体类转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;
}