免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
jaxb 通過xml轉(zhuǎn)ava對象
 

jaxb 通過xml轉(zhuǎn)ava對象

分類: JAVA 19人閱讀 評論(0) 收藏 舉報(bào)
 

今天在開發(fā)rest接口,要使用jaxb從對象生成xml返回給客戶端。由于是中途介入,jaxb已經(jīng)被人成功地引入到了我們的web項(xiàng)目中,所以在只里之是想說下如何從xml生成jaxb需要的java對象。

1.第一步:通常我們會跟客戶端程序定義好傳輸數(shù)據(jù)xml,如
<?xml version="1.0" encoding="UTF-8"?>
<users>
    <user>
        <name>小李</name>
        <sex>男</sex>
        <age>24</age>
    </user>

    <user>
        <name>小麗</name>
        <sex>女</sex>
        <age>18</age>
    </user>

    <user>
        <name>小王</name>
        <sex>男</sex>
        <age>22</age>
    </user>
</users>


2.第二步:可以通過一些外部工具生成xml的Schema文檔
這里推薦兩個網(wǎng)址供大家參考:
http://www.xmlforasp.net/CodeBank/System_Xml_Schema/BuildSchema/BuildXMLSchema.aspx
http://www.dotkam.com/2008/05/28/generate-xsd-from-xml/


<?xml version="1.0" encoding="utf-16"?>
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="users" type="usersType" />
  <xsd:complexType name="usersType">
    <xsd:sequence>
      <xsd:element maxOccurs="unbounded" name="user" type="userType" />
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="userType">
    <xsd:sequence>
      <xsd:element name="name" type="xsd:string" />
      <xsd:element name="sex" type="xsd:string" />
      <xsd:element name="age" type="xsd:int" />
    </xsd:sequence>
  </xsd:complexType>
</xsd:schema>

 

3.第三步:利用JAXB工具包(http://www.oracle.com/technetwork/java/index-jsp-136025.html),讓它來替我們生成操縱符合這個Schema規(guī)定的所有XML實(shí)例文檔的所有Java源代碼
如果已經(jīng)設(shè)置好了環(huán)境變量的話,那么只需要運(yùn)行JAXB包所帶的“xjc”運(yùn)行程序,例如

%JAXB_HOME%\bin\xjc.bat userSchema.xsd -d src -p primer.userinfo
其中:

A.        %JAXB_HOME%是你安裝JAXB工具包的位置,通常在jwsdp工具包的子目錄下。

B.        userSchema.xsd 是Schema的文件名,一般以xsd作為文件名的后綴。

C.        -d  的選項(xiàng),是指定系統(tǒng)生成的Java源代碼所放置的目錄,示例中為:src

D.       -p  的選項(xiàng),是指定系統(tǒng)生成的Java源代碼所在的Java Package的名稱,示例中為:primer.userinfo

E.        還有更多的選項(xiàng),請參考JAXB的相關(guān)文檔。

如果運(yùn)行成功的話,就會在你"-d"選項(xiàng)指定的目錄下產(chǎn)生一些java代碼文件


注意:現(xiàn)在JDK1.6的bin目錄下已經(jīng)帶有xjc.exe,直接使用就行了。我一開始還下了那個工具包,結(jié)果報(bào)"but found class javax.xml.bind.annotation.AccessType"的異常,定位了半天說是版本沖突。所以說1.6的jdk就直接運(yùn)行就行了,1.5的話才下那個東東

 

4.第四步 在應(yīng)用程序中使用這些代碼
    下面我們分析一下如何在我們的應(yīng)用程序中使用JAXB工具包替我們生成的代碼。

1)        JAXBContext 提供了一個入口,通過這個入口可以管理必要的XML/Java綁定信息。客戶端應(yīng)用程序通過newInstance(contextPath)方法得到該類的新實(shí)例。contextPath 參數(shù)包含一個或多個Java包名,這些Java包就是了JAXB編譯器所產(chǎn)生的接口代碼所在的Java包。該參數(shù)值初始化JAXBContext 對象,使得它能夠管理JAXB編譯器產(chǎn)生的接口。
JAXBContext jc = JAXBContext.newInstance("primer.userinfo");

 
 


2)        而通過ObjectFactory,可以直接生成根節(jié)點(diǎn)java對象Users 和子對象User。
User userA = objFactory.createUser();
 
Users users = objFactory.createUsers();
 


3)        對于Marshaller和Unmarshaller,這兩個對象主要是用于Java對象和XML文檔互相轉(zhuǎn)換的主要接口(Marshaller負(fù)責(zé)從Java對象到XML文檔的轉(zhuǎn)換,Unmarshaller負(fù)責(zé)從XML文檔到Java對象的轉(zhuǎn)換)。
JAXBElement usersE = objFactory.createUsers(users);

Marshaller marshaller = jc.createMarshaller();

marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);

marshaller.marshal( usersE,new FileOutputStream("src/test.xml"));
 
 Marshaller能把Users 對象轉(zhuǎn)換成XML文件
JAXBElement usersE = (JAXBElement)jc.createUnmarshaller().unmarshal(new File("src/test.xml"));

Users users = (Users)usersE.getValue();
 
 Unmarshaller能把 XML文件轉(zhuǎn)換成Users對象

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Jaxb 完全手冊
java對象直接轉(zhuǎn)換成xml格式!
JAXB完成XML和Java對象的互轉(zhuǎn)
用JAXB實(shí)現(xiàn)JAVA對象與XML文件的綁定
jaxb解析xml為對象例子
JAXB2.0 使用文檔
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服