XStream 实现 javabean 与 xml 互转

时间:2022-07-29 19:06:43
  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 + "]";
}
}