JaxB报文对象互转

在之前工作中进行通讯时使用的,使用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>


猜你喜欢

转载自blog.csdn.net/csdn15679160266/article/details/81054922