วันพุธที่ 14 กันยายน พ.ศ. 2554

ตัวอย่างของ JAXB



JAXB Examples

ตัวอย่างของ JAXB สามารถแบ่งได้ออกเป็น 3 ส่วนคือ

- แบบอย่างแบบพื้นฐาน (Modify Marshal, Unmarshal Validate) แสดงให้เห็นถึงขั้นพื้นฐานแนวความคิด เช้า การไม่จัดสรร การจัดสรร และ การตรวจสอบเนื้อหา XML ที่ใช้การตั้งค่าเริ่มต้น และการ บายดิ้ง

- การปรับแต่งแบบอย่าง (Customize Inline, Datatype Converter, External Customize) แสดงให้เห็นถึงวิธีต่างๆ ของการปรับแต่ง XML ไปเป็น Java objects
- ตัวอย่าง Java-to-Schema แสดงให้เห็นวิธีการแมพ Java คลาส เป็น XML schema

ModifyMarshal Example

วิธีการปรับแต่ง

แบบอย่างแบบพื้นฐาน


Java content tree


1. The tut-install/javaeetutorial5/examples/jaxb/modify-marshal/src/modifymarshal/Main.java ประกาศ imports สาม standard Java classes รวมกับอีกสี่ JAXB binding framework classes และ primer.po package:

import java.io.FileInputStream;

import java.io.IOException;

import java.math.BigDecimal;

import javax.xml.bind.JAXBContext;

import javax.xml.bind.JAXBException;

import javax.xml.bind.Marshaller;

import javax.xml.bind.Unmarshaller;

import primer.po.*

2. สร้าง JAXBContext เพื่อควบคุมคลาสที่สร้างขึ้นใน primer.po

JAXBContext jc = JAXBContext.newInstance( "primer.po" );

3. Unmarshaller ถูกสร้างขึ้น และ po.xml คือ unmarshalled

Unmarshaller u = jc.createUnmarshaller();

PurchaseOrder po = (PurchaseOrder)u.unmarshal( new FileInputStream( "po.xml" ));

4. Methods set ถูกใช้เพื่อปรับแต่งข้อมูลใน address branch ของ content tree

USAddress address = po.getBillTo();

address.setName( "John Bob" );

address.setStreet( "242 Main Street" );

address.setCity( "Beverly Hills" );

address.setState( "CA" );

address.setZip( new BigDecimal( "90210" ));

5. สร้าง Marshaller และอัพเดต XML content คือ marshalled โดยใช้ system.out

setProperty API ใช้ระบุ output encoding โดยในตัวอย่างนี้ ใช้ XML format

Marshaller m = jc.createMarshaller();

m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);

m.marshal( po, System.out )

UnmarshalValidate Example

ตัวอย่างที่แสดงให้เห็นถึงการตรวจสอบ Unmarshal วิธีการเปิดการตรวจสอบระหว่าง Unmarshalling (JAXB จัดหาฟังค์ชั่นสำหรับตรวจสอบระหว่างการทำ Unmarshalling แต่ไม่ทำระหว่าง marshalling)

1. The tut-install/javaeetutorial5/examples/jaxb/unmarshal-validate/src/unmarshalvalidate/Main.java ประกาศ imports สำหรับสาม standard Java classes รวมกับเจ็ด JAXB binding framework classes และ the primer.po package:

import java.io.FileInputStream;

import java.io.IOException;

import java.math.BigDecimal;

import javax.xml.bind.JAXBContext;

import javax.xml.bind.JAXBException;

import javax.xml.bind.Marshaller;

import javax.xml.bind.UnmarshalException;

import javax.xml.bind.Unmarshaller;

import javax.xml.bind.ValidationEvent;

import javax.xml.bind.util.ValidationEventCollector;

import primer.po.*;

2. สร้าง JAXBContext สำหรับควบคุมการสร้างคลาสใน primer.po

JAXBContext jc = JAXBContext.newInstance( "primer.po" );

3. สร้าง Unmarshaller

Unmarshaller u = jc.createUnmarshaller();

4. Default ของ JAXB Unmarshaller ValidationEventHandler คือยอมให้ส่ง validation warnings และ errors โดย system.out. และ default configuration เป็นสาเหตุให้การทำ unmarshal ล้มเหลว เมื่อตรวจสอบความถูกต้องในครั้งแรก

u.setValidating( true );

5. ความพยายามที่จะทำ unmarshal po.xml เป็น Java content tree สำหรับตัวอย่างนี้ po.xml จะ deliberate error (ตั้งใจให้ error)

PurchaseOrder po = (PurchaseOrder)u.unmarshal(

new FileInputStream("po.xml"));

6. Default ของการตรวจสอบ event handler ทำการตรวจข้อผิดพลาด ด้วยการสร้างเอาท์พุต โดย system.out หลังจากนั้น exception จะถูก thrown

} catch( UnmarshalException ue ) {

System.out.println( "Caught UnmarshalException" );

} catch( JAXBException je ) {

je.printStackTrace();

} catch( IOException ioe ) {

ioe.printStackTrace();

}

การปรับแต่งแบบอย่าง

Inline Customizations

การปรับแต่งในส่วนของ binding JAXB จะถูกสร้างโดยการใช้ความหมายในส่วนของ binding declaration ในไฟล์ XML schema โดยการทำในส่วนของ และองค์ประกอบต่างๆจะถูกใส่อยู่ในส่วน schema

โดยฟอร์มทั่วๆไปของการปรับแต่งแบบ inline จะเป็นดังเช่นนี้




External Binding Customization Files


- ในส่วนของ schemaLocation เป็นการอ้างอิง URI ไปยัง schema ในระยะไกล

- Node เป็นในส่วนของ Xpath 1.0 โดยเป็นตัวระบุใน schema node ที่อยู่ภายใน schemaLocation ซึ่งจะมีการสร้างความสัมพันธ์เข้ากับการทำ binding declaration

ยกตัวอย่างเช่น ในส่วนของ schemaLocation และการประกาศ node ใน JAXB binding declaration file โดยจะมีระบุชื่อของ schema และตำแหน่งของ schema node จะได้เป็น

นอกจากนี้ถ้าในกรณีที่มีการพูดถึงองค์ประกอบที่มีชื่อเป็น ZipCodeType ก็จะได้เป็น

ตัวอย่าง Java-to-Schema

Java-to-Schema เป็นตัวอย่างของการแสดงวิธีการใช้ annotation(คำสั่ง)ต่างๆ เพื่อแปลงจาก Java classes ไปเป็นในรูปแบบของ XML

สำหรับ JDK 6 ทำตามลำดับเหล่านี้ก่อนที่จะรันตัวอย่างใดๆของ Java-to-Schema

1. เปลี่ยน directory ของ Java-to-Schema example เป็นที่เดียว ตัวอย่างเช่น

tut-install/javaeetutorial5/examples/jaxb/j2s-create-marshal

2. รันคำสั่งดังนี้

ant update-endorsed

คำสั่งนี้จะเป็นการสร้าง directory ที่ได้รับการอนุญาตใน JDK และ คัดลอด file webservice.api.jar จาก Application Server's lib/endorsed/ directory มาใน directory นี้

ตัวอย่างการสร้าง Marshal

ตัวอย่างนี้จะเป็นการอธิบายการทำ databinding ของ Java-to-Schema โดยจะแสดงให้เห็นถึงการทำ marshalling และ unmarshalling ของ JAXB annotated classes และยังแสดงว่าจะทำงาน JAXP 1.3 validation ในขณะunmarshalling time โดยใช้ไฟล์ schema ที่ถูกสร้างขึ้นจาก JAXB mapped classes ได้อย่างไร

ไฟล์ schema (bc.xsd) สามารถสร้างได้โดยคำสั่งต่อไปนี้

schemagen src/cardfile/*.java

cp schema1.xsd bc.xsd

** schema.xsd จะถูกคัดลอกเป็น bc.xsd เนื่องจาก schemagon ไม่อนุญาตให้เรากำหนดชื่อของ schema ได้ตามใจชอบ

ตัวอย่าง Java-to-Schema

การสร้างและ รันตัวอย่างการสร้าง Marshal โดยใช้ NetBeans IDE

สามารถทำตามขั้นตอนได้ดังนี้

1. ใน NetBeans IDE เลือก File->Open Project

2. ในหน้า Open Project ให้เราเลือก Directory ที่เก็บ example ไว้ ตัวอย่างเช่น

tut-install/javaeetutorial5/examples/jaxb/

3. เลือกโฟลเดอร์ j2s-create-marshal

4. เลือก Open as Main Project โดยคลิกในช่อง check box

5. เลือก Open Project

6. คลิกขวาที่ j2s-create-marshal ที่เราได้มาเลือก Run

การสร้างและ รันตัวอย่างการสร้าง Marshal โดยใช้ Ant

เพื่อที่จะ compile และ run ตัวอย่างการสร้าง Marshal โดยใช้ Ant บน terminal window ให้เราไปที่ directory tut-install/javaeetutorial5/examples/jaxb/ j2s-create-marshal/ และพิมพ์ดังนี้

ant runapp



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