JDK6的新特性之二:使用JAXB2來實(shí)現(xiàn)對象與XML之間的映射
JAXB 是Java Architecture for XML Binding的縮寫,可以將一個(gè)Java對象轉(zhuǎn)變成為XML格式,反之亦然。我們把對象與關(guān)系 數(shù)據(jù)庫之間的映射稱為ORM, 其實(shí)也可以把對象與XML之間的映射稱為OXM(Object XML Mapping). 原來JAXB是 Java EE的一部分,在JDK6中,SUN將其放到了Java SE中,這也是SUN的一貫做法。JDK6中自帶的這個(gè)JAXB版本是2.0, 比起 1.0(JSR 31)來,JAXB2(JSR 222)用JDK5的新特性Annotation來標(biāo)識要作綁定的類和屬性等,這就極大簡化了開發(fā)的工作 量。實(shí)際上,在Java EE 5.0中,EJB和Web Services也通過Annotation來簡化開發(fā)工作。另外,JAXB2在底層是用 StAX(JSR 173)來處理XML文檔。 閑話不多說了,下面用代碼演示在JDK6中如何來用JAXB2 public class JAXB2Tester { public static void main(String[] args) throws JAXBException,IOException { JAXBContext context = JAXBContext.newInstance(Person.class); //下面代碼演示將對象轉(zhuǎn)變?yōu)閤ml Marshaller m = context.createMarshaller(); Address address = new Address("China","Beijing","Beijing","ShangDi West","100080"); Person p = new Person(Calendar.getInstance(),"JAXB2",address,Gender.MALE,"SW"); FileWriter fw = new FileWriter("person.xml"); m.marshal(p,fw); //下面代碼演示將上面生成的xml轉(zhuǎn)換為對象 FileReader fr = new FileReader("person.xml"); Unmarshaller um = context.createUnmarshaller(); Person p2 = (Person)um.unmarshal(fr); System.out.println("Country:"+p2.getAddress().getCountry()); } } @XmlRootElement//表示person是一個(gè)根元素 class Person { @XmlElement Calendar birthDay; //birthday將作為person的子元素 @XmlAttribute String name; //name將作為person的的一個(gè)屬性 public Address getAddress() { return address; } @XmlElement Address address; //address將作為person的子元素 @XmlElement Gender gender; //gender將作為person的子元素 @XmlElement String job; //job將作為person的子元素 public Person(){ } public Person(Calendar birthDay, String name, Address address, Gender gender, String job) { this.birthDay = birthDay; this.name = name; this.address = address; this.gender = gender; this.job = job; } } enum Gender{ MALE(true), FEMALE (false); private boolean value; Gender(boolean _value){ value = _value; } } class Address { @XmlAttribute String country; @XmlElement String state; @XmlElement String city; @XmlElement String street; String zipcode; //由于沒有添加@XmlElement,所以該元素不會出現(xiàn)在輸出的xml中 public Address() { } public Address(String country, String state, String city, String street, String zipcode) { this.country = country; this.state = state; this.city = city; this.street = street; this.zipcode = zipcode; } public String getCountry() { return country; } } 運(yùn)行該程序,我們會得到一個(gè)person.xml的文件,如下: <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <person name="JAXB2"> <birthDay>2006-12-28T08:49:27.203+00:00</birthDay> <address country="China"> <state>Beijing</state> <city>Beijing</city> <street>ShangDi West</street> </address> <gender>MALE</gender> <job>SW</job> </person> 控制臺會輸出 Country:China 最后,想說一點(diǎn),除了JAXB之外,我們還可以通過XMLBeans和Castor等來實(shí)現(xiàn)同樣的功能。 |
|