XStream 实现 javabean 与 xml 互转

  1. XStream 是什么?
    XStream 是一个 java类库,实际上是一个转换器。
  2. XStream 作用 ?
    实现 java bean 与 xml 互转。
  3. XStream 如何使用?
    主要通过 xStream 实现 转换,具体测试示例代码如下:
  4. 源码 github 下载地址:
    https://github.com/xiaoyugelicai/TestJackson.git

添加依赖 jar 包

<!-- https://mvnrepository.com/artifact/com.thoughtworks.xstream/xstream -->
        <dependency>
            <groupId>com.thoughtworks.xstream</groupId>
            <artifactId>xstream</artifactId>
            <version>1.4.4</version>
        </dependency>
package testJackson;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.junit.Test;
import com.thoughtworks.xstream.XStream;
import vo.RequestH;
import vo.RequestItem;
import vo.RequestReq;

/**
 * This class was used to test xstream converter, xstream was used to convert javabean to xml or convert xml to javabean.
 * @author hualei
 * @date May 3, 2017 9:38:40 AM
 * 
 */
public class TestXstream {

    private String xml;


    /**
     * convert javabean to xml.
     * xml 请求数据如下:
     * <req op="sms_01send">
     *    <h>
     *      <ver>1.0</ver>
     *      <user>test</user>
     *      <pass>123</pass>
     *    </h>
     *    <items>
     *      <item>
     *        <id></id>
     *        <content>短信验证码</content>
     *        <tele>12345678901</tele>
     *        <model>1</model>
     *        <timing>2017-36-03 09:05:25</timing>
     *        <reply>1</reply>
     *        <priority>0</priority>
     *      </item>
     *    </items>
     *  </req>
     */
    @Test
    public void javabeanToXml(){
        RequestReq requestReq = new RequestReq();
        requestReq.setOp("sms_01send");

        RequestH requestH = new RequestH();
        requestH.setVer("1.0");
        requestH.setUser("test");
        requestH.setPass("123");

        RequestItem requestItem = new RequestItem();
        requestItem.setContent("短信验证码");
        requestItem.setId("");
        requestItem.setReply("1");
        requestItem.setModel("1");
        requestItem.setPriority("0");
        requestItem.setTele("12345678901");
        requestItem.setTiming(new SimpleDateFormat("yyyy-mm-dd hh:MM:ss").format(new Date()));

        List<RequestItem> items = new ArrayList<RequestItem>();
        items.add(requestItem);
        requestReq.setH(requestH);
        requestReq.setItems(items);

        XStream xstream = new XStream();
        // 设置 类型 别名
        xstream.alias("req", RequestReq.class);
        xstream.alias("h", RequestH.class);
        xstream.alias("item", RequestItem.class);
        // 设置 子标签 别名
        xstream.aliasField("items", RequestReq.class, "items");
        // 设置 标签属性 别名
        xstream.aliasAttribute(RequestReq.class, "op", "op");
        // javabean to xml
        xml = xstream.toXML(requestReq);
        System.out.println(xml);
    }

    /**
     * convert xml to java bean.
     */
    @Test
    public void xmlToJavabean(){
        // 给  xml 赋值
        javabeanToXml();
        XStream xStream = new XStream();

        // 设置 类型 别名
        xStream.alias("req", RequestReq.class);
        xStream.alias("h", RequestH.class);
        xStream.alias("item", RequestItem.class);
        // 设置 子标签 别名
        xStream.aliasField("items", RequestReq.class, "items");
        // 设置 标签属性 别名
        xStream.aliasAttribute(RequestReq.class, "op", "op");

        // xml to javabean
        RequestReq req = (RequestReq)xStream.fromXML(xml);
        System.out.println(req);
        // RequestReq [op=sms_01send, h=RequestH [ver=1.0, user=test, pass=123], items=[RequestItem [id=, content=短信验证码, tele=12345678901, model=1, timing=2017-58-03 09:05:22, reply=1, priority=0]]]

    }
}

实体类 RequestReq.class 代码如下:

package vo;

import java.util.Arrays;
import java.util.List;

/**
 * This class was used to generate body message.
 * @author hualei
 *
 */
public class RequestReq {

    private String op;
    private RequestH h;
    private List<RequestItem> items;

    /**
     * constructor
     * @param op
     * @param h
     * @param items
     */
    public RequestReq(String op, RequestH h, List<RequestItem> items) {
        super();
        this.op = op;
        this.h = h;
        this.items = items;
    }

    /**
     * Default constructor
     */
    public RequestReq() {
        super();
    }

    /**
     * @return the op
     */
    public String getOp() {
        return op;
    }

    /**
     * @param op the op to set
     */
    public void setOp(String op) {
        this.op = op;
    }

    /**
     * @return the h
     */
    public RequestH getH() {
        return h;
    }

    /**
     * @param h the h to set
     */
    public void setH(RequestH h) {
        this.h = h;
    }

    /**
     * @return the items
     */
    public List<RequestItem> getItems() {
        return items;
    }

    /**
     * @param items the items to set
     */
    public void setItems(List<RequestItem> items) {
        this.items = items;
    }

    /* (non-Javadoc)
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
        return "RequestReq [op=" + op + ", h=" + h.toString() + ", items=" + Arrays.toString(items.toArray()) + "]";
    }
}

实体类 RequestH.class 代码如下:

package vo;

/**
 * This class was used to generate head content of body message.
 * @author hualei
 *
 */
public class RequestH {

    /**
     * The variable was used to receive version.
     */
    private String ver;
    /**
     * The variable was used to receive user. 
     */
    private String user;
    /**
     * The variable was used to receive password. 
     */
    private String pass;

    /**
     * Constructor
     * @param ver
     * @param user
     * @param pass
     */
    public RequestH(String ver, String user, String pass) {
        super();
        this.ver = ver;
        this.user = user;
        this.pass = pass;
    }

    /**
     * Default constructor
     */
    public RequestH() {
        super();
    }

    /**
     * @return the ver
     */
    public String getVer() {
        return ver;
    }

    /**
     * @param ver the ver to set
     */
    public void setVer(String ver) {
        this.ver = ver;
    }

    /**
     * @return the user
     */
    public String getUser() {
        return user;
    }

    /**
     * @param user the user to set
     */
    public void setUser(String user) {
        this.user = user;
    }

    /**
     * @return the pass
     */
    public String getPass() {
        return pass;
    }

    /**
     * @param pass the pass to set
     */
    public void setPass(String pass) {
        this.pass = pass;
    }

    /* (non-Javadoc)
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
        return "RequestH [ver=" + ver + ", user=" + user + ", pass=" + pass + "]";
    }
}

实体类 RequestItem.class 代码如下:

package vo;

/**
 * This class was used to generate item content of body message.
 * @author hualei
 *
 */
public class RequestItem {
    private String id;
    private String content;
    private String tele;
    private String model;
    private String timing;
    private String reply;
    private String priority;

    /**
     * Constructor
     * @param id
     * @param content
     * @param tele
     * @param model
     * @param timing
     * @param reply
     * @param priority
     */
    public RequestItem(String id, String content, String tele, String model, String timing, String reply,
            String priority) {
        super();
        this.id = id;
        this.content = content;
        this.tele = tele;
        this.model = model;
        this.timing = timing;
        this.reply = reply;
        this.priority = priority;
    }

    /**
     * Default Constructor
     */
    public RequestItem() {
        super();
    }

    /**
     * @return the id
     */
    public String getId() {
        return id;
    }

    /**
     * @param id the id to set
     */
    public void setId(String id) {
        this.id = id;
    }

    /**
     * @return the content
     */
    public String getContent() {
        return content;
    }

    /**
     * @param content the content to set
     */
    public void setContent(String content) {
        this.content = content;
    }

    /**
     * @return the tele
     */
    public String getTele() {
        return tele;
    }

    /**
     * @param tele the tele to set
     */
    public void setTele(String tele) {
        this.tele = tele;
    }

    /**
     * @return the model
     */
    public String getModel() {
        return model;
    }

    /**
     * @param model the model to set
     */
    public void setModel(String model) {
        this.model = model;
    }

    /**
     * @return the timing
     */
    public String getTiming() {
        return timing;
    }

    /**
     * @param timing the timing to set
     */
    public void setTiming(String timing) {
        this.timing = timing;
    }

    /**
     * @return the reply
     */
    public String getReply() {
        return reply;
    }

    /**
     * @param reply the reply to set
     */
    public void setReply(String reply) {
        this.reply = reply;
    }

    /**
     * @return the priority
     */
    public String getPriority() {
        return priority;
    }

    /**
     * @param priority the priority to set
     */
    public void setPriority(String priority) {
        this.priority = priority;
    }

    /* (non-Javadoc)
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
        return "RequestItem [id=" + id + ", content=" + content + ", tele=" + tele + ", model=" + model + ", timing="
                + timing + ", reply=" + reply + ", priority=" + priority + "]";
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值