2009-04-10 8 views
38

के साथ परिवर्तित करने का सबसे अच्छा तरीका क्या है, मैं सोच रहा था कि जावा ऑब्जेक्ट को एक्सएमएल में परिवर्तित करने के लिए सबसे अच्छा या सबसे व्यापक रूप से उपयोग किया जाने वाला एपिस क्या है। मैं इस विषय पर बिल्कुल नया हूं। क्या कोई प्रकार का एपीआई कॉल है जिसे आप ऑब्जेक्ट में पास करने और एक्सएमएल वापस करने के लिए कर सकते हैं? या क्या यह अधिक कठिन है जहां आपको ऑब्जेक्ट मान खींचकर दस्तावेज़ को मैन्युअल रूप से बनाने की आवश्यकता है?जावा ऑब्जेक्ट को एक्सएमएल में ओपन सोर्स एपीआई

मैं xerces, sax, और jaxb के बारे में पढ़ रहा हूं। मैं इस ओपन सोर्स रूट के साथ जारी रखना चाहता हूं।

धन्यवाद!

उत्तर

53

JAXB निश्चित रूप से समाधान है।

क्यों? खैर, यह जेडीके 6 के अंदर है, इसलिए आप इसे कभी भी अनजान नहीं पाएंगे।

यह कक्षाओं, विधियों और क्षेत्रों के लिए एक्सएमएल से संबंधित गुणों की घोषणा करने के लिए जावा एनोटेशन का उपयोग करता है।

Tutorial 1

Tutorial 2

नोट: JAXB भी आप आसानी से 'unmarshal' XML डेटा (जो कि पहले जावा वस्तु उदाहरणों से मार्शल किया गया था) वापस उदाहरणों आपत्ति उठाने के लिए सक्षम बनाता है। JAXB के बारे में

एक और बड़ी बात यह है: यह, अन्य जावा से संबंधित प्रौद्योगिकियों के द्वारा समर्थित है जैसे JAX-आरएस (एक जावा RESTful API, जो availible जावा का हिस्सा ई 6 के रूप में है)। जेएक्स-आरएस फ्लाई पर जेएक्सबी ऑब्जेक्ट्स पर सेवा और प्राप्त कर सकता है, बिना मार्शलिंग/अनारशेलिंग की आवश्यकता के। आप Netbeans को देखना चाहते हैं, जिसमें जेएक्स-आरएस के लिए आउट ऑफ़ द बॉक्स समर्थन शामिल है। शुरू करने के लिए this tutorial पढ़ें।

संपादित करें:

मार्शल/unmarshall 'यादृच्छिक' (या विदेशी) जावा वस्तुओं के लिए

, JAXB काफी सरल संभावना प्रदान करता है: एक और 'रैप' मौजूदा जावा वर्गों एक XmlAdapter घोषित होने के लिए कर सकते हैं JAXB संगत। ऐसे XmlAdapter का उपयोग @XmlJavaTypeAdapter -annotation का उपयोग कर किया जाता है।

+1

यह पैकेज "यादृच्छिक" जावा ऑब्जेक्ट्स के त्वरित और गंदे दृढ़ता के बजाय, जावा कोड में मौजूदा XML फ़ाइल मैपिंग के आसपास तैयार है। ... जो करने के लिए एक उपयोगी बात है, लेकिन मुझे लगता है कि काफी कुछ नहीं पूछा गया था। – Roboprog

+0

कृपया मेरे उत्तर का संपादन खंड देखें –

+1

जेएक्सबी बाध्यकारी है, क्रमबद्ध नहीं है। सरल serialization के लिए java.beans.XMLEncoder का प्रयोग करें। – erickson

18

आप Xstream को देखने के लिए चाहते हो सकता है: http://x-stream.github.io

+1

मैंने इसे एक्सएमएल के रूप में ऑब्जेक्ट्स लिखने/पढ़ने के लिए उपयोग किया है। यह काम करता है, और यह मुश्किल नहीं है। – Roboprog

+2

जांचें: http://bdoughan.blogspot.com/2010/10/how-does-jaxb-compare-to-xstream.html –

+1

@BlaiseDoughan उत्कृष्ट लेख। – James

1

XMLBeans जेएक्सबी के समान एक और है। मैंने थोड़ी देर में जेएक्सबी को नहीं देखा है, जब मैंने एक्सएमएलबीन की तुलना में काफी बुरा किया था, लेकिन वह साल पहले था (और मैं उन चीजों का उपयोग करना पसंद करता हूं जो जेडीके में तीसरे पक्ष के विरोध में हैं, लेकिन मैं अभी भी उपयोग करता हूं इस दिन XMLBeans)।

1

इस जगह में कई खुले स्रोत ढांचे हैं। हालांकि, Simple इसके नाम से पता चलता है, सीरियलाइजेशन करने का सबसे आसान तरीका है। Tutorial पर एक नज़र डालें। एक और विशेषता यह है कि यह पॉलिमॉर्फिक क्रमबद्धता कर सकता है, जिसका अर्थ है कि यह जेएक्सबी के रूप में बाध्य नहीं है।

4

जावा 6 के साथ उपलब्ध एनोटेटेड जावा ऑब्जेक्ट्स को एक्सएमएल में कनवर्ट करने के लिए एक एपीआई है। निम्नलिखित कोड दिखाता है कि कैसे एक XML स्ट्रिंग

final JAXBElement<Type> o = new ObjectFactory().createElement(new Type()); 

final Marshaller m = JAXBContext.newInstance(Type.class).createMarshaller(); 

// Do this if you want the result to be more human readable. 
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
m.marshal(o, System.out);

आप आगे स्कीमा मान्यता जोड़कर इस विस्तार कर सकते हैं करने के लिए एक एनोटेट वस्तु कन्वर्ट करने के लिए (बहुत धीमी गति से ध्यान दें, लेकिन डिबगिंग के लिए उपयोगी)

final JAXBElement<Type> o = new ObjectFactory().createElement(new Type()); 

final Marshaller m = JAXBContext.newInstance(Type.class).createMarshaller(); 
final Schema schema = SchemaFactory.newInstance(
    "http://www.w3.org/2001/XMLSchema").newSchema(
    getClass().getResource("/META-INF/wsdl/schema.xsd")); 
m.setSchema(schema); 
m.marshal(o, System.out);

आप डॉन ' यदि टाइप एक परिभाषित तत्व है तो JAXBElement में एक प्रकार का रूपांतरण करने की आवश्यकता नहीं है। (यानी एक एनोटेशन @XmlRootElement है)

3

जेएक्सबी का उपयोग करने का निर्णय लेने वाले किसी भी व्यक्ति के लिए, कृपया JAXBContext को कैश करना सुनिश्चित करें। JAXBContext.newInstance बहुत महंगा माना जाता है। मैंने एक ऐसे मामले को दस्तावेज किया जहां एक्सएमएल में रूपांतरण लॉगिंग में उपयोग किया जाता है और JAXBContext.newInstance कैश नहीं किया जाता है, इसने 20 समवर्ती उपयोगकर्ताओं द्वारा आमंत्रित किए जाने पर 5 सेकेंड तक प्रदर्शन ओवरहेड का कारण बनता है।

http://app-inf.blogspot.com/2012/10/performance-tuning-logging-right-way.html

यह किसी JAXB का उपयोग कर हतोत्साहित करने के लिए नहीं है। एक बार JAXBContext कैश किया गया है, तो प्रदर्शन उत्कृष्ट है, जैसा ऊपर दिए गए लिंक में चर्चा की गई है।

संबंधित मुद्दे