一 目录
二 代码
1 Person.java
package com.jn.xstream.bean;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamImplicit;
import com.thoughtworks.xstream.annotations.XStreamInclude;
/**
* 描述:人
* 作者:姜鹏
* 时间:20170911
* */
@XStreamAlias("person")
public class Person {
@XStreamAlias("firstname")
private String firstname;
@XStreamAlias("lastname")
private String lastname;
@XStreamAlias("phone")
private PhoneNumber phone;
@XStreamAlias("fax")
private PhoneNumber fax;
// @XStreamImplicit()
// private List<PhoneNumber> para = new ArrayList<PhoneNumber>();
@XStreamImplicit()
private Map<String,PhoneNumber> map = new HashMap<String,PhoneNumber>();
public Person(String firstname, String lastname) {
this.firstname = firstname;
this.lastname = lastname;
}
public Person() {
}
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
public PhoneNumber getPhone() {
return phone;
}
public void setPhone(PhoneNumber phone) {
this.phone = phone;
}
public PhoneNumber getFax() {
return fax;
}
public void setFax(PhoneNumber fax) {
this.fax = fax;
}
public Map getMap() {
return map;
}
public void setMap(Map map) {
this.map = map;
}
}
2 PhoneNumber.java
package com.jn.xstream.bean;
import com.thoughtworks.xstream.annotations.XStreamAlias;
/**
* 描述:电话号码
* 作者:姜鹏
* 时间:20170911
* */
@XStreamAlias("PhoneNumber")
public class PhoneNumber {
@XStreamAlias("code")
private int code;
@XStreamAlias("number")
private String number;
public PhoneNumber(int code, String number) {
this.code = code;
this.number = number;
}
public PhoneNumber() {
}
public void setCode(int code) {
this.code = code;
}
public void setNumber(String number) {
this.number = number;
}
public int getCode() {
return code;
}
public String getNumber() {
return number;
}
}
3 XstreamUtil.java
package com.jn.xstream.util;
import com.thoughtworks.xstream.XStream;
/**
* 描述:xtream工具类
* 作者:姜鹏
* 时间:20170911
* */
public class XstreamUtil {
/**
* 将xml字符串转为对象
* */
public static Object xmlStr2Object(String xmlString,Class clazz) throws Exception{
if( clazz == null || xmlString == null || "".equals(xmlString.replace(" ", "")) ) return null;
Object object = clazz.newInstance();
XStream xStream = new XStream();
String className = object.getClass().getName();
xStream.alias(className, clazz);
xStream.processAnnotations(new Class[]{clazz});
xStream.setMode(XStream.NO_REFERENCES);
//转为对象
object = xStream.fromXML(xmlString);
return object;
}
/**
* 将对象转为xml格式字符串
* */
public static String object2XmlStr(Object obj) throws Exception{
if(obj==null) return null;
XStream xStream = new XStream();
String xml = xStream.toXML(obj);
return xml;
}
}
4 XStreamTest.java
package com.jn.xstream.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import com.jn.xstream.bean.Person;
import com.jn.xstream.bean.PhoneNumber;
import com.jn.xstream.util.XstreamUtil;
import com.thoughtworks.xstream.XStream;
/**
* 描述:xstream测试
* 作者:姜鹏
* 时间:20170911
* */
public class XStreamTest {
public static void test2() throws Exception{
// 拼接字符串
StringBuffer sb = new StringBuffer();
sb.append("<person>");
sb.append(" <firstname>Joe</firstname>");
sb.append(" <lastname>Walnes</lastname>");
sb.append(" <phone>");
sb.append(" <code>123</code>");
sb.append(" <number>1234-456</number>");
sb.append(" </phone>");
sb.append(" <fax>");
sb.append(" <code>123</code>");
sb.append(" <number>9999-999</number>");
sb.append(" </fax>");
sb.append("</person>");
String xml = sb.toString();
Person person = (Person) XstreamUtil.xmlStr2Object(xml, Person.class);
System.out.println("person2 = "+person);
}
public static void test3() throws Exception{
Person joe = new Person("Joe", "Walnes");
joe.setPhone(new PhoneNumber(123, "1234-456"));
joe.setFax(new PhoneNumber(123, "9999-999"));
PhoneNumber phoneNumber1 = new PhoneNumber(123, "1234-456");
PhoneNumber phoneNumber2 = new PhoneNumber(123, "1234-456");
joe.getMap().put("phoneNumber1", phoneNumber1);
joe.getMap().put("phoneNumber2", phoneNumber2);
String result = XstreamUtil.object2XmlStr(joe);
System.out.println("result = "+result);
}
public static void test1(){
// 拼接字符串
StringBuffer sb = new StringBuffer();
sb.append("<person>");
sb.append(" <firstname>Joe</firstname>");
sb.append(" <lastname>Walnes</lastname>");
sb.append(" <phone>");
sb.append(" <code>123</code>");
sb.append(" <number>1234-456</number>");
sb.append(" </phone>");
sb.append(" <fax>");
sb.append(" <code>123</code>");
sb.append(" <number>9999-999</number>");
sb.append(" </fax>");
sb.append("</person>");
String xml = sb.toString();
// 构造XStream
XStream xStream = new XStream();
Person person = new Person();
xStream.alias("person", Person.class);
xStream.processAnnotations(new Class[]{Person.class});
xStream.setMode(XStream.NO_REFERENCES);
//转为对象
person = (Person)xStream.fromXML(xml);
System.out.println("person = "+person);
}
public static void main(String[] args) throws Exception {
test3();
// String filePath = "D:"+File.separator+"test"+File.separator+"xstream"+File.separator+"test.xml";
// // Initializing XStream
// XStream xStream = new XStream();
// xStream.alias("person", Person.class);
// xStream.alias("personnumber", PhoneNumber.class);
// Serializing an object to XML
Person joe = new Person("Joe", "Walnes");
joe.setPhone(new PhoneNumber(123, "1234-456"));
joe.setFax(new PhoneNumber(123, "9999-999"));
FileOutputStream fileOutputStream = new FileOutputStream(new File(
filePath));
xStream.toXML(joe, fileOutputStream);
// Deserializing an object back from XM
XStream xStream2 = new XStream();
//
// FileInputStream fileInputStream = new FileInputStream(new File(
// filePath));
// Person person = (Person) xStream.fromXML(fileInputStream);
// System.out.println(person.toString());
}
}