o/xmapper คืออะไร?
คุณสมบัติใหม่ของ Spring 3.0 คือ O/Xmapper แนวคิดของ O/X Mapper ไม่ใช่เรื่องใหม่ o หมายถึงวัตถุและ x หมายถึง XML จุดประสงค์ของมันคือการแปลงไปมาระหว่างวัตถุ Java (เกือบทุกครั้งเป็นเอกสารที่มีความยาว JavaObject หรือย่อเป็นเอกสาร POJO) และเอกสาร XML
ตัวอย่างเช่นคุณอาจมีถั่วง่าย ๆ ที่มีคุณลักษณะหลายอย่างและธุรกิจของคุณจำเป็นต้องแปลงวัตถุ Java นั้นให้เป็นเอกสาร XML O/Xmapper ของ Spring สามารถแก้ปัญหานั้นให้คุณได้ หากในทางกลับกันคุณจะต้องแปลงเอกสาร XML เป็น Javabean ง่าย ๆ O/XMapper ของฤดูใบไม้ผลิก็มีความสามารถเช่นกัน
สิ่งหนึ่งที่ควรทราบ: Springo/Xmapper เป็นเพียงอินเทอร์เฟซแบบครบวงจรที่นำมาใช้โดยเฟรมเวิร์กของบุคคลที่สามยอดนิยม ในการใช้ประโยชน์จากฟังก์ชั่น O/X ของฤดูใบไม้ผลิคุณต้องใช้ยูทิลิตี้ที่แปลงกลับไปกลับมาระหว่างวัตถุ Java และ XML Castor เป็นเครื่องมือของบุคคลที่สามยอดนิยมและบทความนี้จะใช้เครื่องมือนี้ เครื่องมืออื่น ๆ ได้แก่ XMLBEANS, Java Architecture สำหรับ XMLBINDING (JAXB), JIBX และ XStream
มาร์แชลและสหภาพ
เมื่อทำการแมป O/X คุณมักจะเห็นคำศัพท์ที่เป็นมาร์แชลและ unmarshalling
Marshalling หมายถึงกระบวนการแปลง javabean เป็นเอกสาร XML ซึ่งหมายความว่าฟิลด์และค่าฟิลด์ทั้งหมดของ javabean จะถูกเติมลงในไฟล์ XML เป็นองค์ประกอบ XML หรือคุณลักษณะ บางครั้งมาร์แชลล์ก็เรียกว่าการทำให้เป็นอนุกรม
อย่างที่คุณคาดหวังการ unmarshalling เป็นกระบวนการที่ตรงกันข้ามของ Marshalling ซึ่งคือการแปลงเอกสาร XML เป็น Javabean ซึ่งหมายความว่าองค์ประกอบหรือคุณลักษณะทั้งหมดของเอกสาร XML จะถูกเติมเข้าไปใน Javabean เป็นเขตชวา บางครั้ง unmarshalling เรียกอีกอย่างว่า deserializing
ประโยชน์ของการใช้ O/XMapper ของ Spring
หนึ่งในประโยชน์โดยตรงที่สุดของการใช้ O/Xmapper ของ Spring คือการกำหนดค่าสามารถทำให้ง่ายขึ้นโดยใช้ประโยชน์จากคุณสมบัติอื่น ๆ ของกรอบสปริง ห้องสมุดถั่วของสปริงรองรับการใช้วัตถุที่ใช้การฉีด O/X Marshaller แบบอินสแตนซ์ (เช่น "การฉีดพึ่งพา" ที่กล่าวถึงก่อนหน้านี้) ย้ำว่าสิ่งนี้จะเพิ่มความเร็วในการพัฒนาแอปพลิเคชันและการปรับใช้
ตามแนวทางการออกแบบเชิงวัตถุที่เป็นของแข็งเฟรมเวิร์ก Springo/X กำหนดเพียงสองอินเตอร์เฟส: Marshaller และ Unmarshaller ซึ่งใช้ในการทำฟังก์ชั่น O/X ซึ่งเป็นประโยชน์สำคัญอีกประการหนึ่งของการใช้เฟรมเวิร์กนี้ การใช้งานอินเทอร์เฟซเหล่านี้เปิดให้นักพัฒนาอิสระอย่างสมบูรณ์และนักพัฒนาสามารถสลับได้อย่างง่ายดายโดยไม่ต้องแก้ไขรหัส ตัวอย่างเช่นหากคุณเริ่มต้นด้วย Castor สำหรับการแปลง O/X แต่จากนั้นพบว่ามันไม่มีฟังก์ชั่นบางอย่างที่คุณต้องการ ณ จุดนี้คุณสามารถเปลี่ยนเป็น Xmlbeans โดยไม่ต้องเปลี่ยนรหัสใด ๆ สิ่งเดียวที่คุณต้องทำคือเปลี่ยนไฟล์การกำหนดค่าสปริงเพื่อใช้เฟรมเวิร์ก O/X ใหม่
ประโยชน์อีกประการหนึ่งของการใช้ O/XMAPPER ของ Spring คือลำดับชั้นข้อยกเว้นแบบครบวงจร เฟรมเวิร์กสปริงเป็นไปตามรูปแบบที่กำหนดโดยใช้โมดูลการเข้าถึงข้อมูลโดยการห่อวัตถุข้อยกเว้นดั้งเดิมลงในข้อยกเว้นรันไทม์ที่สร้างขึ้นโดยสปริงตัวเองสำหรับ O/XMapper เนื่องจากข้อยกเว้นดั้งเดิมที่ถูกส่งโดยผู้ให้บริการบุคคลที่สามถูกห่อหุ้มด้วยข้อยกเว้นของสปริงรันไทม์คุณสามารถค้นหาสาเหตุของข้อยกเว้นได้ คุณไม่ต้องกังวลกับการแก้ไขรหัสเพื่อรับข้อยกเว้นเนื่องจากข้อยกเว้นถูกห่อเป็นข้อยกเว้นรันไทม์ ข้อยกเว้นรันไทม์ต่อไปนี้ขยายข้อยกเว้นพื้นฐาน XMLMAppingException: GenericMarshallingFailureexception, ValidationFailureexception, MarshallingFailureexception และ UnmarshallingFailureexception
เริ่มต้นกับครับ
รายการกำหนดค่า:
ไฟล์กำหนดค่า ApplicationContext.xmlspring
<ถั่ว xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance http://www.springframework.org/schema/beans/spring-beans-3.0.xsd "> <bean id =" oxmdemo "> <ชื่อทรัพย์สิน =" Marshaller "ref =" Castormarshaller "/> แพ็คเกจ: Castor-1.3.2--core.jar, Castor-1.3.2-xml.jar-> <bean id = "castormarshaller"> <property name = "MappingLocation" value = "classpath: mapping.xml"/> </epean>
เมื่อ Marshalling และ Undrouping รูปแบบการทำแผนที่ที่ใช้จะต้องใช้เพื่อประสบความสำเร็จเมื่อไม่จัดกลุ่ม (มีคำถามที่นี่ฉันไม่ทราบว่ามันสามารถจัดรูปแบบผ่านการแมปเพื่อยกเลิกการจัดกลุ่มเนื่องจากปัญหาการเขียนของฉันเอง
mapping.xml ไฟล์
<mapping> <class name = "com.mdf.springoxm.customer"> <map-to xml = "ลูกค้า"/> <field name = "flag" type = "boolean"> <bind-xml name = "flag" node = "element"/> </field> name = "sex" type = "string"> <bind-xml name = "sex" node = "element"/> </field> </class> </mapping>
ปรับแต่งไฟล์ถั่ว
customer.java
แพ็คเกจ com.mdf.springoxm; ลูกค้าระดับสาธารณะ {ชื่อสตริงส่วนตัว; สตริงส่วนตัวเพศ; ธงบูลีนส่วนตัว; สตริงสาธารณะ getName () {ชื่อคืน;} โมฆะสาธารณะ setname (ชื่อสตริง) {this.name = name;} public String getsex () {return sex;} public Void setsex Flag;} โมฆะสาธารณะ setFlag (ธงบูลีน) {this.flag = flag;}}ไฟล์ xmldemo.java
แพ็คเกจ com.mdf.springoxm; นำเข้า java.io.fileinputstream; นำเข้า java.io.fileoutputstream; นำเข้า Java.io.ioException; นำเข้า Javax.xml.transform.stream.streamResult; นำเข้า Javax.xml.Transform.stream.streamsource; org.springframework.oxm.unmarshaller; Oxmdemo ชั้นเรียนสาธารณะ {ส่วนตัว Marshaller Marshaller; Private Unmarshaller Unmarshaller, Public Marshaller Getmarshaller () {Return Marshaller;} Public Void Setmarshaller (Marshaller Marshaller) {return unmarshaller;} โมฆะสาธารณะ setunmarshaller (unmarshaller unmarshaller) {this.unmarshaller = unmarshaller;} โมฆะสาธารณะ convertFromoBjectToxml (วัตถุวัตถุ fileOutputStream (filePath); getMarshaller (). marshal (วัตถุ, streamresult ใหม่ (os));} ในที่สุด {ถ้า (os! = null) {os.close ();}}} วัตถุสาธารณะ convertfromxmltoObject (สตริง xmlfile) FileInputStream (xmlfile); return getUnmarshal (). unmarshal (streamsource ใหม่ (is));} ในที่สุด {ถ้า (คือ! = null) {is.close ();}}}}}}ทดสอบ
นำเข้า org.springframework.context.applicationContext; นำเข้า org.springframework.context.support.classpathxmlapplicationcontext; นำเข้า com.mdf.springoxm.customer; นำเข้า com.mdf.springoxm.oxmdemo; "customer.xml"; โมฆะคงที่สาธารณะหลัก (สตริง [] args) พ่น ioexception {applicationcontext appcontext = ใหม่ classpathxmlapplicationcontext ("applicationcontext.xml"); oxmdemo converter = (oxmdemo) appcontext.getBean ลูกค้า (); customer.setName ("yiibai"); customer.setflag (จริง); customer.setsex ("haikou haidiandao"); system.out.println ("แปลงวัตถุเป็น xml!"); // จากวัตถุไปยังไฟล์ XML /n");system.out.println("Convert xml กลับไปที่วัตถุ! "); // จาก xml ไปยังลูกค้าลูกค้าลูกค้า 2 = (ลูกค้า) converter.convertfromxmltoobject (xml_file_name); system.out.printlnผลการทดสอบ:
11 พฤษภาคม 2016 2:27:52 PM org.springframework.context.support.classpathxmlapplicationContext ข้อมูลการเตรียมความพร้อม: สดชื่น org.springframework.context.support.classpathxmlapplicationcontext@1221be2 รูทของลำดับชั้นบริบท 11 พฤษภาคม 2016 2:27:52 PM org.springframework.beans.factory.xml.xmlbeanDefinitionReader LoadBeanDefinitions: การโหลดคำจำกัดความ XML จากทรัพยากรพา ธ คลาส [ApplicationContext.xml org.springframework.oxm.castor.castormarshaller InfortPropertiesset ข้อมูล: กำหนดค่าโดยใช้ [คลาสพา ธ คลาส [mapping.xml]] แปลงวัตถุเป็น XML! เสร็จสิ้นการแปลง XML กลับเป็น Object! com.mdf.springoxm.customer@b419da ทำเสร็จแล้ว
สรุป
ข้างต้นเป็นเรื่องเกี่ยวกับตัวอย่างรายการ OXM ของฤดูใบไม้ผลิในบทความนี้ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงหัวข้ออื่น ๆ ที่เกี่ยวข้องในเว็บไซต์นี้ต่อไป หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!