"అంత తొందరగా లేదు యువకుడా! నీ కోసం నా దగ్గర మరో రెండు పాఠాలు ఉన్నాయి!"

"రెండు? వావ్. సరే, సరే. నీ ​​కూల్‌నెస్‌ని పెంచుకోవడానికి నువ్వు ఏం చేయను! నేను అందరికి చెవులు కొరుక్కుంటాను."

"XML, JSON వంటిది, వివిధ ప్రోగ్రామ్‌లు మరియు కంప్యూటర్‌ల మధ్య డేటాను పంపేటప్పుడు తరచుగా ఉపయోగించబడుతుంది. మరియు XMLతో పనిచేసేటప్పుడు జావా ప్రోగ్రామర్ల జీవితాలను చాలా సులభతరం చేసే అనేక ఫ్రేమ్‌వర్క్‌లు ఉన్నాయి. ఈ రోజు నేను వాటిలో ఒకదాన్ని మీకు పరిచయం చేస్తాను."

"JAXB XMLతో పని చేయడానికి ఒక అద్భుతమైన బహుళార్ధసాధక ఫ్రేమ్‌వర్క్."

JAXB - 1

"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()
 {
 }
}
సీరియలైజేషన్ ఫలితం మరియు స్క్రీన్ అవుట్‌పుట్:
<cat> 
<name> Missy </name> 
<age> 5 < / age> 
<weight> 4 </weight> 
</cat>

"కొన్ని కారణాల వల్ల, లైన్ కోసం లైన్, ఈ కోడ్ నాకు JSON సీరియలైజేషన్‌ని గుర్తు చేస్తుంది. అదే ఉల్లేఖనాలు, కానీ JSON ఆబ్జెక్ట్‌మ్యాపర్‌ని ఉపయోగించింది మరియు ఇది సందర్భం మరియు మార్షలర్‌ని ఉపయోగిస్తుంది."

అవును

"అలా అనిపిస్తోంది."

"సరే, ఇక్కడ ఏమి జరుగుతోంది:"

"4-7 లైన్లలో, మేము క్యాట్ ఆబ్జెక్ట్‌ని సృష్టించాము మరియు దానిని డేటాతో నింపుతాము."

"పంక్తి 10లో, ఫలితాన్ని వ్రాయడానికి మేము రైటర్ ఆబ్జెక్ట్‌ను సృష్టిస్తాము."

"13వ పంక్తిలో, మేము 'సందర్భం'ని సృష్టిస్తాము. ఇది ఆబ్జెక్ట్‌మ్యాపర్‌ను పోలి ఉంటుంది, కానీ దాని నుండి రెండు అదనపు చైల్డ్ ఆబ్జెక్ట్‌లు సృష్టించబడతాయి. మార్షల్లర్ సీరియలైజేషన్ కోసం మరియు అన్‌మార్షల్లర్ డీరియలైజేషన్ కోసం. జాక్సన్ నుండి చిన్న తేడాలు ఉన్నాయి, కానీ అది కాదు ప్రాథమికంగా భిన్నంగా లేదు."

"14వ పంక్తిలో, మేము మార్షలర్ వస్తువును సృష్టిస్తాము. మార్షలింగ్ అనేది సీరియలైజేషన్‌కు పర్యాయపదం."

"15వ పంక్తిలో, మేము 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>Missy</catname> </ 
tiger 
> < tiger age = "5" w = "4"> 
<catname>Missy </catname> 
</tiger> 
</wild-animals> 
</zoo>

"ఈసారి మేము క్యాట్ ఆబ్జెక్ట్‌ని సీరియల్ చేయడం లేదని గమనించండి, కానీ పిల్లి వస్తువుల సేకరణను నిల్వ చేసే జూ వస్తువు."

"పిల్లి వస్తువు సేకరణకు రెండుసార్లు జోడించబడింది, కనుక ఇది రెండుసార్లు XMLలో ఉంది."

"సేకరణ దాని స్వంత ' వైల్డ్-యానిమల్స్ ' ట్యాగ్‌ని కలిగి ఉంది, ఇది సేకరణలోని అన్ని అంశాలను చుట్టి ఉంటుంది."

" వయస్సు & బరువు అంశాలు వయస్సు & w w గుణాలుగా మారాయి ."

" @XmlElement లక్షణాన్ని ఉపయోగించి, మేము పిల్లి ట్యాగ్‌ని టైగర్ ట్యాగ్‌గా మార్చాము ."

"17వ పంక్తిపై శ్రద్ధ వహించండి. ఇక్కడ మేము రెండు తరగతులను ( జూ మరియు పిల్లి ) JAXB సందర్భానికి ఉత్తీర్ణులు చేస్తాము, ఎందుకంటే అవి రెండూ సీరియలైజేషన్‌లో పాల్గొంటాయి."

"ఈ రోజు చాలా ఆసక్తికరమైన రోజు. చాలా కొత్త సమాచారం."

"అవును. నేను మీ కోసం సంతోషంగా ఉన్నాను. ఇప్పుడు, చిన్న విరామం తీసుకోండి మరియు మేము కొనసాగుతాము."