xstream产生xml和java bean

转:
/**
*@author: chenyoulong
*@Title:PersonTest.java
*@date 2012-9-28 下午3:25:09
*@Description:TODO
*/
package com.test;

import java.util.ArrayList;
import java.util.List;

import com.entity.PersonBean;
import com.entity.PersonBean.Animal;
import com.entity.PersonBean.Friends;
import com.entity.PersonBean.Pets;
import com.entity.PersonBean.PhoneNumber;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;

/**
* @ClassName:PersonTest
* @author: chenyoulong Email: [email protected]
* @date :2012-9-28 下午3:25:09
* @Description:TODO
*/
public class PersonTest {

/**
* @Title: main
* @Description: TODO
* @param args
* @return void
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

// toXml
// String xmlStr=new PersonTest().toXml();

// toBean
PersonBean per = new PersonTest().toBean();
// String xmlStr="<person>"+
// "<firstName>chen</firstName>"+
// "<lastName>youlong</lastName>"+
// "<telphone>"+
// "<code>137280</code>"+
// "<number>137280968</number>"+
// "</telphone>"+
// "<faxphone>"+
// "<code>20</code>"+
// "<number>020221327</number>"+
// "</faxphone>"+
// "<friends>"+
// "<name>A1</name>"+
// "<name>A2</name>"+
// "<name>A3</name>"+
// "</friends>"+
// "<pets>"+
// "<pet>"+
// "<name>doly</name>"+
// "<age>2</age>"+
// "</pet>"+
// "<pet>"+
// "<name>Ketty</name>"+
// "<age>2</age>"+
// "</pet>"+
// "</pets>"+
// "</person>";
// PersonBean person=XmlUtil.toBean(xmlStr, PersonBean.class);
// System.out.println("person=firstname=="+person.getFirstName());
// System.out.println("person==Friends==name1=="+person.getFriend().getName().get(0));
// System.out.println("person==Pets==name2=="+person.getPet().getAnimalList().get(1).getName());
//
}

/**
* 注解生产xml
*
* @Title: toXml
* @Description: TODO
* @return String
*/
public String toXml() {
PersonBean per = new PersonBean();
per.setFirstName("chen");
per.setLastName("youlong");

PhoneNumber tel = new PhoneNumber();
tel.setCode(137280);
tel.setNumber("137280968");

PhoneNumber fax = new PhoneNumber();
fax.setCode(20);
fax.setNumber("020221327");
per.setTel(tel);
per.setFax(fax);

// 测试一个标签下有多个同名标签
List<String> friendList = new ArrayList<String>();
friendList.add("A1");
friendList.add("A2");
friendList.add("A3");
Friends friend1 = new Friends();
friend1.setName(friendList);
per.setFriend(friend1);

// 测试一个标签下循环对象
Animal dog = new Animal("doly", 2);
Animal cat = new Animal("Ketty", 2);
List<Animal> petList = new ArrayList<Animal>();
petList.add(dog);
petList.add(cat);
Pets pet = new Pets();
pet.setAnimalList(petList);
per.setPet(pet);

XStream xstream = new XStream(new DomDriver("utf-8")); // 指定编码解析器
xstream.processAnnotations(PersonBean.class);// 如果没有这句,xml中的根元素会是<包.类名>;或者说:注解根本就没生效,所以的元素名就是类的属性
xstream.aliasSystemAttribute(null, "class");
String xmlString = xstream.toXML(per);
System.out.println("xml===" + xmlString);
return xmlString;
}

/**
* toBean
*
* @Title: toBean
* @Description: TODO
* @return
* @return PersonBean
*/
public PersonBean toBean() {
String xmlStr = "<person>" + "<firstName>chen</firstName>"
+ "<lastName>youlong</lastName>" + "<telphone>"
+ "<code>137280</code>" + "<number>137280968</number>"
+ "</telphone>" + "<faxphone>" + "<code>20</code>"
+ "<number>020221327</number>" + "</faxphone>" + "<friends>"
+ "<name>A1</name>" + "<name>A2</name>" + "<name>A3</name>"
+ "</friends>" + "<pets>" + "<pet>" + "<name>doly</name>"
+ "<age>2</age>" + "</pet>" + "<pet>" + "<name>Ketty</name>"
+ "<age>2</age>" + "</pet>" + "</pets>" + "</person>";

XStream xstream = new XStream(new DomDriver()); // 注意:不是new Xstream();
// 否则报错:java.lang.NoClassDefFoundError:
// org/xmlpull/v1/XmlPullParserFactory
xstream.processAnnotations(PersonBean.class);
PersonBean person = (PersonBean) xstream.fromXML(xmlStr);
System.out.println("person=firstname==" + person.getFirstName());
System.out.println("person==Friends==name1=="
+ person.getFriend().getName().get(0));
System.out.println("person==Pets==name=="
+ person.getPet().getAnimalList().get(1).getName());
return person;
}

/**
* 输出xml和解析xml的工具类
*
* @ClassName:XmlUtil
* @author: chenyoulong Email: [email protected]
* @date :2012-9-29 上午9:51:28
* @Description:TODO
*/
public static class XmlUtil {
/**
* java 转换成xml
*
* @Title: toXml
* @Description: TODO
* @param obj
*            对象实例
* @return String xml字符串
*/
public static String toXml(Object obj) {
XStream xstream = new XStream();
// XStream xstream=new XStream(new DomDriver()); //直接用jaxp dom来解释
// XStream xstream=new XStream(new DomDriver("utf-8"));
// //指定编码解析器,直接用jaxp dom来解释

// //如果没有这句,xml中的根元素会是<包.类名>;或者说:注解根本就没生效,所以的元素名就是类的属性
xstream.processAnnotations(obj.getClass()); // 通过注解方式的,一定要有这句话
return xstream.toXML(obj);
}

/**
* 将传入xml文本转换成Java对象
*
* @Title: toBean
* @Description: TODO
* @param xmlStr
* @param cls
*            xml对应的class类
* @return T xml对应的class类的实例对象
*
*         调用的方法实例:PersonBean person=XmlUtil.toBean(xmlStr,
*         PersonBean.class);
*/
public static <T> T toBean(String xmlStr, Class<T> cls) {
// 注意:不是new Xstream(); 否则报错:java.lang.NoClassDefFoundError:
// org/xmlpull/v1/XmlPullParserFactory
XStream xstream = new XStream(new DomDriver());
xstream.processAnnotations(cls);
T obj = (T) xstream.fromXML(xmlStr);
return obj;
}

}

}

你可能感兴趣的:(xstream)