在之前工作中进行通讯时使用的,使用JaxB来进行报文的转化
1.报文对象转换工具类
public class JAXBUtils {
//对象转报文
public static String toXML(Object obj){
Class c = obj.getClass();
try {
JAXBContext context = JAXBContext.newInstance(c);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(marshaller.JAXB_ENCODING,"utf-8");//设置编码
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);// 是否格式化生成的xml串
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, false);// 是否省略xm头声明信息
StringWriter sw = new StringWriter();
marshaller.marshal(obj,sw);
return sw.toString();
} catch (JAXBException e) {
e.printStackTrace();
}
return null;
}
//报文转对象
public static <T>T fromXml(Class<T> type,String xml){
try {
JAXBContext context = JAXBContext.newInstance(type);
Unmarshaller unmarshaller = context.createUnmarshaller();
T t = (T) unmarshaller.unmarshal(new StringReader(xml));
return t;
} catch (JAXBException e) {
e.printStackTrace();
}
return null;
}
}
2.Xml格式JAVA类
//ReqTestPacket
@XmlRootElement(name="TEST")
@XmlAccessorType(XmlAccessType.FIELD)
public class ReqTestPacket {
@XmlElement(name="HEAD")
private ReqTestHeader head;
@XmlElement(name="MAIN")
private ReqTestMain main;
public ReqTestHeader getHead() {
return head;
}
public void setHead(ReqTestHeader head) {
this.head = head;
}
public ReqTestMain getMain() {
return main;
}
public void setMain(ReqTestMain main) {
this.main = main;
}
}
//ReqTestHeader
@XmlRootElement(name="HEAD")
@XmlAccessorType(XmlAccessType.FIELD)
public class ReqTestHeader {
@XmlElement(name="CONTENTTYPE")
private String contentType;
public String getContentType() {
return contentType;
}
public void setContentType(String contentType) {
this.contentType = contentType;
}
}
//ReqTestMain
@XmlRootElement(name="MAIN")
@XmlAccessorType(XmlAccessType.FIELD)
public class ReqTestMain {
@XmlElement(name="NAME")
private String name;
@XmlElement(name="AGE")
private String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
3.测试类
测试:
public class AimToTest {
public static void main(String[] args){
ReqTestPacket packet = new ReqTestPacket();
ReqTestHeader head = new ReqTestHeader();
ReqTestMain main = new ReqTestMain();
head.setContentType("application/json");
main.setAge("20");
main.setName("tom");
packet.setHead(head);
packet.setMain(main);
String xml = JAXBUtils.toXML(packet);
System.out.println(xml);
}
}
4.测试结果
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<TEST>
<HEAD>
<CONTENTTYPE>application/json</CONTENTTYPE>
</HEAD>
<MAIN>
<NAME>tom</NAME>
<AGE>20</AGE>
</MAIN>
</TEST>