JAXBContext轉換包含集合屬性的xml與java集合物件Demo
核心類:
package com.jaxb; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.text.MessageFormat; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Unmarshaller; public class JaxbReadXml { @SuppressWarnings("unchecked") public static <T> T readString(Class<T> clazz, String context) throws JAXBException { try { JAXBContext jc = JAXBContext.newInstance(clazz); Unmarshaller u = jc.createUnmarshaller(); return (T) u.unmarshal(new File(context)); } catch (JAXBException e) { // logger.trace(e); throw e; } } @SuppressWarnings("unchecked") public static <T> T readConfig(Class<T> clazz, String config, Object... arguments) throws IOException, JAXBException { InputStream is = null; try { if (arguments.length > 0) { config = MessageFormat.format(config, arguments); } // logger.trace("read configFileName=" + config); JAXBContext jc = JAXBContext.newInstance(clazz); Unmarshaller u = jc.createUnmarshaller(); is = new FileInputStream(config); return (T) u.unmarshal(is); } catch (IOException e) { // logger.trace(config, e); throw e; } catch (JAXBException e) { // logger.trace(config, e); throw e; } finally { if (is != null) { is.close(); } } } @SuppressWarnings("unchecked") public static <T> T readConfigFromStream(Class<T> clazz, InputStream dataStream) throws JAXBException { try { JAXBContext jc = JAXBContext.newInstance(clazz); Unmarshaller u = jc.createUnmarshaller(); return (T) u.unmarshal(dataStream); } catch (JAXBException e) { // logger.trace(e); throw e; } } public static void main(String[] args) throws JAXBException { TestOrgs testOrgs = JaxbReadXml.readString(TestOrgs.class, "test/test.xml"); System.out.println(testOrgs.getSize()); System.out.println(testOrgs.getBatchNumber()); System.out.println(testOrgs.getErrmsg()); for (TestOrg o : testOrgs) { System.out.println(o.getOrgName()); } } }
成員類:
package com.jaxb; import java.util.ArrayList; import java.util.List; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @SuppressWarnings("serial") @XmlRootElement(name = "orgs") @XmlAccessorType(XmlAccessType.FIELD) public class TestOrgs extends ArrayList<TestOrg> { // 泛化, 聚合 @XmlAttribute(name = "size") private int size; @XmlAttribute(name = "batch_number") private Long batchNumber; @XmlAttribute(name = "errmsg") private String errmsg; @XmlElement(name = "org") public List<TestOrg> getOrgs() { return this; } public int getSize() { return size; } public void setSize(int size) { this.size = size; } public Long getBatchNumber() { return batchNumber; } public void setBatchNumber(Long batchNumber) { this.batchNumber = batchNumber; } public String getErrmsg() { return errmsg; } public void setErrmsg(String errmsg) { this.errmsg = errmsg; } }
成員類2:
xml檔案:package com.jaxb; import java.util.Date; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; /** * <pre> * If you annotate your Artifact class with the annotation: * @XmlAccessorType(XmlAccessType.FIELD) * then you do not need to annotate the fields with @XmlElement and the * setter/getter methods will be ignored. * </pre> * * @author User */ @XmlAccessorType(XmlAccessType.FIELD) // 用了這個之後就會自動忽略setter/getter方法。不用這個就需要去掉註解,需要保證屬性名和xml裡的表簽名一致 public class TestOrg { @XmlElement(name = "org_id") private Long orgId; @XmlElement(name = "parent_id") private Long parentId; @XmlElement(name = "org_name") private String orgName; @XmlElement(name = "org_code") private String orgCode; @XmlElement(name = "org_type") private String orgType; @XmlElement(name = "start_d") private Date startDate; @XmlElement(name = "end_d") private Date endDate; @XmlElement(name = "attribute1") private String attribute; @XmlElement(name = "insert_t") private Date insertTime; public Long getOrgId() { return orgId; } public void setOrgId(Long orgId) { this.orgId = orgId; } public Long getParentId() { return parentId; } public void setParentId(Long parentId) { this.parentId = parentId; } public String getOrgName() { return orgName; } public void setOrgName(String orgName) { this.orgName = orgName; } public String getOrgCode() { return orgCode; } public void setOrgCode(String orgCode) { this.orgCode = orgCode; } public String getOrgType() { return orgType; } public void setOrgType(String orgType) { this.orgType = orgType; } public Date getStartDate() { return startDate; } public void setStartDate(Date startDate) { this.startDate = startDate; } public Date getEndDate() { return endDate; } public void setEndDate(Date endDate) { this.endDate = endDate; } public String getAttribute() { return attribute; } public void setAttribute(String attribute) { this.attribute = attribute; } public Date getInsertTime() { return insertTime; } public void setInsertTime(Date insertTime) { this.insertTime = insertTime; } }
<?xml version="1.0" encoding="UTF-8"?>
<orgs size="7095" batch_number="20130704110039" errmsg="">
<org>
<org_id>16817</org_id>
<parent_id>9233</parent_id>
<org_name>512AAS.蘇州滄浪區</org_name>
<org_code>512AAS</org_code>
<org_type>門店部門</org_type>
<start_d>2011-12-28</start_d>
<end_d></end_d>
<attribute1></attribute1>
<insert_t>2013-7-4 10:32:09</insert_t>
</org>
<org>
<org_id>16817</org_id>
<parent_id>9233</parent_id>
<org_name>512AAS.蘇州滄浪區</org_name>
<org_code>512AAS</org_code>
<org_type>門店部門</org_type>
<start_d>2011-12-28</start_d>
<end_d></end_d>
<attribute1></attribute1>
<insert_t>2013-7-4 10:32:09</insert_t>
</org>
<org>
<org_id>16817</org_id>
<parent_id>9233</parent_id>
<org_name>512AAS.蘇州滄浪區</org_name>
<org_code>512AAS</org_code>
<org_type>門店部門</org_type>
<start_d>2011-12-28</start_d>
<end_d></end_d>
<attribute1></attribute1>
<insert_t>2013-7-4 10:32:09</insert_t>
</org>
<org>
<org_id>16817</org_id>
<parent_id>9233</parent_id>
<org_name>512AAS.蘇州滄浪區</org_name>
<org_code>512AAS</org_code>
<org_type>門店部門</org_type>
<start_d>2011-12-28</start_d>
<end_d></end_d>
<attribute1></attribute1>
<insert_t>2013-7-4 10:32:09</insert_t>
</org>
<org>
<org_id>16817</org_id>
<parent_id>9233</parent_id>
<org_name>512AAS.蘇州滄浪區</org_name>
<org_code>512AAS</org_code>
<org_type>門店部門</org_type>
<start_d>2011-12-28</start_d>
<end_d></end_d>
<attribute1></attribute1>
<insert_t>2013-7-4 10:32:09</insert_t>
</org>
</orgs>
相關推薦
JAXBContext轉換包含集合屬性的xml與java集合物件Demo
核心類: package com.jaxb; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; impo
使用XStream是實現XML與Java對象的轉換(2)--別名
name have ret lis sea sil 數組 ttr auth 五、使用別名(Alias) 首先,有這樣一段Java代碼: Java代碼 import java.util.ArrayList; import java.util.List;
使用XStream是實現XML與Java對象的轉換(6)--持久化
light 自己的 map stc title 指定 reg 對象 框架 九、持久化 在第八節的示例中,當我們操作一組對象時,我們可以指定Writer、OutputStream來寫出序列化後的XML數據,我們還可以指定Reader、InputStream來讀取序列化後的XM
使用XStream是實現XML與Java對象的轉換(5)--Object Stream
控制 () oid dex 關閉 ava -o setname otf 八,Object Stream 之前的例子我們都是直接輸出Xml成為String類型或者從String中獲得並解析Xml,現在我們要處理輸入流和輸出流! 1,輸出流(ObjectOutputStrea
xstream--xml工具類--java物件轉換JSONObject、xml與java物件互轉
工作環境: myeclipse2013、jdk1.8、fastjson1.1.41、xstream1.4.3 import java.io.ByteArrayInputStream; import java.io.InputStream; import java.io.Writer;
使用XStream是實現XML與Java物件的轉換(6)--持久化
九、持久化 在第八節的示例中,當我們操作一組物件時,我們可以指定Writer、OutputStream來寫出序列化後的XML資料,我們還可以指定Reader、InputStream來讀取序列化後的XML資料。當我們需要寫出和讀取檔案時都需要指定輸入輸出流,並且需要明確的呼叫輸入輸出方法來實現Java物件的序
使用XStream是實現XML與Java物件的轉換(2)--別名
五、使用別名(Alias) 首先,有這樣一段Java程式碼: import java.util.ArrayList; import java.util.List; import com.thoughtworks.xstream
Java學習筆記——淺談數據結構與Java集合框架(第一篇、List)
技術分享 emp 鏈表 adc 下標 -c nod nal integer 橫看成嶺側成峰,遠近高低各不同。不識廬山真面目,只緣身在此山中。 ——蘇軾 這一塊兒學的是雲裏霧裏,咱們先從簡單的入手。逐漸的撥開迷霧見太陽。本次先做List集合的三
xml與java代碼相互裝換的工具類
children ace final port 使用 || 註釋 shee turn 這是一個java操作xml文件的工具類,最大的亮點在於能夠通過工具類直接生成xml同樣層次結構的java代碼,也就是說,只要你定義好了xml的模板,就能一鍵生成java代碼。省下了自己再使
mybatis-plus中自動配置的 mapper.xml與java介面對映問題
本來沒有mybatis-plus的話,這個工作是通過mybatis-spring的MapperScan來完成的。 Mybatis-plus中的自動配置類MybatisPlusAutoConfiguration.class中有一個靜態內部類MapperScannerRegistrarN
Webservice-XML與Java(五)
處理XML一般有兩種方法,DOM和基於流。相關有很多工具,比如SAX、STAX、DOM、JDOM、DOM4J等,SAX和STAX都是基於流,前者屬於推模型,後者是拉模型,STAX為oracle公司提出基於流(stream)來處理的方式,在Java中封裝成了stax,和sax很像,在webservice中一般
xml與java物件對映
JAXB提供了XML到java物件(類)之間的相互對映(轉換),我們可以利用JAXB來消除繁瑣的XML解析工作。 下面是引用oracle網站中有關jaxb的一句話。 Now developers have another Java API at their disposal that can make i
xml與java物件之間的相互轉化
Java和xml的互相轉換,依靠強大的JAXBContext可以輕鬆實現。 下面通過一個簡單案例學習一下JAXBContext 首先準備好一個JavaBean供實驗: 注意 1、類檔案註解:@XmlRootElement不可缺少 2、2個Student的構造方法不能少
並查集(不相交集合)詳解與java實現
目錄 認識並查集 並查集解析 基本思想 如何檢視a,b是否在一個集合? a,b合併,究竟是a的祖先合併在b的祖先上,還是b的祖先合併在a上? 其他路徑壓縮?
Java 集合類詳解 Java 集合類詳解
Java 集合類詳解 0.參考文獻 http://blog.csdn.net/liulin_good/article/details/6213815 1.java集合類圖 1.1 1.2 上述類圖中,實線邊框的是實現類,比
js與java字串物件的使用
js字串物件的使用 java.lang.String 原始碼解析 public final class String implements java.io.Serializable, Comparable<String>, CharSequence {} 是一個用 f
【集合詳解】Java集合總結(下)-常用集合類對比
今天我們主要看一張圖。 圖是無意中在網上發現的,個人覺得非常好。(時間久了就忘了出處,請原創原諒~~) 我們還是從左到右分析。 ①所有的類都用到Iterator則說明所有的集合類都有遍歷集合的方法。 ②LinkedList除了繼承AbstractSe
【Java集合原始碼剖析】Java集合框架
Java集合工具包位於Java.util包下,包含了很多常用的資料結構,如陣列、連結串列、棧、佇列、集合、雜湊表等。學習Java集合框架下大致可以分為如下五個部分:List列表、Set集合、Ma
JAXB的應用之二---------Xml與多個物件的對映(聚合或組合)及注意事項
在我們的實際應用中,Xml中的結構往往不止這麼簡單,一般都會有2,3層。也就是說如果對映成物件就是聚合(組合)的情況 。 就用我們上一章的例子繼續來講,簡單我們的Book的author現在不止是一個String型別的名子,他是一個物件Author,幷包含作者的相關個人
【集合詳解】Java集合總結(中)-Map家族
接上文,本篇部落格我們接著談論有關集合的內容。 java所有的集合分成三大類。Set類似罐子,把一個物件新增到Set集合時,Set集合無法記住新增這個元素的順序,所以Set裡的元素不能重複。List集合非常想一個數組,可以記住每次新增元素的順序,且List的長