posts - 6,  comments - 7,  trackbacks - 0


          從去年12月份還是學(xué)習(xí)Java到現(xiàn)在已經(jīng)將近3個月了,現(xiàn)在已經(jīng)很有必要對以前所學(xué)的知識進(jìn)行一次系統(tǒng)的復(fù)習(xí)。而重新復(fù)習(xí)最好的辦法就是將最近剛完成,但不完善的Xml數(shù)據(jù)配置的Web程序,進(jìn)行一次重構(gòu)。

          其中需要重新復(fù)習(xí)的知識主要內(nèi)容如下:

          1.              Jaxb

          2.              XmlSechema

          3.              JSF(JavaServer Faces)

          4.              Html ,CSS ,Javascript

          5.              Java: a) 類的繼承

           b) 反射:實(shí)現(xiàn)內(nèi)存列表的搜索。

          1、知識回顧

          1.1 JAXB  

          1.簡介:(Java Architecture for XML Binding) 是一個業(yè)界的標(biāo)準(zhǔn),是一項(xiàng)可以根據(jù)XML Schema產(chǎn)生Java類的技術(shù)。結(jié)構(gòu)圖如圖1-1


          結(jié)構(gòu)圖如圖1-1

          2.參考資源:http://java.sun.com/developer/technicalArticles/WebServices/jaxb/

                              https://jaxb.dev.java.net/

          3.例子:將一個xml文件轉(zhuǎn)換成一個Java類。

                   a) xml文件結(jié)構(gòu)

          VOUTPUT.xml文件:

          <?xml version="1.0" encoding="UTF-8" standalone="yes"?>

          <VOutput>

              <Items>

                  <ObjVOutput>

                      <REF>1</REF>

                      <Station_ID>80001</Station_ID>

                      <PHYSICAL_OUTPUT_CHANNEL>4</PHYSICAL_OUTPUT_CHANNEL>

                      <DEVICE_TYPE>Monitor</DEVICE_TYPE>

                      <output_device_type>21</output_device_type>

                      <OUTPUT_DEVICE_NUMBER>4</OUTPUT_DEVICE_NUMBER>

                      <DESCRIPTION>Monitor-4</DESCRIPTION>

                      ……

                  </ObjVOutput>

          <ObjVOutput>

                      <REF>1</REF>

                      <Station_ID>80001</Station_ID>

                      <PHYSICAL_OUTPUT_CHANNEL>4</PHYSICAL_OUTPUT_CHANNEL>

                       ……

                  </ObjVOutput>

                             ……

              </Items>

          </VOutput>

          b) Schema-Derived Classes(XML Schema對應(yīng)的類)

                   1)生成VOUTPUT.xsd

          VOUTPUT.xsd文件:

          <?xml version="1.0" standalone="yes"?>

          <xs:schema id="VOutput" xmlns=""

                   xmlns:xs="http://www.w3.org/2001/XMLSchema"

                   xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">

                   <xs:element name="VOutput" >

                             <xs:complexType>

                                      <xs:choice>

                                               <xs:element name="Items" type="ItemsType">

                                               </xs:element>

                                      </xs:choice>

                             </xs:complexType>

                   </xs:element>

                   <xs:complexType name="ItemsType">

                             <xs:sequence>

                                      <xs:element name="ObjVOutput" type="ObjVOutputType"

                                               minOccurs="0" maxOccurs="unbounded">

                                      </xs:element>

                             </xs:sequence>

                   </xs:complexType>

                   <xs:complexType name="ObjVOutputType">

                             <xs:sequence>

                                      <xs:element name="REF" type="xs:int" minOccurs="0" />

                                      <xs:element name="Station_ID" type="xs:int"

                                               minOccurs="0" />

                                      <xs:element name="PHYSICAL_OUTPUT_CHANNEL" type="xs:int"

                                               minOccurs="0" />

                                      <xs:element name="DEVICE_TYPE" type="DeviceType"

                                               minOccurs="0" />

                                      ……

                             </xs:sequence>

                   </xs:complexType>

                   <xs:simpleType name="DeviceType">

                             <xs:restriction base="xs:string">

                                      <xs:enumeration value="Monitor" />

                                      <xs:enumeration value="VCR" />

                                      <xs:enumeration value="Standard Device" />

                                      <xs:enumeration value="Smart Device" />

                                      <xs:enumeration value="Trunk" />

                                      <xs:enumeration value="Standby VCR" />

                                      <!-- and so on ... -->

                             </xs:restriction>

                   </xs:simpleType>

          </xs:schema>

          在這里我是先通過c#的小程序生產(chǎn)一個xsd文件,然后再對其進(jìn)行簡單的修改。

          C#程序很簡單,代碼如下:

          System.Data.DataSet ds = new System.Data.DataSet();

                      ds.ReadXml(xmlfile); //xmlfile表示xml文件的路徑

                      ds.WriteXmlSchema(xsdfile);//xsdfile表示要存儲的xsd文件的路徑

          通過代碼生成的xsd文件需要進(jìn)一步修改。

          有關(guān)XML Schema學(xué)習(xí)資源參考:http://www.w3schools.com/xpath/default.asp

           2)根據(jù)schema文件xsd生成java文件

          這里通過小工具“xjc”實(shí)現(xiàn),下載地址:https://jaxb.dev.java.net/ 下載后可以在…jaxb-ri-20071219"bin"文件夾下找到。使用示例:

          xjc -d "D:"... "imatrix"src" -p " jaxb.voutput" "D:"... "VOUTPUT.xsd"

          -d <dir>              指定生成的文件的存放路徑

          “D:"... "imatrix"src”:        表示java文件生成后導(dǎo)入的文件夾

          -p <pkg>            指定目標(biāo)包

          "D:"... "VOUTPUT.xsd":表示schema文件路徑(包括文件名)。

          最后生成的java文件圖1-2所示:

          1-2

          C)代碼分析:

          VOutput.java:

          @XmlRootElement(name = "VOutput")

          publicclass VOutput {

              @XmlElement(name = "Items")

              protected ItemsType items;

              public ItemsType getItems() {

                  returnitems;

              }

              publicvoid setItems(ItemsType value) {

                  this.items = value;

              }

          }

          ItemsType.java

          publicclass ItemsType {

              @XmlElement(name = "ObjVOutput")

              protected List<ObjVOutputType> objVOutput;

              public List<ObjVOutputType> getObjVOutput() {

                  if (objVOutput == null) {

                      objVOutput = new ArrayList<ObjVOutputType>();

                  }

                  returnthis.objVOutput;

              }

          }

          ObjVOutputType.java

          publicclass ObjVOutputType {

              @XmlElement(name = "REF")

              protected Integer ref;

              @XmlElement(name = "Station_ID")

              protected Integer stationID;

              @XmlElement(name = "PHYSICAL_OUTPUT_CHANNEL")

              protected Integer physicaloutputchannel;

             

                 ……

              public Integer getREF() {

                  returnref;

              }

              publicvoid setREF(Integer value) {

                  this.ref = value;

              }

              public Integer getStationID() {

                  returnstationID;

              }

                  ……

              publicvoid setRecordLockFlags(Integer value) {

                  this.recordLockFlags = value;

              }

             

              public Integer getValidRecord() {

                  returnvalidRecord;

              }

              publicvoid setValidRecord(Integer value) {

                  this.validRecord = value;

              }

          }

          DeviceType.java

          @XmlType(name = "DeviceType")

          @XmlEnum

          publicenum DeviceType {

              @XmlEnumValue("Monitor")

              MONITOR("Monitor"),

              VCR("VCR"),

              @XmlEnumValue("Standard Device")

              STANDARD_DEVICE("Standard Device"),

              @XmlEnumValue("Smart Device")

              SMART_DEVICE("Smart Device"),

              @XmlEnumValue("Trunk")

              TRUNK("Trunk"),

              @XmlEnumValue("Standby VCR")

              STANDBY_VCR("Standby VCR");

              privatefinal String value;

              DeviceType(String v) {

                  value = v;

              }

              public String value() {

                  returnvalue;

              }

              publicstatic DeviceType fromValue(String v) {

                  for (DeviceType c: DeviceType.values()) {

                      if (c.value.equals(v)) {

                          return c;

                      }

                  }

                  thrownew IllegalArgumentException(v);

              }

          }

          d)應(yīng)用示例:

                             protected JAXBContext jaxbcontext;

          Object voutputElement = null;

          //jaxbpackage:package名稱

          jaxbcontext = JAXBContext.newInstance(jaxbpackage);

                 Unmarshaller um = jaxbcontext.createUnmarshaller();

          // xmlfileName:xml文件路徑

              voutputElement = um.unmarshal(new fileInputStream(xmlfileName));

                 VOutput vOutput = (VOutput) voutputElement;

          posted on 2008-02-25 17:09 zhan 閱讀(1107) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          <2008年2月>
          272829303112
          3456789
          10111213141516
          17181920212223
          2425262728291
          2345678

          常用鏈接

          留言簿(1)

          隨筆檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 康定县| 竹北市| 宣威市| 东兰县| 旬邑县| 嘉荫县| 山东省| 蓝山县| 宁陵县| 鸡东县| 海盐县| 浑源县| 上虞市| 迁西县| 来宾市| 滕州市| 长岭县| 金阳县| 鲁山县| 柞水县| 桐柏县| 夏河县| 广宗县| 樟树市| 韶关市| 柯坪县| 大宁县| 定陶县| 治县。| 县级市| 牡丹江市| 麻江县| 贡山| 高雄县| 科技| 桃园县| 嘉义县| 福泉市| 田东县| 孟州市| 禹城市|