用的是jdk自带的javax.xml.bind.JAXBContext将对象和xml字符串进行相互转换
封装的工具类XMLUtil
package com.ddwl.api.utils;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import java.io.StringWriter;
public class XMLUtil {
public static String convertToXml(Object obj) {
StringWriter sw = new StringWriter();
try {
JAXBContext context = JAXBContext.newInstance(obj.getClass());
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
Boolean.TRUE);
marshaller.marshal(obj, sw);
} catch (JAXBException e) {
e.printStackTrace();
}
return sw.toString().replace("standalone=\"yes\"", "");
}
}
java实体
package com.ddwl.api.entity;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "Message")
@XmlType(propOrder = {
"Header",
"Body",
})
public class Account {
private Body Body;
private Header Header;
public com.ddwl.api.entity.Body getBody() {
return Body;
}
public void setBody(com.ddwl.api.entity.Body body) {
Body = body;
}
public com.ddwl.api.entity.Header getHeader() {
return Header;
}
public void setHeader(com.ddwl.api.entity.Header header) {
Header = header;
}
}
main方法调用
Body body=new Body();
body.setWaybills(waybills);
Header header=new Header();
header.setMessageInformation(messageID);
Account account =new Account();
account.setHeader(header);
account.setBody(body);
String strXml= XMLUtil.convertToXml(account);
转换效果
附:
@XmlRootElement:根节点
@XmlAccessorType(XmlAccessType.FIELD): 表示使用这个类中的 private 非静态字段作为 XML 的序列化的属性或者元素。
这里还可以选择属性,也就是使用 set/get 方法来序列化属性或者元素。
@XmlType :指定输出顺序