यहाँ लड़का है कि कसम खाने के बाद JAXB सबसे बड़ी बात है। मैं यह देखने के लिए उत्सुक हूं कि स्टैक ओवरफ्लो उपयोगकर्ताओं को क्या लगता है कि उपयोग मामला JAXB के लिए है और यह उस मामले के लिए एक अच्छा या बुरा समाधान बनाता है।
यहाँ लड़का है कि कसम खाने के बाद JAXB सबसे बड़ी बात है। मैं यह देखने के लिए उत्सुक हूं कि स्टैक ओवरफ्लो उपयोगकर्ताओं को क्या लगता है कि उपयोग मामला JAXB के लिए है और यह उस मामले के लिए एक अच्छा या बुरा समाधान बनाता है।
जवाबों:
मैं XML में हेरफेर करने के लिए JAXB का बहुत बड़ा प्रशंसक हूं। मूल रूप से, यह इस समस्या का समाधान प्रदान करता है (मैं XML, जावा डेटा संरचनाओं और XML स्कीमा के साथ परिचितता मान रहा हूं):
एक्सएमएल के साथ काम करना मुश्किल है। XML फ़ाइल को लेने के लिए एक तरीके की आवश्यकता होती है - जो मूल रूप से एक पाठ फ़ाइल है - और इसे किसी प्रकार की डेटा संरचना में परिवर्तित करें, जिसे बाद में आपका प्रोग्राम हेरफेर कर सकता है।
JAXB एक XML स्कीमा लेगा जो आप लिखते हैं और उस स्कीमा के अनुरूप कक्षाओं का एक सेट बनाते हैं। JAXB उपयोगिताओं कि XML को हेरफेर करने के लिए डेटा संरचनाओं का पदानुक्रम बनाएगा।
तब JAXB का उपयोग XML फ़ाइल को पढ़ने के लिए किया जा सकता है, और फिर उत्पन्न वर्गों के उदाहरण बना सकते हैं - अपने XML से डेटा से लैस। JAXB रिवर्स भी करता है: जावा कक्षाएं लेता है, और संबंधित XML उत्पन्न करता है।
मुझे JAXB पसंद है क्योंकि यह उपयोग करना आसान है, और जावा 1.6 के साथ आता है (यदि आप 1.5 का उपयोग कर रहे हैं, तो आप JAXB .jars डाउनलोड कर सकते हैं।) जिस तरह से यह वर्ग पदानुक्रम बनाता है वह सहज है, और मेरे अनुभव में, एक सभ्य काम करता है। "XML" को दूर करना ताकि मैं "डेटा" पर ध्यान केंद्रित कर सकूं।
तो आपके प्रश्न का उत्तर देने के लिए: मुझे उम्मीद है कि, छोटी XML फ़ाइलों के लिए, JAXB ओवरकिल हो सकता है। यह आपको XML स्कीमा बनाने और बनाए रखने की आवश्यकता है, और डेटा संरचनाओं के लिए जावा कक्षाओं के उपयोग की "मानक पाठ्यपुस्तक विधियों" का उपयोग करने के लिए। (मुख्य कक्षाएं, छोटे आंतरिक-वर्ग "नोड्स" का प्रतिनिधित्व करने के लिए, और उनमें से एक विशाल पदानुक्रम।) तो, JAXB शायद एक आवेदन के लिए "वरीयताओं" की एक सरल रैखिक सूची के लिए महान नहीं है।
लेकिन अगर आपके पास एक जटिल XML स्कीमा है, और इसके भीतर बहुत सारा डेटा निहित है, तो JAXB शानदार है। मेरी परियोजना में, मैं बाइनरी (जो एक सी प्रोग्राम द्वारा खपत की गई थी) और एक्सएमएल के बीच बड़ी मात्रा में डेटा परिवर्तित कर रहा था (ताकि मानव उस डेटा का उपभोग और संशोधित कर सके)। परिणामी XML स्कीमा अनौपचारिक थी (पदानुक्रम के कई स्तर, कुछ क्षेत्रों को दोहराया जा सकता था, अन्य नहीं कर सकते थे) इसलिए JAXB इसमें हेरफेर करने में सक्षम था।
यहां इसका उपयोग न करने का एक कारण है: प्रदर्शन में गिरावट। ओवरहेडिंग और अनारकली होने पर ओवरहेड का एक अच्छा सौदा है। आप XML-Object बाइंडिंग के लिए एक और एपीआई पर भी विचार कर सकते हैं - जैसे कि JiBX: http://jibx.sourceforge.net/
यह "XML के लिए ORM" है। डब्ल्यूएस डेथ स्टार सिस्टम के लिए अक्सर JAX-WS (और वास्तव में सूर्य कार्यान्वयन एक साथ विकसित होते हैं) के साथ उपयोग किया जाता है।
मैं हर समय काम में JAXB का उपयोग करता हूं और मैं वास्तव में इसे प्यार करता हूं। यह जटिल XML स्कीमा के लिए एकदम सही है जो हमेशा बदलते रहते हैं और विशेष रूप से XML फ़ाइल में टैग की यादृच्छिक पहुँच के लिए अच्छे होते हैं।
मुझे दलाल से नफरत है लेकिन मैंने अभी एक ब्लॉग शुरू किया है और यह सचमुच पहली चीज है जिसके बारे में मैंने पोस्ट किया है!
यहां इसकी जांच कीजिए:
http://arthur.gonigberg.com/2010/04/21/getting-started-with-jaxb/
JAXB के साथ आप स्वचालित रूप से अपनी वस्तुओं (marshalling) और XML (unmarshalling) के ऑब्जेक्ट प्रतिनिधित्व के XML प्रतिनिधित्व बना सकते हैं।
जहाँ तक XML स्कीमा का संबंध है, आपके पास दो विकल्प हैं:
XStream , Digester या XMLBeans जैसे कुछ सरल XML क्रमांकन लाइब्रेरी भी हैं जो विकल्प हो सकते हैं।
अगर आपको एक्सएमएल स्कीमा ( xsd
) के रूप में परिभाषित कुछ बाहरी एक्सएमएल कोड पर कोड डालना है तो JAXB बढ़िया है ।
उदाहरण के लिए, आपके पास एक व्यापारिक अनुप्रयोग है और आपको ट्रेडों को उबेर लाम व्यापार रिपोर्टिंग ऐप पर रिपोर्ट करना होगा और उन्होंने आपको साथ ultra.xsd
देने के लिए दिया होगा। $JAVA_HOME/bin/xjc
एक्सएमएल को जावा वर्गों (जैसे UltraTrade
) के एक समूह में बदलने के लिए कंपाइलर का उपयोग करें ।
फिर आप बस एक साधारण एडेप्टर लेयर लिखकर अपने ट्रेड ऑब्जेक्ट्स को कन्वर्ट करने के लिए UltraTrades
और JAXB
अल्ट्रा-कॉर्प पर डेटा को मार्शल करने के लिए उपयोग कर सकते हैं । अपने ट्रेडों को उनके XML प्रारूप में बदलने के बारे में गड़बड़ करने से ज्यादा आसान है।
जहां यह सब टूट जाता है, जब अल्ट्रा-कॉर्प ने वास्तव में अपने स्वयं के चश्मे का पालन नहीं किया है, और जिस व्यापार के price
रूप में वे नीचे हैं xsd:float
उन्हें वास्तव में ए के रूप में व्यक्त किया जाना चाहिए double
!
हमें JAXB की आवश्यकता क्यों है? वेब सेवाओं के दूरस्थ घटक (जावा में लिखे गए) XML का उपयोग एक दूसरे के बीच संदेशों के आदान-प्रदान के लिए करते हैं। XML क्यों? क्योंकि XML को सीमित संसाधनों के साथ नेटवर्क पर संदेश का आदान-प्रदान करने के लिए हल्का वजन विकल्प माना जाता है। तो अक्सर हमें इन XML दस्तावेजों को वस्तुओं में बदलने की जरूरत है और इसके विपरीत। उदाहरण: सरल जावा POJO कर्मचारी को दूरस्थ घटक (भी जावा प्रोग्राम) के लिए कर्मचारी डेटा भेजने के लिए उपयोग किया जा सकता है।
class Employee{
String name;
String dept;
....
}
इस पूजो को एक्सएमएल दस्तावेज़ में निम्नानुसार परिवर्तित (मार्शल) किया जाना चाहिए:
<Employee>
<Name>...</Name>
<Department>...</Department>
</Employee>
और दूरस्थ घटक पर, एक्सएमएल दस्तावेज़ (अन-मार्शल) से जावा ऑब्जेक्ट पर वापस।
JAXB क्या है?
JAXB एक पुस्तकालय या एक उपकरण है जो मार्शलिंग और अनमार्शलिंग के इस ऑपरेशन को करने के लिए एक उपकरण है। यह आपको इस सिरदर्द से बख्शता है, जितना सरल।
आप JIBX को भी देख सकते हैं। यह एक बहुत अच्छा xml डेटा बाइंडर भी है, जो OTA (ओपन ट्रैवल एलायंस) में भी विशिष्ट है और AXIS2 सर्वर द्वारा समर्थित है। यदि आप प्रदर्शन और अनुकूलता की तलाश कर रहे हैं, तो आप इसे देख सकते हैं:
JAXB डिफ़ॉल्ट marshalling अनुकूलन के माध्यम से बेहतर प्रदर्शन प्रदान करता है। JAXB, XML ऑब्जेक्ट्स को पढ़ने और लिखने के लिए XML प्रोग्रामर से प्रोग्रामर एपीआई को परिभाषित करता है, इस प्रकार जावा के माध्यम से XML के पढ़ने और लिखने को सरल बनाता है।