最开始的时候,我们在写实体bean到xml之间的转换一般是通过反射机制手动生成!在进行xml到bean之间的转换则是采用dom4j、sax等解析解析xml然后进行给对象设置值。
现在好了,JavaEE6.0其实自己带了这些功能,发布的说明文章中写的名称是JAXB,下面看看两个例子,其实转换只在2行代码间...
package com.bling;
import java.util.Date;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class UserDetail {
private int id;
private String niname;
private Date birth;
public UserDetail() {
super();
}
public UserDetail(int id, String niname, Date birth) {
super();
this.id = id;
this.niname = niname;
this.birth = birth;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNiname() {
return niname;
}
public void setNiname(String niname) {
this.niname = niname;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
}
note:这个类是一个最最普通的实体了,唯独注意这个类上面的一个annotation注解,这个必须要加上,否则会报错,到时候提示你加上,有兴趣的可以测试。
package com.bling.test;
import java.io.StringReader;
import java.util.Date;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import org.junit.Test;
import com.bling.UserDetail;
public class FormatBean {
@Test
public void beanToXml(){
UserDetail ud = new UserDetail(12, "tongxue", new Date(System.currentTimeMillis()-4546546l));
try {
JAXBContext jc = JAXBContext.newInstance(ud.getClass());
jc.createMarshaller().marshal(ud,System.out);
} catch (JAXBException e) {
e.printStackTrace();
}
}
@Test
public void xmlToBean(){
String xml = "<?xml version='1.0' encoding='UTF-8' standalone='yes'?><userDetail><birth>2012-08-16T08:47:51.813+08:00</birth><id>12</id><niname>tongxue</niname></userDetail>";
try {
JAXBContext jc = JAXBContext.newInstance(UserDetail.class);
UserDetail ud = (UserDetail) jc.createUnmarshaller().unmarshal(new StringReader(xml));
System.out.println(ud.getNiname());
} catch (JAXBException e) {
e.printStackTrace();
}
}
}
note:执行两个测试就可以了!
总结一下很简单吧!其实JavaEE6.0还是整合了很多实用的功能在里面,要多多利用!