มีผู้ชายที่นี่สาบานว่า JAXB เป็นสิ่งที่ดีที่สุดตั้งแต่ขนมปังหั่นบาง ๆ ฉันอยากรู้ว่าผู้ใช้ Stack Overflow คิดว่ากรณีการใช้งานมีไว้สำหรับ JAXB และอะไรทำให้เป็นทางออกที่ดีหรือไม่ดีสำหรับกรณีนั้น
มีผู้ชายที่นี่สาบานว่า JAXB เป็นสิ่งที่ดีที่สุดตั้งแต่ขนมปังหั่นบาง ๆ ฉันอยากรู้ว่าผู้ใช้ Stack Overflow คิดว่ากรณีการใช้งานมีไว้สำหรับ JAXB และอะไรทำให้เป็นทางออกที่ดีหรือไม่ดีสำหรับกรณีนั้น
คำตอบ:
ฉันเป็นแฟนตัวยงของ JAXB สำหรับการจัดการ XML โดยทั่วไปจะมีวิธีแก้ปัญหานี้ (ฉันสมมติว่าคุ้นเคยกับ XML โครงสร้างข้อมูล Java และ XML Schemas):
การทำงานกับ XML เป็นเรื่องยาก เราต้องการวิธีที่จะใช้ไฟล์ XML ซึ่งโดยพื้นฐานแล้วเป็นไฟล์ข้อความและแปลงเป็นโครงสร้างข้อมูลบางประเภทซึ่งโปรแกรมของคุณสามารถจัดการได้
JAXB จะใช้ XML Schema ที่คุณเขียนและสร้างชุดของคลาสที่สอดคล้องกับ schema นั้น ยูทิลิตี้ JAXB จะสร้างลำดับชั้นของโครงสร้างข้อมูลสำหรับจัดการ XML นั้น
จากนั้นสามารถใช้ JAXB เพื่ออ่านไฟล์ XML จากนั้นสร้างอินสแตนซ์ของคลาสที่สร้างขึ้น - รับข้อมูลจาก XML ของคุณ JAXB ยังทำการย้อนกลับ: รับคลาส java และสร้าง XML ที่สอดคล้องกัน
ฉันชอบ JAXB เพราะมันใช้งานง่ายและมาพร้อมกับ Java 1.6 (หากคุณใช้ 1.5 คุณสามารถดาวน์โหลด JAXB .jars ได้) วิธีที่สร้างลำดับชั้นของคลาสนั้นใช้งานง่ายและจากประสบการณ์ของฉันก็ทำได้ดี แยก "XML" ออกไปเพื่อที่ฉันจะได้มุ่งเน้นไปที่ "ข้อมูล"
เพื่อตอบคำถามของคุณ: ฉันคาดหวังว่าสำหรับไฟล์ XML ขนาดเล็ก JAXB อาจจะใช้งานมากเกินไป คุณต้องสร้างและดูแลสคีมา XML และใช้ "วิธีการตำรามาตรฐาน" ในการใช้คลาส Java สำหรับโครงสร้างข้อมูล (คลาสหลักคลาสภายในขนาดเล็กเพื่อแสดงถึง "โหนด" และลำดับชั้นขนาดใหญ่ของพวกเขา) ดังนั้น JAXB จึงไม่เหมาะสำหรับรายการ "ค่ากำหนด" เชิงเส้นแบบง่ายๆสำหรับแอปพลิเคชัน
แต่ถ้าคุณมีสคีมา XML ที่ค่อนข้างซับซ้อนและมีข้อมูลมากมายอยู่ภายในนั้น JAXB ก็ยอดเยี่ยมมาก ในโครงการของฉันฉันกำลังแปลงข้อมูลจำนวนมากระหว่างไบนารี (ซึ่งใช้โดยโปรแกรม C) และ XML (เพื่อให้มนุษย์สามารถใช้และแก้ไขข้อมูลนั้นได้) XML Schema ที่ได้นั้นไม่สำคัญ (หลายระดับของลำดับชั้นบางฟิลด์สามารถทำซ้ำได้บางฟิลด์ไม่สามารถทำซ้ำได้) ดังนั้น JAXB จึงมีประโยชน์ในการจัดการกับสิ่งนั้น
นี่คือเหตุผลที่จะไม่ใช้: ประสิทธิภาพไม่ดี มีค่าใช้จ่ายที่ดีเมื่อมีการจัดระเบียบและ unmarshaling คุณอาจต้องการพิจารณา API อื่นสำหรับการเชื่อม XML-Object เช่น JiBX: http://jibx.sourceforge.net/
มันคือ "ORM สำหรับ XML" ส่วนใหญ่มักใช้ร่วมกับ JAX-WS (และแน่นอนว่าการใช้งาน Sun ได้รับการพัฒนาร่วมกัน) สำหรับระบบ WS Death Star
ฉันใช้ JAXB ในที่ทำงานตลอดเวลาและฉันรักมันมาก เหมาะอย่างยิ่งสำหรับสกีมา XML ที่ซับซ้อนซึ่งมีการเปลี่ยนแปลงอยู่เสมอและเหมาะอย่างยิ่งสำหรับการเข้าถึงแท็กในไฟล์ XML โดยสุ่ม
ฉันเกลียดแมงดา แต่ฉันเพิ่งเริ่มบล็อกและนี่เป็นสิ่งแรกที่ฉันโพสต์เกี่ยวกับ!
ตรวจสอบได้ที่นี่:
http://arthur.gonigberg.com/2010/04/21/getting-started-with-jaxb/
ด้วย JAXB คุณสามารถสร้างการแสดง XML ของอ็อบเจ็กต์ (มาร์แชลลิ่ง) และการแทนอ็อบเจ็กต์ของ XML (unmarshalling) โดยอัตโนมัติ
เท่าที่เกี่ยวข้องกับ XML Schema คุณมีสองทางเลือก:
นอกจากนี้ยังมีไลบรารีการทำให้อนุกรม XML ที่ง่ายกว่าเช่นXStream , DigesterหรือXMLBeansที่อาจเป็นทางเลือกอื่น
JAXB ดีมากถ้าคุณต้องเขียนโค้ดตามข้อกำหนด XML ภายนอกที่กำหนดเป็น XML schema ( xsd
)
ตัวอย่างเช่นคุณมีแอปพลิเคชันการซื้อขายและคุณต้องรายงานการซื้อขายไปยังแอป Uber Lame Trade Reportingและแอปพลิเคชันเหล่านี้ให้คุณultra.xsd
ดำเนินการต่อไป ใช้$JAVA_HOME/bin/xjc
คอมไพเลอร์เพื่อเปลี่ยน XML เป็นคลาส Java จำนวนมาก (เช่นUltraTrade
)
จากนั้นคุณสามารถเขียนเลเยอร์อะแดปเตอร์ธรรมดา ๆเพื่อแปลงอ็อบเจกต์การค้าของคุณUltraTrades
และใช้JAXB
เพื่อรวบรวมข้อมูลไปยัง Ultra-Corp มากง่ายกว่าที่ยุ่งเกี่ยวกับการแปลงการซื้อขายของคุณลงในรูปแบบ XML ของพวกเขา
จุดที่ทุกอย่างพังทลายก็คือเมื่อ Ultra-Corp ไม่ได้ปฏิบัติตามสเป็คของตัวเองจริง ๆ และการซื้อขายprice
ที่พวกเขาทำลงไปxsd:float
ควรจะแสดงเป็นdouble
!
ทำไมเราถึงต้องการ JAXB? คอมโพเนนต์ระยะไกล (เขียนด้วย Java) ของเว็บเซอร์วิสใช้ XML เป็นค่าเฉลี่ยในการแลกเปลี่ยนข้อความระหว่างกัน ทำไมต้องเป็น XML เนื่องจาก XML ถือเป็นตัวเลือกที่มีน้ำหนักเบาในการแลกเปลี่ยนข้อความบนเครือข่ายที่มีทรัพยากร จำกัด บ่อยครั้งที่เราต้องแปลงเอกสาร XML เหล่านี้เป็นวัตถุและในทางกลับกัน เช่น: Simple Java POJO Employee สามารถใช้เพื่อส่งข้อมูลพนักงานไปยังส่วนประกอบระยะไกล (รวมถึงโปรแกรม Java)
class Employee{
String name;
String dept;
....
}
ควรแปลง Pojo นี้ (Marshall) เป็นเอกสาร XML ดังต่อไปนี้:
<Employee>
<Name>...</Name>
<Department>...</Department>
</Employee>
และที่ส่วนประกอบระยะไกลให้กลับไปที่วัตถุ Java จากเอกสาร XML (Un-Marshall)
JAXB คืออะไร?
JAXB เป็นไลบรารีหรือเครื่องมือในการดำเนินการ Marshalling และ UnMarshalling ช่วยให้คุณหายจากอาการปวดหัวนี้ได้ง่ายๆ
คุณสามารถตรวจสอบ JIBX ได้เช่นกัน นอกจากนี้ยังเป็นตัวประสานข้อมูล xml ที่ดีมากซึ่งมีความเชี่ยวชาญใน OTA (Open Travel Alliance) และได้รับการสนับสนุนโดยเซิร์ฟเวอร์ AXIS2 หากคุณกำลังมองหาประสิทธิภาพและความเข้ากันได้คุณสามารถตรวจสอบได้:
JAXB ให้ประสิทธิภาพที่ดีขึ้นผ่านการปรับแต่งการมาร์แชลเริ่มต้น JAXB กำหนด API ของโปรแกรมเมอร์สำหรับการอ่านและเขียนอ็อบเจ็กต์ Java ไปยังและจากเอกสาร XML ทำให้การอ่านและเขียน XML ง่ายขึ้นผ่าน Java