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 阅读(1099) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问  
 
<2008年2月>
272829303112
3456789
10111213141516
17181920212223
2425262728291
2345678

常用链接

留言簿(1)

随笔档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜