今天小編給大家分享的是JAXB實(shí)現(xiàn)XML與Java對(duì)象轉(zhuǎn)換的實(shí)例展示,相信大部分人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,話不多說(shuō),一起往下看吧。
10年積累的成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先建設(shè)網(wǎng)站后付款的網(wǎng)站建設(shè)流程,更有赤峰林西免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。JAXB是Java Architecture for XML Binding的縮寫(xiě),用于在Java類(lèi)與XML之間建立映射,能夠幫助開(kāi)發(fā)者很方便的將XML和Java對(duì)象進(jìn)行相互轉(zhuǎn)換。
本文以一個(gè)簡(jiǎn)單的例子介紹JAXB的使用,首先我們需要了解一下JAXB常用的API。
JAXBContext類(lèi),是應(yīng)用的入口,用于管理XML/Java綁定信息。
Marshaller接口,將Java對(duì)象序列化為XML數(shù)據(jù)。
Unmarshaller接口,將XML數(shù)據(jù)反序列化為Java對(duì)象。
@XmlType,將Java類(lèi)或枚舉類(lèi)型映射到XML模式類(lèi)型
@XmlAccessorType(XmlAccessType.FIELD),控制字段或?qū)傩缘男蛄谢?。FIELD表示JAXB將自動(dòng)綁定Java類(lèi)中的每個(gè)非靜態(tài)的(static)、非瞬態(tài)的(由@XmlTransient標(biāo)注)字段到XML。其他值還有XmlAccessType.PROPERTY和XmlAccessType.NONE。
@XmlAccessorOrder,控制JAXB 綁定類(lèi)中屬性和字段的排序
@XmlJavaTypeAdapter,使用定制的適配器(即擴(kuò)展抽象類(lèi)XmlAdapter并覆蓋marshal()和unmarshal()方法),以序列化Java類(lèi)為XML。
@XmlElementWrapper ,對(duì)于數(shù)組或集合(即包含多個(gè)元素的成員變量),生成一個(gè)包裝該數(shù)組或集合的XML元素(稱(chēng)為包裝器)。
@XmlRootElement,將Java類(lèi)或枚舉類(lèi)型映射到XML元素。
@XmlElement,將Java類(lèi)的一個(gè)屬性映射到與屬性同名的一個(gè)XML元素。
@XmlAttribute,將Java類(lèi)的一個(gè)屬性映射到與屬性同名的一個(gè)XML屬性。
我們需要進(jìn)行綁定的Java Bean內(nèi)容如下:
Employee.java
package net.csdn.beans; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement @XmlType(name = "Employee", propOrder = { "name", "age", "role", "gender" }) public class Employee { private String name; private String gender; private int age; private String role; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getRole() { return role; } public void setRole(String role) { this.role = role; } @Override public String toString() { return "Employee:: Name=" + this.name + " Age=" + this.age + " Gender=" + this.gender + " Role=" + this.role; } }
需要轉(zhuǎn)換為Java對(duì)象的XML文件內(nèi)容如下:
employee.xml
<?xml version="1.0"?><employee id="1"> <name>Pankaj</name> <age>29</age> <role>Java Developer</role> <gender>Male</gender></employee>
接下來(lái)編寫(xiě)測(cè)試用例代碼:
TestJAXB.java
package net.csdn.test; import java.io.InputStream; import java.io.StringReader; import java.io.StringWriter; import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; import net.csdn.beans.Employee; import org.junit.Test;public class TestJAXB { @Test public void testXml2Obj() throws Exception { InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("employee.xml"); byte[] bytes = new byte[is.available()]; is.read(bytes); String xmlStr = new String(bytes); JAXBContext context = JAXBContext.newInstance(Employee.class); Unmarshaller unmarshaller = context.createUnmarshaller(); Employee emp = (Employee) unmarshaller.unmarshal(new StringReader(xmlStr)); System.out.println(emp); } @Test public void testObj2Xml() { Employee emp = new Employee(); emp.setAge(10); emp.setGender("Male"); emp.setName("Jane"); emp.setRole("Teacher"); String xmlStr = TestJAXB.convertToXml(emp,"utf-8"); System.out.println(xmlStr); } public static String convertToXml(Object obj, String encoding) { String result = null; try { JAXBContext context = JAXBContext.newInstance(obj.getClass()); Marshaller marshaller = context.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding); StringWriter writer = new StringWriter(); marshaller.marshal(obj, writer); result = writer.toString(); } catch (Exception e) { e.printStackTrace(); } return result; } }
運(yùn)行testObj2Xml測(cè)試方法,控制臺(tái)輸出:
<?xml version="1.0" encoding="utf-8" standalone="yes"?><employee> <name>Jane</name> <age>10</age> <role>Teacher</role> <gender>Male</gender></employee>
運(yùn)行testXml2Obj測(cè)試方法,控制臺(tái)輸出:
Employee:: Name=Pankaj Age=29 Gender=Male Role=Java Developer
注:本例中使用JUnit4作為單元測(cè)試工具,在Eclipse中點(diǎn)擊Window->Show View->OutLine菜單打開(kāi)outline視圖,分別在testXml2Obj和testObj2Xml方法上點(diǎn)擊右鍵->Run As->JUnit Test即可。
JAXB是Java Architecture for XML Binding的縮寫(xiě),用于在Java類(lèi)與XML之間建立映射,能夠幫助開(kāi)發(fā)者很方便的將XML和Java對(duì)象進(jìn)行相互轉(zhuǎn)換。
本文以一個(gè)簡(jiǎn)單的例子介紹JAXB的使用,首先我們需要了解一下JAXB常用的API。
JAXBContext類(lèi),是應(yīng)用的入口,用于管理XML/Java綁定信息。
Marshaller接口,將Java對(duì)象序列化為XML數(shù)據(jù)。
Unmarshaller接口,將XML數(shù)據(jù)反序列化為Java對(duì)象。
@XmlType,將Java類(lèi)或枚舉類(lèi)型映射到XML模式類(lèi)型
@XmlAccessorType(XmlAccessType.FIELD),控制字段或?qū)傩缘男蛄谢IELD表示JAXB將自動(dòng)綁定Java類(lèi)中的每個(gè)非靜態(tài)的(static)、非瞬態(tài)的(由@XmlTransient標(biāo)注)字段到XML。其他值還有XmlAccessType.PROPERTY和XmlAccessType.NONE。
@XmlAccessorOrder,控制JAXB 綁定類(lèi)中屬性和字段的排序
@XmlJavaTypeAdapter,使用定制的適配器(即擴(kuò)展抽象類(lèi)XmlAdapter并覆蓋marshal()和unmarshal()方法),以序列化Java類(lèi)為XML。
@XmlElementWrapper ,對(duì)于數(shù)組或集合(即包含多個(gè)元素的成員變量),生成一個(gè)包裝該數(shù)組或集合的XML元素(稱(chēng)為包裝器)。
@XmlRootElement,將Java類(lèi)或枚舉類(lèi)型映射到XML元素。
@XmlElement,將Java類(lèi)的一個(gè)屬性映射到與屬性同名的一個(gè)XML元素。
@XmlAttribute,將Java類(lèi)的一個(gè)屬性映射到與屬性同名的一個(gè)XML屬性。
我們需要進(jìn)行綁定的Java Bean內(nèi)容如下:
Employee.java
package net.csdn.beans; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement @XmlType(name = "Employee", propOrder = { "name", "age", "role", "gender" }) public class Employee { private String name; private String gender; private int age; private String role; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getRole() { return role; } public void setRole(String role) { this.role = role; } @Override public String toString() { return "Employee:: Name=" + this.name + " Age=" + this.age + " Gender=" + this.gender + " Role=" + this.role; } }
需要轉(zhuǎn)換為Java對(duì)象的XML文件內(nèi)容如下:
employee.xml
<?xml version="1.0"?><employee id="1"> <name>Pankaj</name> <age>29</age> <role>Java Developer</role> <gender>Male</gender></employee>
接下來(lái)編寫(xiě)測(cè)試用例代碼:
TestJAXB.java
package net.csdn.test; import java.io.InputStream; import java.io.StringReader; import java.io.StringWriter; import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; import net.csdn.beans.Employee; import org.junit.Test; public class TestJAXB { @Test public void testXml2Obj() throws Exception { InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("employee.xml"); byte[] bytes = new byte[is.available()]; is.read(bytes); String xmlStr = new String(bytes); JAXBContext context = JAXBContext.newInstance(Employee.class); Unmarshaller unmarshaller = context.createUnmarshaller(); Employee emp = (Employee) unmarshaller.unmarshal(new StringReader(xmlStr)); System.out.println(emp); } @Test public void testObj2Xml() { Employee emp = new Employee(); emp.setAge(10); emp.setGender("Male"); emp.setName("Jane"); emp.setRole("Teacher"); String xmlStr = TestJAXB.convertToXml(emp,"utf-8"); System.out.println(xmlStr); } public static String convertToXml(Object obj, String encoding) { String result = null; try { JAXBContext context = JAXBContext.newInstance(obj.getClass()); Marshaller marshaller = context.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding); StringWriter writer = new StringWriter(); marshaller.marshal(obj, writer); result = writer.toString(); } catch (Exception e) { e.printStackTrace(); } return result; } }
運(yùn)行testObj2Xml測(cè)試方法,控制臺(tái)輸出:
<?xml version="1.0" encoding="utf-8" standalone="yes"?><employee> <name>Jane</name> <age>10</age> <role>Teacher</role> <gender>Male</gender></employee>
運(yùn)行testXml2Obj測(cè)試方法,控制臺(tái)輸出:
Employee:: Name=Pankaj Age=29 Gender=Male Role=Java Developer
注:本例中使用JUnit4作為單元測(cè)試工具,在Eclipse中點(diǎn)擊Window->Show View->OutLine菜單打開(kāi)outline視圖,分別在testXml2Obj和testObj2Xml方法上點(diǎn)擊右鍵->Run As->JUnit Test即可。
以上就是JAXB實(shí)現(xiàn)XML與Java對(duì)象轉(zhuǎn)換的具體操作,代碼詳細(xì)清楚,如果在日常工作遇到這個(gè)問(wèn)題,希望你能通過(guò)這篇文章解決問(wèn)題。如果想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
分享題目:JAXB實(shí)現(xiàn)XML與Java對(duì)象轉(zhuǎn)換-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)網(wǎng)址:http://www.rwnh.cn/article8/dgsoop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站、做網(wǎng)站、網(wǎng)站設(shè)計(jì)公司、動(dòng)態(tài)網(wǎng)站、定制網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容
全網(wǎng)營(yíng)銷(xiāo)推廣知識(shí)