乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

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

       CevenCheng 2011-08-05
       

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

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

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

      1.第一步:通常我們會(huì)跟客戶端程序定義好傳輸數(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文檔
      這里推薦兩個(gè)網(wǎng)址供大家參考:
      http://www./CodeBank/System_Xml_Schema/BuildSchema/BuildXMLSchema.aspx
      http://www./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./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),讓它來替我們生成操縱符合這個(gè)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),請(qǐng)參考JAXB的相關(guān)文檔。

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


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

       

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

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

       
       


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


      3)        對(duì)于Marshaller和Unmarshaller,這兩個(gè)對(duì)象主要是用于Java對(duì)象和XML文檔互相轉(zhuǎn)換的主要接口(Marshaller負(fù)責(zé)從Java對(duì)象到XML文檔的轉(zhuǎn)換,Unmarshaller負(fù)責(zé)從XML文檔到Java對(duì)象的轉(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 對(duì)象轉(zhuǎn)換成XML文件
      JAXBElement usersE = (JAXBElement)jc.createUnmarshaller().unmarshal(new File("src/test.xml"));

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

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多