JAXB Architecture
ส่วนประกอบและการทำงานต่างๆในการประมวลผลJAXB Mode
- Schema compiler : ทำหน้าที่ ผูกระหว่างsource schema กับ set ของ schema-derived program elements ซึ่งการผูกนี้จะถูกเขียนด้วยภาษา XML-based binding language
- Schema generator : จะจับคู่ระหว่างกลุ่มของโปรแกรมelement ที่มีอยู่แล้ว ไปยัง derived schema ซึ่งส่วนmappingนี้จะถูกเขียนด้วย program annotations
- Binding runtime framework : ทำให้เราสามารถ unmarshalling (reading) กับ marshalling (writing)เพื่อเข้าถึงข้อมูล XML โดยใช้ทั้ง schema-derived หรือ program elementsที่มีอยู่แล้ว
ขั้นตอนการทำ Binding ของ JAXB data
- Generate class: (สร้างclass) xml schema จะใช้เป็น input ให้กับ JAXB binding compiler เพื่อสร้าง JAXB class ที่มีพื้นฐานมาจาก schema นั้น
- Compile classes: ทุกclassที่ถูก generate(สร้าง)ขึ้นมา จะต้องถูกcompileในขั้นตอนนี้
- Unmarshal: เอกสารxml ที่ถูกเขียนโดยมีข้อจำกัดตามแหล่งschemaนั้นๆ จะถูกunmarshalโดย JAXB binding framework JAXB ยังรองรับการ unmarshall จากแหล่งข้อมูลxmlอื่นๆนอกจากเอกสารและdocument เช่น DOMnodes, string buffers,SAX Sources, and so forth
- Generate content tree: ขั้นตอนในการ unmarshal จะสร้าง content tree ของ data object โดย instantiatedจาก JAXB classesที่ถูกสร้างขึ้นมา content tree นี้เป็นตัวแทนของโครงสร้างเนื้อหาจากxml ต้นฉบับ
- Validate (optional): ขั้นตอนการ unmarshal ก่อนที่จะสร้างcontent treeอาจจะ validate ก่อนก็ได้ ถ้าคุณแก้ไข content tree ในขั้นตอนที่6ข้างล่างนี้ คุณจะสามารถใช้ คำสั่ง validate JAXB ก่อนที่จะ marshal ข้อมูลกลับไปเป็น XMLได้ด้วย
- Process content: client application จะสามารถแก้ไขข้อมูลXMLที่ถูกนำเสนอโดย Java content tree ผ่านinterface ที่สร้างโดย binding compiler ได้
- Marshal: content tree ที่ประมวลผลแล้ว จะถูกmarshalลงเป็นXML output 1อัน หรือมากกว่านั้น และ content นี้จะถูก validate ก่อน marshal
- Unmarshalling : การ Unmarshalling ทำให้ application clientสามารถเปลี่ยนข้อมูลxml ไปเป็น JAXB-derived Java objectsได้ (java objectที่ถูกแปลงมา)
- Marshalling : การ Marshalling ทำให้application clientแปลงจากJAXB(java object ที่ถูกแปลงมา)ไปเป็นข้อมูลXMLโดยปกติแล้วMarshallerจะใช้การเข้ารหัสแบบUTF8ตอนที่สร้างข้อมูลXML
- Client appไม่จำเป็นต้อง Validate java content tree ก่อนที่จะmarshal จาวา ไม่จำเป็นต้อง valid เมื่อมันถูกแปลงกลับไปเป็น XML
- Validation : ขั้นตอนการ validation คือขั้นตอนในการตรวจสอบว่าข้อมูล XML ที่นำมาใช้นั้น ตรงตามข้อจำกัดที่ถูกกำหนดไว้ใน schema หรือไม่
- JAXB 1.0 นั้นจะ validation ขณะกำลัง unmarshal และสามารถเปิดใช้ได้ตามต้องการเมื่อต้องการจะ validaition JAXB content tree
- JAXB 2.0 จะอนุญาตเฉพาะการ validation ขณะ unmarshal หรือ marshal เท่านั้น
- โมเดล web service นั้นจะพิถีพิถันในเรื่องการอ่านและเขียน เพื่อให้ตรงตามโมเดล Validation จะถูกทำขณะ marshal เพื่อที่จะยืนยันได้ว่า XML นั้นผ่านเงื่อนไขจริงๆเมื่อกำลังแปลงมันไปเป็นรูป JAXB
Default DataType Binding
ในส่วนนี้จะอธิบายถึง schemaไปเป็นJAVA, JAXBElement, และJAVA ไปเป็นschema
- Schema-to-Java Mapping
XML SchemaType | Java DataType |
xsd:string | java.lang.String |
xsd:integer | java.math.BigInteger |
xsd:int | int |
xsd:double | double |
xsd:QName | javax.xml.namespace.QName |
xsd:dateTime | javax.xml.datatype.XMLGregorianCalendar |
xsd:unsignedInt | long |
xsd:time | javax.xml.datatype.XMLGregorianCalendar |
xsd:anySimpleType | java.lang.Object |
xsd:NOTATION | javax.xml.namespace.QName |
- Java-to-Schema Mapping
Java Class | XML DataType |
java.lang.String | xs:string |
java.math.BigInteger | xs:integer |
java.util.Calendar | xs:dateTime |
java.net.URI | xs:string |
javax.xml.datatype.XMLGregorianCalendar | xs:anySimpleType |
java.lang.Object | xs:anyType |
java.awt.Image | xs:base64Binary |
java.util.UUID | xs:string |
Customizing Generated Classes and Java Program Elements
การปรับแต่งclass และ Java Program Element
การปรับแต่งclass และ Java Program Element
Schema-to-Java
การปรับแต่งการประกาศJAXB Binding อนุญาตให้มีการปรับแต่งการสร้าง Class JAXB ขึ้นกับ ข้อจำกัดเฉพาะของXML ในXML Schema เพื่อรวมเข้าJava-specific refinements เช่น class และชื่อของ package mapping
- อธิบายถึง source ของ XML Schema
- การประกาศ การปรับแต่งข้อมูลbinding ข้างนอก ถูกส่งผ่านไปยัง JAXB Binding compiler
คำอธิบายของJAXB กำหนดใน packageของ javax.xml.bind.annotations สามารถใช้การปรับแต่ง Java program element ไปเป็น XML schema mapping
- ตัวอย่าง JAXB Annotations ที่ใช้กับ Java Package
Annotaion | Description and Default Setting |
@XmlSchema | Maps a package to an XML target namespace.Default Settings: @XmlSchema ( xmlns = {}, namespace = "", elementFormDefault = XmlNsForm.UNSET, attributeFormDefault = XmlNsForm.UNSET ) |
@XmlAccessorType | Controls default serialization of fields and properties.Default Settings: @XmlAccessorType ( value = AccessType.PUBLIC_MEMBER ) |
@XmlAccessorOrder | Controls the default ordering of properties and fields mapped to XML elements. Default Settings: @XmlAccessorOrder ( value = AccessorOrder.UNDEFINED ) |
@XmlSchemaType | Allows a customized mapping to an XML Schema built-in type.Default Settings: @XmlSchemaType ( namespace = "http://www.w3.org/2001/XMLSchema", type = DEFAULT.class ) |
@XmlType | Maps a Java class to a schema type.Default Settings: @XmlType ( name = "##default", propOrder = {""}, namespace = "##default", factoryClass = DEFAULT.class, factoryMethod = "" ) |
@XmlRootElement | Associates a global element with the schema type to which the class is mapped.Default Settings: @XmlRootElement ( name = "##default", namespace = "##default" ) |
- ตัวอย่าง JAXB Annotations ที่ใช้กับ Java enum Type
Annotaion | Description and Default Setting |
@XmlEnum | Maps a Java type to an XML simple type.Default Settings: @XmlEnum ( value = String.class ) |
@XmlEnumValue | Maps a Java type to an XML simple type.Default Settings: None |
@XmlType | Maps a Java class to a schema type.Default Settings: @XmlType ( name = "##default", propOrder = {""}, namespace = "##default", factoryClass = DEFAULT.class, factoryMethod = "" ) |
@XmlRootElement | Associates a global element with the schema type to which the class is mapped.Default Settings: @XmlRootElement ( name = "##default", namespace = "##default" ) |
นอกจากที่ยกตัวอย่างมา ยังมี JAXB Annotations ที่สามารถใช้ได้กับ Java Properties and Fields, Object Factories และ Adapters ได้อีกด้วย ดูเพิ่มเติมได้ที่ http://download.oracle.com/javaee/5/tutorial/doc/bnazy.html
ตรวจแล้วครับ
ตอบลบขอบคุณมากค่ะ อ่านแล้วเข้าใจง่ายดีค่ะ พออ่านจบ อ้าว ของอาจารย์ศรัณย์นี่เอง นู๋ก็จบ com-sci kmitl รุ่น 11 อาจารย์คงจำไม่ได้หรอก 55 จบมาทำงานรู้เรยว่า ทำไมไม่ตั้งใจเรียนให้มากกว่านี้น้ออ ^^"
ตอบลบ