"এত তাড়াতাড়ি না, যুবক! তোমার জন্য আমার আরও দুটি পাঠ আছে!"

"দুই? বাহ। আচ্ছা, ঠিক আছে। আপনার নিজের শীতলতা বাড়ানোর জন্য আপনি কি করবেন না! আমি সব কান।"

"JSON-এর মতো XML, বিভিন্ন প্রোগ্রাম এবং কম্পিউটারের মধ্যে ডেটা পাস করার সময় প্রায়শই ব্যবহার করা হয়। এবং অনেকগুলি ফ্রেমওয়ার্ক রয়েছে যা 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 একটি অবজেক্টম্যাপার ব্যবহার করে এবং এটি প্রসঙ্গ এবং মার্শালার ব্যবহার করে।"

"হ্যাঁ। তারা সত্যিই খুব একই রকম। জ্যাকসন JAXB-এর পরে মডেল করা হয়েছিল। কিন্তু JAXBও কোথাও থেকে কপি করা হয়েছিল। আপনি স্ক্র্যাচ থেকে জিনিয়াস কিছু আবিষ্কার করতে পারবেন না।"

"এটা এমনই মনে হয়।"

"ঠিক আছে, এখানে কি ঘটছে:"

"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 লাইনে, আমরা একটি স্ট্রিং পাস করি যা এক্সএমএলকে ডিসিরিয়ালাইজ করার জন্য সঞ্চয় করে।"

"4 লাইনে, আমরা XML-স্ট্রিংকে একটি স্ট্রিংরিডারে মোড়ানো ।"

"6 লাইনে, আমরা একটি JAXB প্রসঙ্গ তৈরি করি , যেখানে আমরা ক্লাসের তালিকা পাস করি।"

"লাইন 7-এ, আমরা একটি আনমার্শালার তৈরি করি - যে বস্তুটি ডিসিরিয়ালাইজেশন করবে।"

"9 লাইনে, আমরা রিডার অবজেক্ট থেকে XML ডিসিরিয়ালাইজ করি এবং একটি ক্যাট অবজেক্ট পাই।"

"এখন সবকিছু প্রায় স্পষ্ট বলে মনে হচ্ছে। কিন্তু কয়েক ঘন্টা আগে, আমি এটি কীভাবে কাজ করে তা বের করার জন্য আমার মস্তিষ্ককে তাক লাগিয়েছিলাম।"

"যখন আপনি স্মার্ট হন তখন এটি সর্বদা ঘটে। জটিল জিনিসগুলি সহজ হয়ে যায়।"

"আমি আরও বুদ্ধিমান হয়ে উঠছি? আমি সাহায্য করতে পারি না কিন্তু এটা নিয়ে খুশি হতে পারি।"

"দারুণ। তারপর এখানে টীকাগুলির একটি তালিকা রয়েছে যা আপনি JAXB সিরিয়ালাইজেশনের ফলাফল নিয়ন্ত্রণ করতে ব্যবহার করতে পারেন:"

JAXB টীকা বর্ণনা
@XmlElement(নাম) একটি মাঠের কাছে রাখা হয়েছে।
ক্ষেত্রটি একটি XML উপাদানে সংরক্ষণ করা হবে।
আপনাকে ট্যাগের নাম সেট করতে দেয়।
@XmlAttribute(নাম) একটি মাঠের কাছে রাখা হয়েছে।
ক্ষেত্রটি একটি XML বৈশিষ্ট্য হিসাবে সংরক্ষণ করা হবে!
আপনাকে বৈশিষ্ট্যের নাম সেট করতে দেয়।
@XmlElementWrapper(nillable = true) একটি মাঠের কাছে রাখা হয়েছে।
আপনাকে উপাদানগুলির একটি গ্রুপের জন্য একটি 'র্যাপার ট্যাগ' সেট করতে দেয়।
@এক্সএমএল টাইপ ক্লাসের কাছে রাখা হয়েছে।
ডিফল্ট কনস্ট্রাক্টর ব্যক্তিগত হলে অবজেক্ট তৈরি করার জন্য আপনাকে একটি পদ্ধতি নির্দিষ্ট করতে দেয়।
@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-এ দুবার আছে।"

"সংগ্রহটির নিজস্ব ' বন্য-প্রাণী ' ট্যাগ রয়েছে যা সংগ্রহের সমস্ত উপাদানকে মোড়ানো হয়।"

" বয়স এবং ওজনের উপাদানগুলি বয়সের বৈশিষ্ট্যে পরিণত হয়েছে ।"

"একটি @XmlElement বৈশিষ্ট্য ব্যবহার করে, আমরা বিড়াল ট্যাগটিকে একটি বাঘ ট্যাগে পরিবর্তন করেছি ।"

"লাইন 17 এ মনোযোগ দিন। এখানে আমরা JAXB প্রসঙ্গে দুটি ক্লাস ( Zoo এবং Cat ) পাস করি, যেহেতু তারা উভয়ই সিরিয়ালাইজেশনের সাথে জড়িত।"

"আজ একটি খুব আকর্ষণীয় দিন ছিল। অনেক নতুন তথ্য।"

"হ্যাঁ। আমি আপনার জন্য খুশি। এখন, একটি ছোট বিরতি নিন এবং আমরা চালিয়ে যাব।"