วันพฤหัสบดีที่ 8 กันยายน พ.ศ. 2554

การใช้งาน JAXB ใน NetBean ง่ายแค่ปลายนิ้ว

ก่อนอื่นสิ่งที่เราต้องมีคือ XML Schema หรือ WSDL ก็ได้ (ในตัวอย่างใช้ XML Schema)
อาจจะสงสัยนะครับว่า XML Schema คืออะไร ลองศึกษาได้จากลิงค์นี้เลยครับ

XML Schema ที่ใช้ในตัวอย่างครับ
โหลดได้จาก http://www.mediafire.com/?v4x2xneq9zjky3u

1. ทำการสร้าง Java Application ใน NetBean ขึ้นมา

2. คลิกที่เมนู File > New… เลือกที่ XML และ JAVA Binding ตามลำดับ คลิกที่ ปุ่ม Next
3. ตั้งชื่อการ Binding และ Browse ไฟล์ไปที่ XML Schema แล้วคลิกที่ปุ่ม Finish

4. ถ้าการสร้าง Binding สำเร็จ จะได้ไฟล์ที่ถูกสร้างจาก XML Schema ต่างๆ ดังภาพ

การสร้าง XML (Marshalling)
1. ใน Main Program เราจะสร้าง Object ของclass Area ซึ่งเป็นหนึ่งใน class ที่ถูกสร้างขึ้นจาก XML Schema โดยใช้ ObjectFactory

      //สร้าง Area จาก ObjectFactory
      Area a =
new ObjectFactory().createArea();
      //
ตั้งค่าให้ object Area ที่สร้างมา
      a.setAreaSeq(Integer.valueOf(1));
      a.setAreaName(String.valueOf("TestArea"));
      a.setAreaLat(Double.valueOf(133.123123));
      a.setAreaLng(Double.valueOf(133.123123));
2. ใน Main Program พิมพ์ jaxbm แล้วกดปุ่ม Tab บน Keyboard จะได้โค้ดโปรแกรมดังภาพ
try {
    javax.xml.bind.JAXBContext jaxbCtx =              javax.xml.bind.JAXBContext.newInstance
            (a.getClass().getPackage().getName());
    javax.xml.bind.Marshaller marshaller = jaxbCtx.createMarshaller();
    marshaller.setProperty
      (javax.xml.bind.Marshaller.JAXB_ENCODING,
"UTF-8"); //NOI18N
    marshaller.setProperty
      (javax.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
    marshaller.marshal(a, System.out);
} catch (javax.xml.bind.JAXBException ex) {
    // XXXTODO Handle exception
    java.util.logging.Logger.getLogger("global")
      .log(java.util.logging.Level.SEVERE,
null, ex); //NOI18N
}

3. ทดลอง Run โปรแกรม จะพบ Error ดังภาพ จะเกิดจาก JAXB ไม่พบ @XmlRootElement ใน class Area
4. ทำการแก้ Error โดยการใส่ Annotation @XmlRootElement() ใน class Area
5. ทำการ Run โปรแกรมอีกครั้ง จะได้ผลดังภาพ ซึ่งเป็น XML ที่ได้จาก class Area
6. ในกรณีที่อยากได้ผลลัพธ์เป็นไฟล์ XML เราจะเปลี่ยนโค้ดดังนี้

      marshaller.marshal(a, new FileOutputStream("ที่อยู่ของไลฟ์ XML ที่เราจะเขียน"));

การอ่าน XML (Unmarshalling)
1. สร้างไฟล์ XML ชื่อ Area เก็บไว้ใน C:\
      <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
      <ns2:area xmlns:ns2="http://webservice.ar/">
            <Area_Seq>1</Area_Seq>
            <Area_Name>เทคโนลาดกระบัง</Area_Name>
            <Area_Lat>133.123123</Area_Lat>
            <Area_Lng>100.123123</Area_Lng>
      </ns2:area>

2. ใน Main Program เราจะสร้าง Object ของclass Area ซึ่งเป็นหนึ่งใน class ที่ถูกสร้างขึ้นจาก XML Schema โดยใช้ ObjectFactory
      //สร้าง Area จาก ObjectFactory
      Area a =
new ObjectFactory().createArea();

3. ใน Main Program พิมพ์ jaxbu แล้วกดปุ่ม Tab บน Keyboard จะได้โค้ดโปรแกรมดังภาพ
try {
    javax.xml.bind.JAXBContext jaxbCtx =        javax.xml.bind.JAXBContext.newInstance
           
(a.getClass().getPackage().getName());
    javax.xml.bind.Unmarshaller unmarshaller =              jaxbCtx.createUnmarshaller();
    a = (Area) unmarshaller.unmarshal
      (
new java.io.File("C://Area.xml")); //NOI18N
} catch (javax.xml.bind.JAXBException ex) {
    // XXXTODO Handle exception
      java.util.logging.Logger.getLogger("global")
            .log(java.util.logging.Level.SEVERE,
null, ex); //NOI18N
}

4. แก้ไข "File path" ไปเป็น ที่อยู่ไฟล์ที่ต้องการ ในตัวอย่างคือ "C://Area.xml"
5. เพิ่มโค้ดในส่วนของการแสดงผลลัพธ์จากการอ่านไฟล์
      //แสดงผลการอ่านไฟล์ ออกทากหน้าจอ
      System.out.println("Area_Seq : "+a.getAreaSeq());
      System.out.println("Area_Name : "+a.getAreaName());
      System.out.println("Area_Lat : "+a.getAreaLat());
      System.out.println("Area_Lng : "+a.getAreaLng());


6. ทำการ Run Program จะได้ผลลัพธ์ดังภาพ

หวังว่าทุกคนคงจะใช้งาน JAXB ใน NetBean เป็นแล้วนะครับหลังจากได้ศึกษาจาก Blog นี้ ^^

1 ความคิดเห็น:

  1. สมาชิกในกลุ่มมีการเปลี่ยนแปลงเล็กน้อยนะครับ

    1. นางสาวกมลภัทร ปิติปัญญากุล 51050547
    2. นางสาวกัลยาณี ศรีกาญจน์ 51050553
    3. นายชลเดช นิธินันทน์ 51050578
    4. นายชาตการุณ สุขสำราญ 51050579
    5. นางสาวพรรณวดี ศรุติเกรียงไกร 5105062 *Dropวิชานี้ไปแล้วครับ

    6. นายณัฐกิตติ์ ศุภฤทธิ์ 51050584**
    7. นายอิทธิ เครือณรงค์กุล 51050691**
    **ทั้ง 2 คนย้ายมาจากกลุ่ม http://component584.blogspot.com/ ครับ

    ตอบลบ