"इतकी वेगवान नाही, तरुण! माझ्याकडे तुझ्यासाठी आणखी दोन धडे आहेत!"

"दोन? व्वा. बरं, ठीक आहे. तुमचा स्वतःचा थंडपणा वाढवण्यासाठी तुम्ही काय करणार नाही! मी सर्व कान आहे."

"XML, JSON प्रमाणे, अनेकदा वेगवेगळ्या प्रोग्राम्स आणि कॉम्प्युटरमधील डेटा पास करताना वापरला जातो. आणि असे अनेक फ्रेमवर्क आहेत जे XML सोबत काम करताना Java प्रोग्रामरचे जीवन मोठ्या प्रमाणात सुलभ करतात. आज मी तुम्हाला त्यापैकी एकाची ओळख करून देईन."

"XML सह काम करण्यासाठी JAXB एक उत्कृष्ट बहुउद्देशीय फ्रेमवर्क आहे."

JAXB - १

"JAXB JDK चा भाग आहे, त्यामुळे तुम्हाला ते स्वतंत्रपणे डाउनलोड करण्याची गरज नाही."

"मी तुम्हाला ते कसे वापरायचे याचे एक उदाहरण दाखवतो आणि नंतर आम्ही त्याचे विश्लेषण करू. उदाहरणार्थ:"

ऑब्जेक्ट XML मध्ये रूपांतरित करा
public static void main(String[] args) throws JAXBException
{
 // Create an object to be serialized into XML
 Cat cat = new Cat();
 cat.name = "Missy";
 cat.age = 5;
 cat.weight = 4;

 // Write the result of the serialization to a StringWriter
 StringWriter writer = new StringWriter();

 // Create a Marshaller object that will perform the serialization
 JAXBContext context = JAXBContext.newInstance(Cat.class);
 Marshaller marshaller = context.createMarshaller();
 marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
 // And here's the serialization itself:
 marshaller.marshal(cat, writer);

 // Convert everything written to the StringWriter
 String result = writer.toString();
 System.out.println(result);
}
एक वर्ग ज्याचे ऑब्जेक्ट XML मध्ये रूपांतरित होतात
@XmlType(name = "cat")
@XmlRootElement
public class Cat
{
 public String name;
 public int age;
 public int weight;

 public Cat()
 {
 }
}
सीरियलायझेशन परिणाम आणि स्क्रीन आउटपुट:
<मांजर> 
< नाम> मिस्सी </ नाव> 
<वय>  < / वय> 
<weight>  </weight> </ cat 
>

"काही कारणास्तव, रेषेसाठी ओळ, हा कोड मला JSON अनुक्रमांकाची आठवण करून देतो. समान भाष्ये, परंतु JSON ने ऑब्जेक्टमॅपर वापरले आणि हे संदर्भ आणि मार्शलर वापरते."

"हो. ते खरच खूप सारखे आहेत. जॅक्सनचे मॉडेल JAXB नंतर तयार केले गेले होते. पण JAXB देखील कुठूनतरी कॉपी केले गेले होते. तुम्ही सुरवातीपासून काहीतरी प्रतिभावान शोध लावू शकत नाही."

"असं वाटतंय."

"ठीक आहे, येथे काय होत आहे:"

"ओळी 4-7 मध्ये, आम्ही एक कॅट ऑब्जेक्ट तयार करतो आणि डेटासह पॉप्युलेट करतो."

"ओळ 10 मध्ये, आम्ही निकाल लिहिण्यासाठी एक लेखक ऑब्जेक्ट तयार करतो."

"१३व्या ओळीत, आम्ही 'संदर्भ' तयार करतो. हे ऑब्जेक्टमॅपर सारखेच आहे, परंतु नंतर त्यातून दोन अतिरिक्त चाइल्ड ऑब्जेक्ट्स तयार केले जातात. मार्शलर सीरिअलायझेशनसाठी आहे आणि अनमार्शलर डिसिरियलायझेशनसाठी आहे. जॅक्सनपासून लहान फरक आहेत, परंतु ते नाही. मुळात वेगळे नाही."

"14 व्या ओळीत, आम्ही एक मार्शलर ऑब्जेक्ट तयार करतो. मार्शलिंग हे क्रमिकरणासाठी समानार्थी शब्द आहे."

"१५ व्या ओळीत, आम्ही FORMATTED_OUTPUT गुणधर्म TRUE वर सेट केले आहे. हे परिणामामध्ये लाइन ब्रेक आणि स्पेस जोडेल, जेणेकरुन कोड मानवी वाचनीय असेल आणि फक्त एका ओळीवर सर्व मजकूर नसेल."

"17 व्या ओळीत, आम्ही ऑब्जेक्टला क्रमबद्ध करतो."

"ओळी 20-21 मध्ये, आम्ही स्क्रीनवर क्रमवारीचा परिणाम प्रदर्शित करतो."

"@XmlType(name = 'cat&') आणि @XmlRootElement भाष्ये काय आहेत?"

" @XmlRootElement सूचित करते की ही वस्तू XML घटकांचे 'वृक्षाचे मूळ' असू शकते. दुसऱ्या शब्दांत, ते सर्वोच्च स्तरीय घटक असू शकते आणि त्यात इतर सर्व घटक असू शकतात."

" @XmlType(name = 'cat') JAXB क्रमवारीत वर्ग गुंतलेला असल्याचे सूचित करतो आणि या वर्गासाठी XML टॅगचे नाव देखील निर्दिष्ट करतो."

"ठीक आहे, आता मी तुम्हाला XML डिसिरियलायझेशनचे उदाहरण दाखवतो:"

XML वरून ऑब्जेक्ट रूपांतरित करा
public static void main(String[] args) throws JAXBException
{
 String xmldata = "<cat><name>Missy</name><age>5</age><weight>4</weight></cat>";
 StringReader reader = new StringReader(xmldata);

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

 Cat cat = (Cat) unmarshaller.unmarshal(reader);
}
एक वर्ग ज्याच्या वस्तू XML वरून डीसीरियलाइज केल्या आहेत
@XmlType(name = "cat")
@XmlRootElement
public class Cat
{
 public String name;
 public int age;
 public int weight;

 public Cat()
 {
 }
}

"सर्व काही जॅक्सन प्रमाणेच आहे. पण फक्त बाबतीत, मी येथे जे काही चालले आहे ते समजावून सांगेन."

"ओळ 3 मध्ये, आम्ही एक स्ट्रिंग पास करतो जी डीसीरियलाइज्ड होण्यासाठी XML संग्रहित करते."

"ओळ 4 मध्ये, आम्ही XML-स्ट्रिंग स्ट्रिंगरीडरमध्ये गुंडाळतो . "

"6 व्या ओळीत, आम्ही एक JAXB संदर्भ तयार करतो , ज्यामध्ये आम्ही वर्गांची यादी पास करतो."

"7व्या ओळीत, आम्ही एक अनमार्शलर तयार करतो - जी वस्तू डिसिरियलायझेशन करेल."

"9व्या ओळीत, आम्ही रीडर ऑब्जेक्टवरून XML डिसिरियलाइज करतो आणि कॅट ऑब्जेक्ट मिळवतो."

"आता हे सर्व जवळजवळ स्पष्ट दिसत आहे. पण काही तासांपूर्वी, ते कसे कार्य करते हे शोधण्यासाठी मी माझ्या मेंदूचा अभ्यास करत होतो."

"जेव्हा तुम्ही हुशार बनता तेव्हा असे घडते. गुंतागुंतीच्या गोष्टी सोप्या होतात."

"मी हुशार होत आहे? मी मदत करू शकत नाही पण त्याबद्दल आनंदी राहा."

"उत्तम. मग येथे भाष्यांची सूची आहे जी तुम्ही JAXB क्रमिकरणाचा परिणाम नियंत्रित करण्यासाठी वापरू शकता:"

JAXB भाष्ये वर्णन
@XmlElement(नाव) शेताच्या जवळ ठेवले.
फील्ड XML घटकामध्ये संग्रहित केले जाईल.
तुम्हाला टॅगचे नाव सेट करू देते.
@XmlAttribute(नाव) शेताच्या जवळ ठेवले.
फील्ड XML विशेषता म्हणून संग्रहित केले जाईल!
तुम्हाला विशेषताचे नाव सेट करू देते.
@XmlElementWrapper(nillable = true) शेताच्या जवळ ठेवले.
तुम्हाला घटकांच्या गटासाठी 'रॅपर टॅग' सेट करू देते.
@XmlType वर्गाजवळ ठेवले.
डीफॉल्ट कन्स्ट्रक्टर खाजगी असल्यास ऑब्जेक्ट तयार करण्यासाठी तुम्हाला पद्धत निर्दिष्ट करू देते.
@XmlJavaTypeAdapter शेताच्या जवळ ठेवले.
फील्डला स्ट्रिंगमध्ये रूपांतरित करणारा वर्ग तुम्हाला निर्दिष्ट करू देतो.

"किती मनोरंजक! पण तुम्ही मला एखादे उदाहरण देऊ शकता जे या भाष्यांचा वापर करते? स्पष्टीकरण एक गोष्ट आहे, परंतु कार्यरत उदाहरण काहीतरी वेगळे आहे."

"ठीक आहे. मी तुम्हाला एक उदाहरण दाखवतो. मला फक्त हे जोडायचे आहे की JAXB तुम्हाला फील्डऐवजी गेटर/सेटर पद्धती भाष्य करू देते."

"मी वचन दिलेले उदाहरण येथे आहे:"

ऑब्जेक्ट XML मध्ये रूपांतरित करा
public static void main(String[] args) throws JAXBException
{
 // Create Cat and Zoo objects to be serialized into XML
 Cat cat = new Cat();
 cat.name = "Missy";
 cat.age = 5;
 cat.weight = 4;

 Zoo zoo = new Zoo();
 zoo.animals.add(cat);
 zoo.animals.add(cat);

 // Write the result of the serialization to a StringWriter
 StringWriter writer = new StringWriter();

 // Create a Marshaller object that will perform the serialization
 JAXBContext context = JAXBContext.newInstance(Cat.class, Zoo.class);
 Marshaller marshaller = context.createMarshaller();
 marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
 // Here's the serialization itself
 marshaller.marshal(zoo, writer);

 // Convert everything written to the StringWriter into a String
 System.out.println(writer.toString());
}
एक वर्ग ज्याचे ऑब्जेक्ट XML मध्ये रूपांतरित होतात
@XmlType(name = "zoo")
@XmlRootElement
public class Zoo
{
 @XmlElementWrapper(name = "wild-animals", nillable = true)
 @XmlElement(name = "tiger")
 public List<Cat> animals = new ArrayList<>();
}

public class Cat
{
 @XmlElement(name = "catname")
 public String name;
 @XmlAttribute(name = "age")
 public int age;
 @XmlAttribute(name = "w")
 public int weight;

 public Cat()
 {
 }
}
सीरियलायझेशन परिणाम आणि स्क्रीन आउटपुट:
<zoo> 
<wild-animals> 
<tiger age = "5" w = "4"> 
<catname>मिस्सी</catname> </tiger> 
< 
tiger age = "5" w = "4"> 
<catname>मिस्सी </catname> 
</tiger> 
</wild-animals> 
</zoo>

"लक्षात घ्या की यावेळी आम्ही एका मांजरीच्या वस्तूला क्रमवारी लावत नाही, तर प्राणीसंग्रहालयातील वस्तूंचा संग्रह करत आहोत."

"मांजर वस्तू संग्रहात दोनदा जोडली गेली, म्हणून ती XML मध्ये दोनदा आहे."

"संग्रहाचा स्वतःचा ' वन्य-प्राणी ' टॅग आहे जो संग्रहातील सर्व घटकांना गुंडाळतो."

" वय आणि वजन घटक हे वय आणि डब्ल्यूचे गुणधर्म बनले आहेत ."

" @XmlElement विशेषता वापरून, आम्ही मांजरीचा टॅग वाघ टॅगमध्ये बदलला ."

"17 व्या ओळीकडे लक्ष द्या. येथे आम्ही दोन वर्ग ( प्राणीसंग्रहालय आणि मांजर ) JAXB संदर्भात पास करतो, कारण ते दोघेही क्रमवारीत गुंतलेले आहेत."

"आजचा दिवस खूप मनोरंजक होता. खूप नवीन माहिती."

"हो. मी तुमच्यासाठी आनंदी आहे. आता, थोडा ब्रेक घ्या आणि आम्ही पुढे जाऊ."