posts - 6,  comments - 7,  trackbacks - 0


          從去年12月份還是學習Java到現在已經將近3個月了,現在已經很有必要對以前所學的知識進行一次系統的復習。而重新復習最好的辦法就是將最近剛完成,但不完善的Xml數據配置的Web程序,進行一次重構。

          其中需要重新復習的知識主要內容如下:

          1.              Jaxb

          2.              XmlSechema

          3.              JSF(JavaServer Faces)

          4.              Html ,CSS ,Javascript

          5.              Java: a) 類的繼承

           b) 反射:實現內存列表的搜索。

          1、知識回顧

          1.1 JAXB  

          1.簡介:(Java Architecture for XML Binding) 是一個業界的標準,是一項可以根據XML Schema產生Java類的技術。結構圖如圖1-1


          結構圖如圖1-1

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

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

          3.例子:將一個xml文件轉換成一個Java類。

                   a) xml文件結構

          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對應的類)

                   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#的小程序生產一個xsd文件,然后再對其進行簡單的修改。

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

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

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

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

          通過代碼生成的xsd文件需要進一步修改。

          有關XML Schema學習資源參考:http://www.w3schools.com/xpath/default.asp

           2)根據schema文件xsd生成java文件

          這里通過小工具“xjc”實現,下載地址: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文件生成后導入的文件夾

          -p <pkg>            指定目標包

          "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)應用示例:

                             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 閱讀(1108) 評論(0)  編輯  收藏

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


          網站導航:
           
          <2008年2月>
          272829303112
          3456789
          10111213141516
          17181920212223
          2425262728291
          2345678

          常用鏈接

          留言簿(1)

          隨筆檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 田林县| 桃园县| 乌鲁木齐市| 镇江市| 玉溪市| 巫山县| 江安县| 舞阳县| 宿州市| 阿尔山市| 新绛县| 克山县| 塘沽区| 军事| 宜宾县| 瑞金市| 临夏县| 诏安县| 武定县| 长宁区| 措勤县| 宁城县| 横峰县| 富民县| 德惠市| 徐州市| 泸溪县| 盈江县| 平塘县| 屏山县| 宁强县| 报价| 清水河县| 左权县| 万全县| 澄城县| 榕江县| 五河县| 邢台县| 邛崃市| 林口县|