<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Sealyu

    --- 博客已遷移至: http://www.sealyu.com/blog

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      618 隨筆 :: 87 文章 :: 225 評論 :: 0 Trackbacks
    前段時間項目中需要根據xml文件創建java對象,而apache commons-digester是首選.
    一直想把它寫下來,可是總有點懶這次介紹一下digester的常用法,其他更高級的使用方法請參閱digester doc(由于比較忙,下次有時間寫一篇關于cglib的常用法,呵呵)
    Apache Digester應用實例 [原創]
    --------------利用 apache commons-digester 自動根據xml文件創建java 對象
    <day day up>
    author: binker
    email: binker_cao@163.com
    date: 2006/12/16
    note: 本文可以任意轉載,但請保持其完整性并注明來源,謝謝.

    一.序
      Digester是apache的一個組件 apache commons-digester.jar,通過它可以很方便的從xml文件生成java對象.你不用再象以前通過jdom或者Xerces去讀取一個document對象.(jdom和Xerces仍然有它們的用武之地及強大之處,在其它應用里你也少不了它們)
    我只是用一個例子展示一下如何把xml文件生成一個java object.
    首先你必須把jar加入到你的項目classpath.
    (一)準備:
    1.環境: Eclipse, jdk1.4+
    2.需求說明:學院包含學生和老師,學生可以選修課程,老師有不同的資格認證。
    3.Java Class的定義,簡潔起見,略去import內容。
    4.使用Digester生成java對象 必須要定義一個xml文件,此xml文件必須符合digester-rules.dtd的規則。
    5.所有的xml文件必須在classpath路徑中,這樣可以通過Class.getClassLoader().getInputStream()讀取xml文件。

    (二)提要:
      本示例所需的java class 和 xml文件分成四類:
    1.基礎xml文件: [academy.xml]: 你將要解析的xml文件.
    2.基礎java class: [Academy.java, Teacher.java, Student.java, Cousre.java]: 生成的對象的類定義
    3.digesterRules.xml: [academyRules.xml]: 定義了基礎xml文件到基礎java class的匹配(映射)關系
    4.Digester class: [DigestXMLJavaAcademy.java]: 根據digesterRules.xml去解析基礎xml文件,并生成java 對象

    (三)參考資料
       1.English ebook: Pro Jakarta Commons by Harshad Oak  Apress 2004

    二.基礎Java Class
    1.學院 class Academy.java
    Java代碼 復制代碼
    1. public class Academy {  
    2.     private Vector students;  
    3.     private Vector teachers;  
    4.     private String name;  
    5.   
    6.     public Academy() {  
    7.         students = new Vector();  
    8.         teachers = new Vector();  
    9.     }  
    10.   
    11.     public void addStudent(Student student) {  
    12.         students.addElement(student);  
    13.     }  
    14.   
    15.     public void addTeacher(Teacher teacher) {  
    16.         teachers.addElement(teacher);  
    17.     }  
    18.   
    19.     public Vector getStudents() {  
    20.         return students;  
    21.     }  
    22.   
    23.     public void setStudents(Vector newStudents) {  
    24.         students = newStudents;  
    25.     }  
    26.     public Vector getTeachers() {  
    27.         return teachers;  
    28.     }  
    29.   
    30.     public void setTeachers(Vector newTeachers) {  
    31.         teachers = newTeachers;  
    32.     }  
    33.   
    34.     public String getName() {  
    35.         return name;  
    36.     }  
    37.   
    38.     public void setName(String newName) {  
    39.         name = newName;  
    40.     }  
    41. }  

    ============================================================
    2.學生 Student.java
    Java代碼 復制代碼
    1. public class Student {  
    2.     private Vector courses;  
    3.     private String name;  
    4.     private String division;  
    5.   
    6.     public Student() {  
    7.         courses = new Vector();  
    8.     }  
    9.   
    10.     public void addCourse(Course course) {  
    11.         courses.addElement(course);  
    12.     }  
    13.   
    14.     public String getName() {  
    15.         return name;  
    16.     }  
    17.     public void setName(String newName) {  
    18.         name = newName;  
    19.     }  
    20.   
    21.     public String getDivision() {  
    22.         return division;  
    23.     }  
    24.   
    25.     public void setDivision(String newDivision) {  
    26.         division = newDivision;  
    27.     }  
    28.   
    29.     public void setCourses(Vector courses) {  
    30.         this.courses = courses;  
    31.     }  
    32.   
    33.     public Vector getCourses() {  
    34.         return courses;  
    35.     }  
    36. }  

    ============================================================
    3.老師 Teacher.java
    Java代碼 復制代碼
    1. public class Teacher {  
    2.     private String name;  
    3.     private Vector certifications;  
    4.   
    5.     public Teacher() {  
    6.         certifications = new Vector();  
    7.     }  
    8.   
    9.     public void addCertification(String certification) {  
    10.         certifications.addElement(certification);  
    11.     }  
    12.   
    13.     public String getName() {  
    14.         return name;  
    15.     }  
    16.   
    17.     public void setName(String newName) {  
    18.         name = newName;  
    19.     }  
    20.   
    21.     public void setCertifications(Vector certifications) {  
    22.         this.certifications = certifications;  
    23.     }  
    24.   
    25.     public Vector getCertifications() {  
    26.         return certifications;  
    27.     }  
    28. }  

    ============================================================
    4.課程 Course.java
    Java代碼 復制代碼
    1. public class Course {  
    2.     private String id;  
    3.     private String name;  
    4.   
    5.     public Course() {  
    6.     }  
    7.   
    8.     public String getId() {  
    9.         return id;  
    10.     }  
    11.   
    12.     public void setId(String newId) {  
    13.         id = newId;  
    14.     }  
    15.     public String getName() {  
    16.         return name;  
    17.     }  
    18.   
    19.     public void setName(String newName) {  
    20.         name = newName;  
    21.     }  
    22. }  

    三.基礎XML文件
    ============================================================
    學院 academy.xml,包含了學生(包含了課程),老師
    Java代碼 復制代碼
    1. <?xml version="1.0"?>  
    2. <academy name="JAcademy" >  
    3.          <student name="JavaBoy" division="A">  
    4.                   <course>  
    5.                       <id>C1</id>  
    6.                       <name>JSP</name>  
    7.                   </course>  
    8.                   <course>  
    9.                       <id>C2</id>  
    10.                       <name>Servlets</name>  
    11.                   </course>  
    12.          </student>  
    13.          <student name="JavaGirl" division="B">  
    14.                   <course>  
    15.                       <id>C3</id>  
    16.                       <name>EJB</name>  
    17.                   </course>  
    18.          </student>  
    19.   
    20.          <teacher name="JavaGuru">  
    21.                   <certification>SCJP</certification>  
    22.                   <certification>SCWCD</certification>  
    23.          </teacher>  
    24.          <teacher name="JavaMaster">  
    25.                   <certification>OCP</certification>  
    26.                   <certification>SCJP</certification>  
    27.                   <certification>SCEA</certification>  
    28.          </teacher>  
    29. </academy>  

    ============================================================

    四.Digester Class
    DigestXMLJavaAcademy.java 和academyRules.xml
    其中academyRules.xml用來定義xml文件和java對象的匹配(映射)關系,格式要符合digester-rules.dtd格式約束
    DigestXMLJavaAcademy.java 根據academyRules.xml解析academy.xml文件并生成 Academy對象.
    ============================================================
    Java代碼 復制代碼
    1. 1. academyRules.xml  
    2. <?xml version="1.0"?>  
    3. <digester-rules>  
    4.   <pattern value="academy">  
    5.       <object-create-rule classname="com.commonsbook.chap7.academy.Academy" />  
    6.      <set-properties-rule />  
    7.      <pattern value="student">  
    8.          <object-create-rule classname="com.commonsbook.chap7.academy.Student" />  
    9.          <set-properties-rule />  
    10.   
    11.          <pattern value="course">  
    12.              <object-create-rule classname="com.commonsbook.chap7.academy.Course" />  
    13.              <bean-property-setter-rule pattern="id"/>  
    14.              <bean-property-setter-rule pattern="name"/>  
    15.              <set-next-rule methodname="addCourse" />  
    16.          </pattern>  
    17.          <set-next-rule methodname="addStudent" />  
    18.      </pattern>  
    19.   
    20.      <pattern value="teacher">  
    21.          <object-create-rule classname="com.commonsbook.chap7.academy.Teacher" />  
    22.          <set-properties-rule />  
    23.          <call-method-rule pattern="certification" methodname="addCertification"  
    24.              paramcount="1" />  
    25.          <call-param-rule pattern="certification" paramnumber="0"/>  
    26.          <set-next-rule methodname="addTeacher" />  
    27.      </pattern>  
    28.  </pattern>  
    29. </digester-rules>  

    ============================================================
    2. DigestXMLJavaAcademy.java
    Java代碼 復制代碼
    1. public class DigestXMLJavaAcademy {  
    2.     public void digest(){  
    3.         try {  
    4.             //Create Digester using rules defined in academyRules.xml  
    5.             Digester digester = DigesterLoader.createDigester(  
    6.                      this.getClass().getClassLoader().getResource("academyRules.xml"));  
    7.   
    8.             //Parse academy.xml using the Digester to get an instance of Academy  
    9.             Academy a = (Academy)digester.parse(  
    10.             this.getClass().getClassLoader().getResourceAsStream("academy.xml"));  
    11.   
    12.             Vector vStud=a.getStudents();  
    13.             Vector vTeach=a.getTeachers();  
    14.   
    15.             for (int i = 0; i < vStud.size(); i++) {  
    16.                 System.out.println("Student>> "+PropertyUtils.describe(vStud.get(i)));  
    17.             }  
    18.   
    19.             for (int i = 0; i < vTeach.size(); i++) {  
    20.                 System.out.println("Teacher>> "+ PropertyUtils.describe(vTeach.get(i)));  
    21.             }  
    22.          } catch(Exception e) {  
    23.              e.printStackTrace();  
    24.          }  
    25.     }  
    26.   
    27.     public static void main(String[] args) {  
    28.         DigestXMLJavaAcademy xmlDigest= new DigestXMLJavaAcademy();  
    29.         xmlDigest.digest();  
    30.     }  
    31. }  

    五.運行結果
    自己運行吧,呵呵

    六.后記
    寫下來還真得花點時間呢,不過這也是對自己以前思路的一個整理.
    寫出來與大家共同分享也是一種樂趣.呵呵.
    下次有時間寫一篇關于cglib的常用法.
    posted on 2008-09-24 09:59 seal 閱讀(515) 評論(0)  編輯  收藏 所屬分類: Strutsweb
    主站蜘蛛池模板: 人人爽人人爽人人片A免费| 国产区卡一卡二卡三乱码免费| 曰批免费视频播放免费| 亚洲欧洲国产综合| 国产亚洲一区二区手机在线观看| 国产高清视频在线免费观看| 18禁止看的免费污网站| 中文字幕乱理片免费完整的| 久久精品国产亚洲av品善| 99re视频精品全部免费| 国产亚洲福利一区二区免费看| 亚洲免费视频网址| 久久青青草原亚洲av无码app | 久久亚洲高清综合| 午夜电影免费观看| 两性刺激生活片免费视频| 亚洲一区二区在线免费观看| 999zyz**站免费毛片| 无码毛片一区二区三区视频免费播放| 亚洲国产成人综合精品| 久久精品国产亚洲一区二区| 免费a级毛片在线观看| 日本最新免费不卡二区在线| 好吊妞视频免费视频| 一二三四在线观看免费高清中文在线观看 | 亚洲五月综合缴情在线观看| 亚洲AV成人精品日韩一区18p| 永久在线毛片免费观看| 午夜免费福利网站| 日韩免费观看视频| 国产yw855.c免费视频| 日韩免费视频观看| 免费国产不卡午夜福在线| 免费一级毛片在级播放| 免费看一级做a爰片久久| 国产hs免费高清在线观看| 国产成人免费全部网站| 免费国产a国产片高清网站| 亚洲日本中文字幕天堂网| 国产精品亚洲产品一区二区三区| 亚洲熟女乱综合一区二区 |