JAXB क्या है और मैं इसका उपयोग क्यों करूंगा? [बन्द है]


109

यहाँ लड़का है कि कसम खाने के बाद JAXB सबसे बड़ी बात है। मैं यह देखने के लिए उत्सुक हूं कि स्टैक ओवरफ्लो उपयोगकर्ताओं को क्या लगता है कि उपयोग मामला JAXB के लिए है और यह उस मामले के लिए एक अच्छा या बुरा समाधान बनाता है।


2
यह आलेख पढ़ें (XML आर्किटेक्चर के लिए जावा आर्किटेक्चर (JAXB)) यह सबसे अच्छा है। URL: oracle.com/technetwork/articles/javase/index-140168.html#unmars

जवाबों:


99

मैं 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 इसमें हेरफेर करने में सक्षम था।


21
JAXB को बिना XSD के किया जा सकता है। आप एनोटेशन का उपयोग कर सकते हैं: jaxb.dev.java.net/guide/Mapping_your_favorite_class.html
codefinger

7
JAXB एक युक्ति है (जैसे JPA या JAXP), जिसका अर्थ है कि कई कार्यान्वयन (मेट्रो, एक्लिप्सलिंक, आदि) हैं। यदि आपके पास एक समस्या है तो आप दूसरे कार्यान्वयन पर स्विच कर सकते हैं। आप विभिन्न विक्रेताओं द्वारा पेश किए गए एक्सटेंशन का भी लाभ उठा सकते हैं।

@ BlaiseDouagan, मेट्रो एक JAXB कार्यान्वयन है! मेट्रो एक WSIT कार्यान्वयन नहीं है?
मुहम्मद गालबाना

1
@MuhammadGelbana - मुझे लगता है कि मुझे इसे प्रोजेक्ट JAXB ( jaxb.java.net ) के रूप में संदर्भित किया जाना चाहिए, जो मेट्रो JAX-WS कार्यान्वयन ( metro.java.net ) का हिस्सा है।
bdouagan

2
FYI करें, JAXB को Java SE 11 से हटाया जा रहा है। JEP 320 देखें : Java EE और CORBA मॉड्यूल निकालें । यह कार्रवाई जावा एसई के मॉडर्नाइजेशन और जकार्ता ईई परियोजना के लिए जावा ईई प्रौद्योगिकियों के हवाले के हिस्से के रूप में की जा रही है । आपको अपने प्रोजेक्ट में JAXB API और एक कार्यान्वयन जोड़ना होगा।
बेसिल बोर्ख

23

यहां इसका उपयोग न करने का एक कारण है: प्रदर्शन में गिरावट। ओवरहेडिंग और अनारकली होने पर ओवरहेड का एक अच्छा सौदा है। आप XML-Object बाइंडिंग के लिए एक और एपीआई पर भी विचार कर सकते हैं - जैसे कि JiBX: http://jibx.sourceforge.net/


1
यदि आप बाइंडिंग से परेशान हैं, तो टूल XSD2Jibx का उपयोग करने पर भी विचार करें - यह "अल्फा" स्थिति में है, लेकिन यह वास्तव में सहायक वर्गों को दिखाता है और इसे एक्सएसडी स्कीमा के साथ पसंद करता है ... अब, यदि केवल डिफ़ॉल्ट रूप से SQL तिथि का उपयोग करना बंद कर दिया है। , और इसके बजाय जावा उपयोग की तारीख ...
MetroidFan2002

3
बकवास। JAXB बहुत तेज़ है, जब तक आप मैन्युअल बाइंडिंग की तुलना में तेज़ पार्सर (जैसे वुडस्टॉक्स) का उपयोग करते हैं, शायद 30-40% का ओवरहेड। JiBX ठीक है, इसके साथ कोई समस्या नहीं है, लेकिन प्रदर्शन अंतर बहुत बड़ा नहीं है।
स्टैक्मैन मैन 26'09

6
मैंने कई परियोजनाओं पर JAXB का उपयोग किया है, और इसका उपयोग करना जारी रखता हूं। लेकिन यह समझना महत्वपूर्ण है कि यह अन्य रूपरेखाओं की तुलना कैसे करता है। यदि आप सैकड़ों मेगाबाइट्स वाले मार्शलिंग / अनमैर्शलिंग दस्तावेज़ हैं, और समय महत्वपूर्ण है - JiBX एक अच्छा विकल्प है। JAXB == प्रतिबिंब, JiBX == बाइट कोड इंस्ट्रूमेंटेशन।
कोडफिंगर

19

यह "XML के लिए ORM" है। डब्ल्यूएस डेथ स्टार सिस्टम के लिए अक्सर JAX-WS (और वास्तव में सूर्य कार्यान्वयन एक साथ विकसित होते हैं) के साथ उपयोग किया जाता है।


19

मैं हर समय काम में JAXB का उपयोग करता हूं और मैं वास्तव में इसे प्यार करता हूं। यह जटिल XML स्कीमा के लिए एकदम सही है जो हमेशा बदलते रहते हैं और विशेष रूप से XML फ़ाइल में टैग की यादृच्छिक पहुँच के लिए अच्छे होते हैं।

मुझे दलाल से नफरत है लेकिन मैंने अभी एक ब्लॉग शुरू किया है और यह सचमुच पहली चीज है जिसके बारे में मैंने पोस्ट किया है!

यहां इसकी जांच कीजिए:

http://arthur.gonigberg.com/2010/04/21/getting-started-with-jaxb/


4
अपने ब्लॉग पर स्पष्ट उदाहरण। उसके लिए अपडाउन किया। :-)
शॉन डी।

9

JAXB के साथ आप स्वचालित रूप से अपनी वस्तुओं (marshalling) और XML (unmarshalling) के ऑब्जेक्ट प्रतिनिधित्व के XML प्रतिनिधित्व बना सकते हैं।

जहाँ तक XML स्कीमा का संबंध है, आपके पास दो विकल्प हैं:

  • एक एक्सएसडी से जावा कक्षाएं उत्पन्न करें
  • अपने जावा कक्षाओं से एक XSD उत्पन्न करें

XStream , Digester या XMLBeans जैसे कुछ सरल XML क्रमांकन लाइब्रेरी भी हैं जो विकल्प हो सकते हैं।


1
ये बाध्यकारी ढांचे नहीं हैं, वे क्रमबद्ध पुस्तकालय हैं। एक अच्छा बाध्यकारी ढांचा किसी भी XML को एक आइसोमोर्फिक ऑब्जेक्ट ग्राफ या फिर से वापस मैप कर सकता है। ये सरल क्रमांकन तंत्र एक निश्चित, गैर-मानक XML स्कीमा का उत्पादन और उपभोग करते हैं।
इर्कसन

धन्यवाद erickson, मैंने केवल JAXB के साथ काम किया है और यह सुनिश्चित करना चाहता हूं कि मैं विकल्पों का उल्लेख करूं। मैं आपके इनपुट के आधार पर अपना उत्तर संपादित करूंगा।
फेबियन स्टिग

दरअसल, जबकि XStream ठीक है, यह वास्तव में सरल नहीं है, क्योंकि दोनों बहुत सरल हैं। और डाइजेस्टर सरल नहीं है, बस सरल है।
स्टैक्मैन मैन 26'09

2
किसी ने एनोटेशन का उपयोग करके JAXB-2.0 का उल्लेख किया है। कुछ XmlAdapter कक्षाओं के बीच, मैं किसी भी स्कीमा को किसी भी मौजूदा जावा संरचना में मैप कर सकता हूं।
मार्क रेनॉफ

8

अगर आपको एक्सएमएल स्कीमा ( xsd) के रूप में परिभाषित कुछ बाहरी एक्सएमएल कोड पर कोड डालना है तो JAXB बढ़िया है ।

उदाहरण के लिए, आपके पास एक व्यापारिक अनुप्रयोग है और आपको ट्रेडों को उबेर लाम व्यापार रिपोर्टिंग ऐप पर रिपोर्ट करना होगा और उन्होंने आपको साथ ultra.xsdदेने के लिए दिया होगा। $JAVA_HOME/bin/xjcएक्सएमएल को जावा वर्गों (जैसे UltraTrade) के एक समूह में बदलने के लिए कंपाइलर का उपयोग करें ।

फिर आप बस एक साधारण एडेप्टर लेयर लिखकर अपने ट्रेड ऑब्जेक्ट्स को कन्वर्ट करने के लिए UltraTradesऔर JAXBअल्ट्रा-कॉर्प पर डेटा को मार्शल करने के लिए उपयोग कर सकते हैं । अपने ट्रेडों को उनके XML प्रारूप में बदलने के बारे में गड़बड़ करने से ज्यादा आसान है।

जहां यह सब टूट जाता है, जब अल्ट्रा-कॉर्प ने वास्तव में अपने स्वयं के चश्मे का पालन नहीं किया है, और जिस व्यापार के priceरूप में वे नीचे हैं xsd:floatउन्हें वास्तव में ए के रूप में व्यक्त किया जाना चाहिए double!


1
यह भी ध्यान दें कि आप कोड-प्रथम कर सकते हैं: सेम से शुरू करें, स्कीमा उत्पन्न करें यदि आपको इसकी आवश्यकता है।
स्टैक्मैन मैन

7

हमें JAXB की आवश्यकता क्यों है? वेब सेवाओं के दूरस्थ घटक (जावा में लिखे गए) XML का उपयोग एक दूसरे के बीच संदेशों के आदान-प्रदान के लिए करते हैं। XML क्यों? क्योंकि XML को सीमित संसाधनों के साथ नेटवर्क पर संदेश का आदान-प्रदान करने के लिए हल्का वजन विकल्प माना जाता है। तो अक्सर हमें इन XML दस्तावेजों को वस्तुओं में बदलने की जरूरत है और इसके विपरीत। उदाहरण: सरल जावा POJO कर्मचारी को दूरस्थ घटक (भी जावा प्रोग्राम) के लिए कर्मचारी डेटा भेजने के लिए उपयोग किया जा सकता है।

class Employee{
 String name;
 String dept;
 ....
}

इस पूजो को एक्सएमएल दस्तावेज़ में निम्नानुसार परिवर्तित (मार्शल) किया जाना चाहिए:

<Employee>
  <Name>...</Name>
  <Department>...</Department>
</Employee>

और दूरस्थ घटक पर, एक्सएमएल दस्तावेज़ (अन-मार्शल) से जावा ऑब्जेक्ट पर वापस।

JAXB क्या है?

JAXB एक पुस्तकालय या एक उपकरण है जो मार्शलिंग और अनमार्शलिंग के इस ऑपरेशन को करने के लिए एक उपकरण है। यह आपको इस सिरदर्द से बख्शता है, जितना सरल।


4

आप JIBX को भी देख सकते हैं। यह एक बहुत अच्छा xml डेटा बाइंडर भी है, जो OTA (ओपन ट्रैवल एलायंस) में भी विशिष्ट है और AXIS2 सर्वर द्वारा समर्थित है। यदि आप प्रदर्शन और अनुकूलता की तलाश कर रहे हैं, तो आप इसे देख सकते हैं:

http://jibx.sourceforge.net/index.html


0

JAXB डिफ़ॉल्ट marshalling अनुकूलन के माध्यम से बेहतर प्रदर्शन प्रदान करता है। JAXB, XML ऑब्जेक्ट्स को पढ़ने और लिखने के लिए XML प्रोग्रामर से प्रोग्रामर एपीआई को परिभाषित करता है, इस प्रकार जावा के माध्यम से XML के पढ़ने और लिखने को सरल बनाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.