输出:
<?xml version="1.0" encoding="utf-8" ?>
<RequestMessage>
<Header>
<Noun>ZUVMP03</Noun>
</Header>
<Pavload>
<CLXTCBBM>设备编码</CLXTCBBM>
<EQKTX>设备说明</EQKTX>
</Pavload>
<Pavload>
<CLXTCBBM>设备编码</CLXTCBBM>
<EQKTX>设备说明2</EQKTX>
</Pavload>
</RequestMessage>
示例:
1:
public abstract class BaseZuvmp {
}
2:
@XmlRootElement(name = "RequestMessage")
public class ZUVMP {
private Header header;
private List<BaseZuvmp> pavloads;
@XmlElement(name="Header")
public Header getHeader() {
return header;
}
public void setHeader(Header header) {
this.header = header;
}
@XmlElementRef(name="Pavload")
public List<BaseZuvmp> getPavloads() {
return pavloads;
}
public void setPavloads(List<BaseZuvmp> pavloads) {
this.pavloads = pavloads;
}
}
3:
@XmlRootElement(name = "Pavload")
public class ZUVMP03Pavload extends BaseZuvmp implements Serializable{
/**
*
*/
private static final long serialVersionUID = -378651538178333555L;
/**
* 设备编码
*/
private String clxtcbbm;
/**
* 设备说明
*/
private String eqktx;
@XmlElement(name="CLXTCBBM")
public String getClxtcbbm() {
return clxtcbbm;
}
public void setClxtcbbm(String clxtcbbm) {
this.clxtcbbm = clxtcbbm;
}
@XmlElement(name="EQKTX")
public String getEqktx() {
return eqktx;
}
public void setEqktx(String eqktx) {
this.eqktx = eqktx;
}
}
4:
public class XmlUtil {
public static String beanToXml(Object obj, Class<?>... load) throws JAXBException {
JAXBContext context = JAXBContext.newInstance(load);
Marshaller marshaller = context.createMarshaller();
// 格式化输出xml
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
// 设置输出xml编码格式
marshaller.setProperty(Marshaller.JAXB_ENCODING, "utf-8");
StringWriter writer = new StringWriter();
marshaller.marshal(obj, writer);
// 去掉standalone属性
return writer.toString().replace("standalone=\"yes\"", "");
}
public static <T> T xmlToBean(String xml,Class<?>...types) throws JAXBException {
JAXBContext context = JAXBContext.newInstance(types);
Unmarshaller um = context.createUnmarshaller();
StringReader sr = new StringReader(xml);
return (T) um.unmarshal(sr);
}
}
5.测试:
private static String getXmlStr() {
String aString = "";
try {
ZUVMP zuvmp = new ZUVMP();
Header header = new Header();
header.setNoun("ZUVMP03");
ZUVMP03Pavload pavload31 = new ZUVMP03Pavload();
pavload31.setClxtcbbm("设备编码1");
pavload31.setEqktx("设备说明1");
ZUVMP03Pavload pavload32 = new ZUVMP03Pavload();
pavload32.setClxtcbbm("设备编码2");
pavload32.setEqktx("设备说明2");
List<BaseZuvmp> pavloadBase = new ArrayList<>();
pavloadBase.add(pavload31);
pavloadBase.add(pavload32);
zuvmp.setHeader(header);
zuvmp.setPavloads(pavloadBase);
aString = XmlUtil.beanToXml(zuvmp, ZUVMP03Pavload.class, ZUVMP.class);
} catch (Exception e) {
e.printStackTrace();
}
return aString;
}
private static void xmlToBean(String xml) {
try {
Object obj = XmlUtil.xmlToBean(xml, ZUVMP03Pavload.class, ZUVMP.class);
System.out.println(obj);
} catch (Exception e) {
e.printStackTrace();
}
}
注:如果ZUMP这样写,则xml嵌套的节点会输出xmlns,xmlns:xsi,将集合列注解改用@XmlElementRef会报错
@XmlRootElement(name = "RequestMessage")
public class ZUVMP {
private Header header;
private List<T> pavloads;
@XmlElement(name="Header")
public Header getHeader() {
return header;
}
public void setHeader(Header header) {
this.header = header;
}
@XmlElement(name="Pavload")
public List<T> getPavloads() {
return pavloads;
}
public void setPavloads(List<T> pavloads) {
this.pavloads = pavloads;
}
}