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
-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>
//สร้างobject cat
Cat c = new ObjectFactory().createCat();
//ใส่ค่าให้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));
try {
javax.xml.bind.JAXBContext jaxbCtx = javax.xml.bind.JAXBContext.newInstance
(a.getClass().getPackage().getName());
(a.getClass().getPackage().getName());
javax.xml.bind.Marshaller marshaller = jaxbCtx.createMarshaller();
marshaller.setProperty
(javax.xml.bind.Marshaller.JAXB_ENCODING, "UTF-8"); //NOI18N
(javax.xml.bind.Marshaller.JAXB_ENCODING, "UTF-8"); //NOI18N
marshaller.setProperty
(javax.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
(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
.log(java.util.logging.Level.SEVERE, null, ex); //NOI18N
}
<?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 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();
Cat c = new ObjectFactory().createArea();
try {
ทำส่วนแสดงผลด้วย System.out.println
JAXB
-เราต้องสร้างClass ที่มีโครงสร้างเช่นเดียวกับโครงสร้างใน XMLFile เอง
ข้อเสีย
-ต้องการความรู้หลายด้านในการใช้งานพอสมควร
-เราต้องสร้าง Class ที่มีโครงสร้างเช่นเดียวกับโครงงานใน XML File เอง
javax.xml.bind.JAXBContext jaxbCtx = javax.xml.bind.JAXBContext.newInstance
(a.getClass().getPackage().getName());
(a.getClass().getPackage().getName());
javax.xml.bind.Unmarshaller unmarshaller = jaxbCtx.createUnmarshaller();
a = (Area) unmarshaller.unmarshal
(new java.io.File("C://Cat.xml")); //NOI18N
(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
.log(java.util.logging.Level.SEVERE, null, ex); //NOI18N
}
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
ข้อดี
-ช่วยให้เราสามารถเก็บค่าของObjectที่ต้องการรูปแบบของXML
-การเก็บข้อมูลในรูปแบบXML มีความยืดหยุ่นสูง
-สามรถ อ่านFile XMLแล้วแปลงข้อมูลภายในนั้นออกมาในรูปแบบObject
-รูปแบบข้อมูลที่อยู่ในรูปXML สามรถแปลงเป็นObjectได้ไม่ว่าObjectนั้นๆจะมีการเพิ่มหรือ
ลดProperties สามารถเก็บข้อมูลได้อย่างอิสระไม่จำกัดจำนวนField
-ต้องการความรู้หลายด้านในการใช้งานพอสมควร-เราต้องสร้างClass ที่มีโครงสร้างเช่นเดียวกับโครงสร้างใน XMLFile เอง
ข้อเสีย
-ต้องการความรู้หลายด้านในการใช้งานพอสมควร
-เราต้องสร้าง Class ที่มีโครงสร้างเช่นเดียวกับโครงงานใน XML File เอง
ตรวจแล้วครับ
ตอบลบ