真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯網站制作重慶分公司

通過JAXB實現XML和對象之間映射的方法-創(chuàng)新互聯

這篇文章給大家分享的是有關通過JAXB實現XML和對象之間映射的方法的內容。小編覺得挺實用的,因此分享給大家做個參考。一起跟隨小編過來看看吧。

創(chuàng)新互聯公司服務項目包括樅陽網站建設、樅陽網站制作、樅陽網頁制作以及樅陽網絡營銷策劃等。多年來,我們專注于互聯網行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構等提供互聯網行業(yè)的解決方案,樅陽網站推廣取得了明顯的社會效益與經濟效益。目前,我們服務的客戶以成都為中心已經輻射到樅陽省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!

JAXB的全稱是Java Architecture for XML Binding,是一項可以通過XML產生Java對象,也可以通過Java對象產生XML的技術。JDK中關于JAXB部分有幾個比較重要的接口或類,如:

?  JAXBContext:它是程序的入口類,提供了XML/Java綁定的操作,包括marshal、unmarshal等。

?  Marshaller:它負責把Java對象序列化為對應的XML。

?  Unmarshaller:它負責把XML反序列化為對應的Java對象。

序列化

進行序列化的基本操作步驟如下:

  //1、獲取一個基于某個class的JAXBContext,即JAXB上下文
   JAXBContext jaxbContext = JAXBContext.newInstance(obj.getClass());
   //2、利用JAXBContext對象創(chuàng)建對象的Marshaller實例。
   Marshaller marshaller = jaxbContext.createMarshaller();
   //3、設置一些序列化時需要的指定的配置
   marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
    marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
    StringWriter writer = new StringWriter();
    //4、將對象進行序列化
    marshaller.marshal(obj, writer);

1、  創(chuàng)建一個JAXB上下文對象。

2、  利用JAXB上下文對象創(chuàng)建對應的Marshaller對象。

3、  指定序列化時的配置參數,具體可以設置的參數和對應的參數的含義可以參考API文檔。

4、  最后一步是將對應的對象序列化到一個Writer、OutputStream、File等輸出對象中,具體可以參考Marshaller接口的API文檔。

使用JAXB進行對象的序列化時對應的對象類型必須是javax.xml.bind.JAXBElement類型,或者是使用了javax.xml.bind.annotation.XmlRootElement注解標注的類型。XmlRootElement用于標注在class上面,表示把一個class映射為一個XML Element對象。與之相配合使用的注解通常還有XmlElement和XmlAttribute。XmlElement注解用于標注在class的屬性上,用于把一個class的屬性映射為一個XML Element對象。XmlAttribute注解用于標注在class的屬性上,用于把一個class的屬性映射為其class對應的XML Element上的一個屬性。默認情況下,當我們的一個屬性沒有使用XmlElement標注時也會被序列化為Xml元素的一個子元素,如果我們不希望Java對象中的某個屬性被序列化則可以在對應的屬性或對應的get方法上采用XMLTransient進行標注。

示例

Person類

@XmlRootElement
public class Person {
 
   private Integer id;
   private String name;
   private Integer age;
   private Address address;
 
   @XmlAttribute(name = "id")
   public Integer getId() {
      returnid;
   }
 
   public void setId(Integer id) {
      this.id = id;
   }
 
   @XmlAttribute
   public String getName() {
      returnname;
   }
 
   public void setName(String name) {
      this.name = name;
   }
 
   @XmlElement
   public Integer getAge() {
      returnage;
   }
 
   public void setAge(Integer age) {
      this.age = age;
   }
 
   @XmlElement
   public Address getAddress() {
      returnaddress;
   }
 
   public void setAddress(Address address) {
      this.address = address;
   }
 
}

Address類

@XmlRootElement
public class Address {
 
   private Integer id;
   private String province;
   private String city;
   private String area;
   private String other;
 
   @XmlAttribute(name="id")
   public Integer getId() {
      returnid;
   }
 
   public void setId(Integer id) {
      this.id = id;
   }
 
   @XmlElement
   public String getProvince() {
      returnprovince;
   }
 
   public void setProvince(String province) {
      this.province = province;
   }
 
   @XmlElement
   public String getCity() {
      returncity;
   }
 
   public void setCity(String city) {
      this.city = city;
   }
 
   @XmlElement
   public String getArea() {
      returnarea;
   }
 
   public void setArea(String area) {
      this.area = area;
   }
 
   @XmlElement
   public String getOther() {
      returnother;
   }
 
   public void setOther(String other) {
      this.other = other;
   }
 
}

測試方法

 @Test
   public void testMarshal() throws JAXBException {
      JAXBContext context = JAXBContext.newInstance(Person.class);
      Marshaller marshaller = context.createMarshaller();
      marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
      StringWriter writer = new StringWriter();
      Person person = new Person();
      person.setId(1);
      person.setName("張三");
      person.setAge(30);
      Address address = new Address();
      address.setId(1);
      address.setProvince("廣東省");
      address.setCity("深圳市");
      address.setArea("南山區(qū)");
      address.setOther("其它");
      person.setAddress(address);
     
      marshaller.marshal(person, writer);
      System.out.println(writer.toString());
   }

輸出結果



    
南山區(qū) 深圳市 其它 廣東省
30

反序列化

進行反序列化的基本步驟如下:

//1、創(chuàng)建一個指定class的JAXB上下文對象
   JAXBContext context = JAXBContext.newInstance(Person.class);
   //2、通過JAXBContext對象創(chuàng)建對應的Unmarshaller對象。
   Unmarshaller unmarshaller = context.createUnmarshaller();
   File file = new File("D:\\person.xml");
   //3、調用Unmarshaller對象的unmarshal方法進行反序列化,接收的參數可以是一個InputStream、Reader、File等
   Person person = (Person) unmarshaller.unmarshal(file);

Unmarshaller對象在提供了一系列的unmarshal重載方法,對應的參數類型可以是File、InputStream、Reader等,具體的可以查看對應的API文檔。

JAXB工具類

除了使用JAXBContext來創(chuàng)建Marshaller和Unmarshaller對象來實現Java對象和XML之間的互轉外,Java還為我們提供了一個工具類JAXB。JAXB工具類提供了一系列的靜態(tài)方法來簡化了Java對象和XML之間的互轉,只需要簡單的一行代碼即可搞定。

 @Test
   public void testMarshal1() {
      Person person = new Person();
      person.setId(1);
      person.setName("張三");
      person.setAge(30);
      Address address = new Address();
      address.setId(1);
      address.setProvince("廣東省");
      address.setCity("深圳市");
      address.setArea("南山區(qū)");
      address.setOther("其它");
      person.setAddress(address);
      JAXB.marshal(person, System.out);
   }
 
   @Test
   public void testUnmarshal1() {
      File xml = new File("D:\\person.xml");
      Person person = JAXB.unmarshal(xml, Person.class);
      System.out.println(person);
   }

感謝各位的閱讀!關于通過JAXB實現XML和對象之間映射的方法就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

另外有需要云服務器可以了解下創(chuàng)新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。


當前題目:通過JAXB實現XML和對象之間映射的方法-創(chuàng)新互聯
本文來源:http://weahome.cn/article/ceejse.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部