"ठीक है, फिर। जैसा कि आप शायद पहले ही अनुमान लगा चुके हैं, वह सब कुछ नहीं था।"

"अब मैं आपको JAXB के कई अन्य पहलुओं के बारे में बताऊँगा। लेकिन जैसा कि हमने JSON के साथ किया, हम संग्रह के साथ शुरू करेंगे।"

"जब JAXB का उपयोग करके संग्रहों को डीरिएरलाइज़ किया जाता है, तो सूची चर के लिए उपयोग करने के लिए किस विशेष संग्रह (ArrayList, LinkedList, वेक्टर, आदि) के बारे में भी अनिश्चितता होती है। और फिर से इस प्रश्न का उत्तर एनोटेशन द्वारा प्रदान किया जाता है।"

"यह सब बहुत सरल है। यदि संग्रह प्रकार इसके एनोटेशन में निर्दिष्ट नहीं है, तो JAXB अपने प्रकार का उपयोग करके सबसे उपयुक्त संग्रह का चयन करने का प्रयास करेगा। एक सूची के लिए, यह ArrayList होगा; एक मानचित्र के लिए, यह हैशमैप आदि होगा। "

"वास्तव में, यहाँ JSON की तुलना में बहुत कम समस्याएं हैं, क्योंकि प्रत्येक वर्ग का एक अद्वितीय टैग है, और आप सटीक वर्ग निर्दिष्ट करने के लिए टैग का उपयोग कर सकते हैं।"

"उदाहरण के लिए, यदि आपको उन तत्वों के समूह को डिसेर्बलाइज़ करने की आवश्यकता है जो एक सामान्य पूर्वज को प्राप्त करते हैं, तो आप  @XmlAny: एनोटेशन का उपयोग करते हैं"

किसी वस्तु को XML से रूपांतरित करें
public static void main(String[] args) throws JAXBException
{
 String xmldata = "<zoo><cat/><cat/><dog/><cat/></zoo>";
 StringReader reader = new StringReader(xmldata);

 JAXBContext context = JAXBContext.newInstance(Cat.class, Zoo.class, Dog.class);
 Unmarshaller unmarshaller = context.createUnmarshaller();

 Cat cat = (Cat) unmarshaller.unmarshal(reader);
}
एक वर्ग जिसका ऑब्जेक्ट एक्सएमएल से deserialized है
@XmlType (नाम = "चिड़ियाघर") 
@XmlRootElement 
वर्ग  चिड़ियाघर 
{ 
@XmlAny सार्वजनिक  सूची <ऑब्जेक्ट> जानवर; } 
 


@XmlType (नाम = "बिल्ली") 
@XmlRootElement 
वर्ग  बिल्ली 
{ 
सार्वजनिक  स्ट्रिंग नाम; सार्वजनिक  अंतर आयु; सार्वजनिक  अंतर वजन; 
 
 

 बिल्ली () 
 { 
 } 
}

@XmlType(name = "dog") 
@XmlRootElement 
क्लास  डॉग 
{ 
सार्वजनिक  स्ट्रिंग नाम; सार्वजनिक  अंतर आयु; सार्वजनिक  अंतर वजन; 
 
 

 बिल्ली () 
 { 
 } 

"यदि किसी संग्रह को @XmlAny एनोटेशन के साथ चिह्नित किया गया है, तो उसमें किसी भी उपयुक्त वस्तु को रखा जा सकता है। और JAXB Unmarshaller संग्रह को भरते समय टैग पर ध्यान देता है।"

"इस मामले में, टैग का अनुक्रम" < चिड़ियाघर> <बिल्ली/> <बिल्ली/> <कुत्ते/> <बिल्ली/> < /चिड़ियाघर > "बिल्ली, बिल्ली, कुत्ते और बिल्ली वस्तुओं के साथ एक संग्रह में परिवर्तित हो जाएगा "

"यह वही है जिसकी मुझे उम्मीद थी।"

"उह-हुह। ओह, वैसे, एक और बात। यदि आप टेक्स्ट और टैग के मिश्रण को डीसेर्बलाइज़ करते हैं, तो आपको @XmlMixed एनोटेशन का उपयोग करने की आवश्यकता है।"

"यहाँ इस प्रकार के XML का एक उदाहरण है:"

नमूना XML जिसके लिए @XmlMixed एनोटेशन की आवश्यकता होती है
<डेटा> 
<आइटम> 
टेस्ट 1 <आइटम/> टेक्स्ट 2 <आइटम> नाम </आइटम> टेक्स्ट 3 < /आइटम> </डेटा> 

 

 

 

"वाह। मैं भूल गया था कि इस तरह के एक्सएमएल मौजूद हैं। मुझे हर चीज की आदत हो गई है, एम्बेडेड टैग्स के साथ, और बाकी सब कुछ।"

"यह मौजूद है। और JAXB के पास इस मामले के लिए भी एक एनोटेशन है!"

"बहुत बढ़िया। वैसे, मैं पूछना चाहता था: एनम को क्रमबद्ध कैसे किया जाता है?"

"अच्छा सवाल! अच्छा कैच! मैंने किसी तरह उस विषय को छोड़ दिया।"

"एक विशेष @XmlEnum एनोटेशन है जिसका उपयोग एनम को चिह्नित करने के लिए किया जाना चाहिए। आप इसका उपयोग यह निर्दिष्ट करने के लिए कर सकते हैं कि क्या मान संख्याओं या स्ट्रिंग्स के रूप में संग्रहीत किए जाएंगे।"

"एक @XmlEnumValue एनोटेशन भी है जो आपको उस मान को निर्दिष्ट करने देता है जो किसी विशेष एनम फ़ील्ड के अनुरूप होगा।"

"यहां कुछ उदाहरण दिए गए हैं:"

नंबर स्ट्रिंग्स
@XmlType
@XmlEnum(Integer.class)
public enum Code
{
 @XmlEnumValue("1")
  START,

 @XmlEnumValue("2")
  INPROGRESS,

 @XmlEnumValue("3")
  FINISH

 @XmlEnumValue("-1")
  ERROR
}
@XmlType
@XmlEnum(String.class)
public enum Card
{
 @XmlEnumValue("Spade")
  CLUBS,

 @XmlEnumValue("Diamond")
  DIAMONDS,

 @XmlEnumValue("Heart")
  HEARTS,

 @XmlEnumValue("Club")
  SPADES
}

"पवित्र मोली। मैं कल्पना नहीं कर सकता कि मुझे इसकी आवश्यकता कहाँ होगी, लेकिन मुझे लगता है कि यह बहुत उपयोगी है। और सबसे महत्वपूर्ण बात यह है कि मुझे मानक स्ट्रिंग या संख्यात्मक मानों पर टिके रहने की आवश्यकता नहीं है।"

"हां। यह आसान है, उदाहरण के लिए, जब आप एक प्रोग्राम लिखते हैं जो फेसबुक सर्वर के साथ संदेशों का आदान-प्रदान करता है, और उनके पास मूल्यों का एक निर्धारित सेट होता है। आपको बस उन्हें अपने स्वयं के एनम को असाइन करने की आवश्यकता होती है और सब कुछ काम करेगा। "

"यह अद्भुत है। मुझे निश्चित रूप से JAXB पसंद है।"

"बहुत बढ़िया। तो आज के लिए बस इतना ही। जाओ और एक ब्रेक लो।"