บทความที่ได้รับความนิยม

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

JAXB : Java Architecture for XML Bindings

What is JAXB ?
     JAXB เป็น Library ของ Java ที่ใช่ให้เราสามารถเก็บข้อมูลของObject ในรูปของ File XML โดยสามารถ เปลี่ยนไปมาระหว่าง XML กับ Object ซึ่งมีประโยชน์อย่างมากงานการจัดเก็บข้อมูล
JAXB Architecture
The JAXB Binding Process
Unmarshalling & Marshalling
-Unmarshalling ทำให้ client application มีความสามารถในการแปลง XML ไปเป็น Java Object
-Marshalling ทำให้ client application มีความสามารถในการแปลง      Java Object  ไปยัง XML data
Schema-to-Java Mapping



ตาราง 17-1 การ mapping JAXB ระหว่างประเภทข้อมูลของ java กับ ของ XML Schema
Java-to-Schema  Mapping

ตาราง 17-2การ mapping JAXB ระหว่างประเภทข้อมูลของ ของ XML Schema  ไปยัง Java Classes
Customizing Generated Classes and Java Program Elements
-Schema -to-Java
     ทำให้สามารถปรับแต่ง JAXB class ได้เกินข้อจำกัดของที่กำหนดไว้ของ XML ใน XML
schema เพื่อรวมข้อกำหนดของ Java เช่น class และ การ mapping ชื่อ package

-Java -to- Schema
       คำอธิบาย JAXB (JAXB annotation) ที่กำหนดไว้ในแพ็กเกจ java.xml.bind.annotations สามารถใช้ปรับแต่ง Java program elements ถึง การ mapping XML schema
Customizing Generated Classes and Java Program Elements 

ตาราง 17-4 JAXB Annotations กับ Java Class
EX Binding JAXB (Marshalling)
1.เริ่มจากกำหนดไฟล์ XML Schema
        <xs:complexType name=“cat">    <xs:sequence>            
       <xs:element name=“cat_name" type="xs:string" minOccurs="0"/>            
       <xs:element name=“cat_id" type="xs:double" minOccurs="0"/>           
       <xs:element name=" cat_age " type="xs:int" minOccurs="0"/>        </xs:sequence>  </xs:complexType>
EX Binding JAXB (Marshalling) 
     ภายใน Main Program เราจะสร้าง Object ของclass Cat โดยใช้ Factorymethodclass เป็นหนึ่งใน  ที่ถูกสร้างขึ้นจาก XML Schema
      //สร้างobject cat
            Cat c =
new ObjectFactory().createCat();
      //
ใส่ค่าให้cat
           a.setcat_name(Integer.valueOf(1));
           a.setcat_name (String.valueOf(“I_mew"));
           a.setcat_id        (Double.valueOf(2));
           a.setcat_age    (int.valueOf(3));

ใน 
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(c, 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
}
output
     <?xml version="1.0" encoding="UTF-8"   standalone="yes"?>
      <ns2:Cat xmlns:ns2="http://webservice.ar/">
            <cat_name>I_mew</Area_Seq>
            <cat_id>2</Area_Name>
            <cat_age>3</Area_Lat>
      </ns2:area>

นำไฟล์
xml ที่Marshalling มาใช้
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
      <ns2:area xmlns:ns2="http://webservice.ar/">
             <cat_name>I_mew</Area_Seq>
            <cat_id>2</Area_Name>
            <cat_age>3</Area_Lat>
      </ns2:area>
//สร้าง cat จาก ObjectFactory
      Cat c =
new ObjectFactory().createArea();
ใน 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://Cat.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
}
ทำส่วนแสดงผลด้วย System.out.println

      System.out.println(“show cat”)
      System.out.println(“name : "+a.getcatname());
      System.out.println(“id : "+a.getcatid ());
      System.out.println(“age : "+a. age));

output
  show cat
       name :i_mew
       id : 2
       age : 3

JAXB


ข้อดี
-ช่วยให้เราสามารถเก็บค่าของObjectที่ต้องการรูปแบบของXML
-การเก็บข้อมูลในรูปแบบXML มีความยืดหยุ่นสูง
-สามรถ อ่านFile XMLแล้วแปลงข้อมูลภายในนั้นออกมาในรูปแบบObject
-รูปแบบข้อมูลที่อยู่ในรูปXML สามรถแปลงเป็นObjectได้ไม่ว่าObjectนั้นๆจะมีการเพิ่มหรือ
ลดProperties สามารถเก็บข้อมูลได้อย่างอิสระไม่จำกัดจำนวนField
-ต้องการความรู้หลายด้านในการใช้งานพอสมควร
-เราต้องสร้างClass ที่มีโครงสร้างเช่นเดียวกับโครงสร้างใน XMLFile เอง
ข้อเสีย
-ต้องการความรู้หลายด้านในการใช้งานพอสมควร
-เราต้องสร้าง Class ที่มีโครงสร้างเช่นเดียวกับโครงงานใน XML File เอง

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