স্প্রিং ওএক্সএম (Spring OXM) XML ডেটাকে XML Schema (XSD) এর মাধ্যমে ভ্যালিডেট (validate) করতে সহায়তা করে। এটি XML ডেটার কাঠামো এবং কনটেন্টের বৈধতা পরীক্ষা করার জন্য ব্যবহৃত হয়। XML Schema Validation XML ডকুমেন্টের সঠিকতা নিশ্চিত করতে সাহায্য করে, যাতে তা নির্দিষ্ট কাঠামো এবং নিয়মের সাথে মিলে।
XML Schema Validation সাধারণত XML ডকুমেন্টে থাকা ডাটা এবং কাঠামোর সঠিকতা পরীক্ষা করতে ব্যবহৃত হয়। উদাহরণস্বরূপ, আপনি যদি কোনো XML ডকুমেন্ট তৈরি করেন এবং নিশ্চিত হতে চান যে তা একটি নির্দিষ্ট ফরম্যাটে রয়েছে, তবে XML Schema (XSD) ব্যবহার করে তা ভ্যালিডেট করা যায়।
স্প্রিং ওএক্সএম ব্যবহার করে XML Schema Validation উদাহরণ
পদক্ষেপ ১: XML Schema (XSD) তৈরি করা
প্রথমে আপনাকে একটি XML Schema (XSD) ফাইল তৈরি করতে হবে যা XML ডকুমেন্টের কাঠামো নির্ধারণ করবে। নিচে একটি উদাহরণ দেওয়া হলো:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="age" type="xs:int"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
এই XSD ফাইলটি person এলিমেন্টের মধ্যে দুটি উপাদান, name এবং age, সংজ্ঞায়িত করেছে।
পদক্ষেপ ২: XML ডেটা তৈরি করা
এখন, আমাদের XML ডেটা তৈরি করতে হবে যা XSD ফাইলের সাথে মিলবে।
<?xml version="1.0" encoding="UTF-8"?>
<person>
<name>John Doe</name>
<age>30</age>
</person>
এটি একটি সাদাসিধে person XML ডকুমেন্ট যা দুটি এলিমেন্ট ধারণ করে: name এবং age।
পদক্ষেপ ৩: স্প্রিং কনফিগারেশন তৈরি
স্প্রিং কনফিগারেশনের মধ্যে XML Schema Validation সক্ষম করতে Jaxb2Marshaller ব্যবহার করা যেতে পারে। এছাড়া, আপনাকে XML Schema (XSD) ফাইলটি লোড করতে হবে।
<bean id="marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="contextPath" value="com.example"/>
<property name="schema" value="classpath:person.xsd"/>
</bean>
এখানে contextPath এর মাধ্যমে Java প্যাকেজের নাম দেওয়া হয়েছে এবং schema প্রোপার্টি ব্যবহার করে XSD ফাইলের পথ নির্দিষ্ট করা হয়েছে।
পদক্ষেপ ৪: XML Schema Validation কোড উদাহরণ
এখন, আপনি Jaxb2Marshaller ব্যবহার করে XML ডেটা ভ্যালিডেট করতে পারেন। এখানে আমরা XML ডেটাকে XML Schema (XSD) এর মাধ্যমে ভ্যালিডেট করব:
import org.springframework.oxm.jaxb.Jaxb2Marshaller;
import javax.xml.transform.stream.StreamSource;
import java.io.StringReader;
public class SpringOXMExample {
public static void main(String[] args) {
try {
// XML Schema Validation এর জন্য Marshaller তৈরি করা
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setContextPath("com.example");
marshaller.setSchema(new StreamSource("classpath:person.xsd"));
// XML ডেটা
String xmlData = "<person><name>John Doe</name><age>30</age></person>";
// XML ডেটা থেকে Java অবজেক্টে রূপান্তর
marshaller.unmarshal(new StreamSource(new StringReader(xmlData)));
System.out.println("XML is valid");
} catch (Exception e) {
System.out.println("XML is invalid: " + e.getMessage());
}
}
}
এখানে marshaller.setSchema() মেথডের মাধ্যমে XML Schema (XSD) ফাইল লোড করা হচ্ছে এবং marshaller.unmarshal() মেথড ব্যবহার করে XML ডেটা ভ্যালিডেট করা হচ্ছে। যদি XML ডেটা XSD এর সাথে সঠিকভাবে মেলে, তবে এটি "XML is valid" মুদ্রিত করবে। অন্যথায়, একটি ব্যতিক্রম (exception) ফেলা হবে।
আউটপুট
যদি XML ডেটা XSD এর সাথে সঠিকভাবে মেলে, তবে আপনি নিচের আউটপুট পাবেন:
XML is valid
এবং যদি কোনো ত্রুটি ঘটে, যেমন যদি XML ডেটার কাঠামো XSD এর সাথে মেলে না, তবে আউটপুট হবে:
XML is invalid: [Error message]
স্প্রিং ওএক্সএম ব্যবহার করে XML Schema Validation খুবই সহজ এবং কার্যকরী। এটি নিশ্চিত করতে সাহায্য করে যে XML ডেটা সঠিক কাঠামো এবং কনটেন্ট অনুযায়ী তৈরি হয়েছে, যা বড় প্রকল্প এবং সার্ভিসেসে অপরিহার্য।
স্প্রিং OXM (Spring OXM) একটি শক্তিশালী টুল যা XML ডাটা এবং জাভা অবজেক্টের মধ্যে রূপান্তর করতে ব্যবহৃত হয়। তবে কিছু ক্ষেত্রে সাধারণ Serializer এবং Deserializer প্রক্রিয়া যথেষ্ট হতে পারে না, বিশেষত যখন ডাটা কাঠামো জটিল বা কাস্টম রূপে প্রয়োজন হয়। এই পরিস্থিতিতে Custom Serializer এবং Deserializer ব্যবহারের প্রয়োজন পড়ে। Custom Serializer এবং Deserializer ব্যবহৃত হয় যখন ডেটার বিশেষ ধরনের রূপান্তর বা প্রক্রিয়াকরণের প্রয়োজন হয়, যা ডিফল্ট ম্যাপিংয়ের বাইরে চলে যায়।
Custom Serializer
Custom Serializer একটি কাস্টম পদ্ধতি যা অবজেক্টকে XML ডকুমেন্টে রূপান্তর করতে ব্যবহৃত হয়। সাধারণত, স্প্রিং OXM এবং অন্যান্য XML বাইনডিং টুলগুলো জাভা অবজেক্টগুলিকে XML ডকুমেন্টে রূপান্তর করার জন্য স্বয়ংক্রিয়ভাবে কিছু নিয়ম অনুসরণ করে, তবে কখনো কখনো ডেটার নির্দিষ্ট কাঠামো বা পদ্ধতির প্রয়োজন হয়, যা ডিফল্ট Serializer পূর্ণ করতে পারে না। এই অবস্থায় Custom Serializer তৈরি করা হয়, যা অবজেক্টকে XML আউটপুটে ঠিকভাবে রূপান্তর করতে সাহায্য করে।
Custom Serializer এর প্রয়োজনীয়তা
- বিশেষ ডাটা ফরম্যাট: যদি XML ফাইলের মধ্যে ডাটা একটি নির্দিষ্ট ফরম্যাটে থাকতে হয়, তবে Custom Serializer ব্যবহার করে সেই ফরম্যাট নিশ্চিত করা যায়।
- ডাটা রূপান্তর প্যাটার্ন: কিছু ক্ষেত্রে জাভা অবজেক্টের ডাটা রূপান্তর করতে বিশেষ কনভার্শন প্যাটার্ন ব্যবহার করতে হয়, যা ডিফল্ট Serializer দ্বারা করা সম্ভব নয়।
- অ্যাডভান্সড কাস্টমাইজেশন: যদি XML ডকুমেন্টের মধ্যে কিছু ডাটা এক্সট্র্যাক্ট বা প্রক্রিয়া করতে হয়, যেমন কাস্টম XML ট্যাগ তৈরি বা বিশেষ অ্যাট্রিবিউট যোগ করা, তখন Custom Serializer প্রয়োজন।
Custom Deserializer
Custom Deserializer হলো সেই কাস্টম পদ্ধতি যা XML ডকুমেন্টকে জাভা অবজেক্টে রূপান্তর করতে ব্যবহৃত হয়। যখন XML ডকুমেন্টের কাঠামো বিশেষভাবে কাস্টমাইজড বা জটিল হয়ে ওঠে, তখন Custom Deserializer এর সাহায্যে সেই XML ডকুমেন্টকে সঠিকভাবে জাভা অবজেক্টে রূপান্তর করা যায়।
Custom Deserializer এর প্রয়োজনীয়তা
- কাস্টম XML কাঠামো: যখন XML ফাইলের মধ্যে কাস্টম ডাটা কাঠামো থাকে, যা ডিফল্ট XML মাপিং দ্বারা সমর্থিত হয় না, তখন Custom Deserializer এর মাধ্যমে সঠিকভাবে XML থেকে জাভা অবজেক্টে রূপান্তর করা যায়।
- বিভিন্ন ডাটা প্রকার: XML ডকুমেন্টে বিভিন্ন ধরনের ডাটা ফরম্যাট (যেমন: তারিখ, সময়, ইত্যাদি) থাকতে পারে, যা সাধারণভাবে রূপান্তর করা সম্ভব নয়। Custom Deserializer ব্যবহার করে এই ডাটা প্রকারগুলোর রূপান্তর কাস্টমাইজ করা যায়।
- বিকল্প XML ফরম্যাট: যদি XML ফাইলের মধ্যে কোন নির্দিষ্ট ফরম্যাটের ডাটা থাকে, যেমন বিশেষ অ্যাট্রিবিউট বা ট্যাগ নাম, তাহলে Custom Deserializer সেই কাস্টম ট্যাগ এবং অ্যাট্রিবিউটগুলো সঠিকভাবে প্রোসেস করার জন্য ব্যবহার করা হয়।
Custom Serializer এবং Deserializer এর উদাহরণ
ধরা যাক, আমাদের একটি Person ক্লাস আছে এবং তারিখের ডাটা XML ফরম্যাটে বিশেষভাবে কাস্টমাইজ করতে হবে। তাহলে আমরা একটি Custom Serializer এবং Custom Deserializer তৈরি করতে পারি।
Custom Serializer উদাহরণ
import org.springframework.oxm.Marshaller;
import org.springframework.oxm.XmlMappingException;
import org.springframework.oxm.jaxb.Jaxb2Marshaller;
public class CustomPersonSerializer implements Marshaller {
@Override
public void marshal(Object graph, OutputStream os) throws XmlMappingException, IOException {
Person person = (Person) graph;
String xml = "<person><name>" + person.getName() + "</name><date>" +
new SimpleDateFormat("yyyy-MM-dd").format(person.getBirthDate()) + "</date></person>";
os.write(xml.getBytes());
}
@Override
public Object unmarshal(InputStream is) throws XmlMappingException, IOException {
// Custom deserialization logic
return null;
}
}
Custom Deserializer উদাহরণ
import org.springframework.oxm.Unmarshaller;
import org.springframework.oxm.XmlMappingException;
import org.springframework.oxm.jaxb.Jaxb2Marshaller;
public class CustomPersonDeserializer implements Unmarshaller {
@Override
public Object unmarshal(InputStream is) throws XmlMappingException, IOException {
// Custom deserialization logic to parse XML and create Person object
return null;
}
@Override
public void marshal(Object graph, OutputStream os) throws XmlMappingException, IOException {
// Marshal logic
}
}
Custom Serializer এবং Deserializer এর ব্যবহার
স্প্রিং OXM এ Custom Serializer এবং Deserializer ব্যবহার করার জন্য আপনি কনফিগারেশন ফাইলে এগুলো নির্ধারণ করতে পারেন:
<bean id="customMarshaller" class="com.example.CustomPersonSerializer"/>
<bean id="customUnmarshaller" class="com.example.CustomPersonDeserializer"/>
এই কনফিগারেশন দ্বারা আপনি XML ডকুমেন্ট এবং জাভা অবজেক্টের মধ্যে কাস্টম রূপান্তর প্রক্রিয়া সম্পাদন করতে পারবেন।
সারাংশ
Custom Serializer এবং Custom Deserializer এর মাধ্যমে আপনি যখন ডিফল্ট XML বাইনডিং টুলসের বাইরে যেতে চান, তখন XML এবং জাভা অবজেক্টের মধ্যে বিশেষভাবে কাস্টম রূপান্তর সম্পাদন করতে পারেন। এটি বিশেষ ডাটা কাঠামো, কাস্টম ফরম্যাট এবং অ্যাডভান্সড ডাটা প্রসেসিংয়ের ক্ষেত্রে অত্যন্ত গুরুত্বপূর্ণ হয়ে ওঠে। স্প্রিং OXM ব্যবহারের ক্ষেত্রে যখন আপনি XML ডকুমেন্টের সাথে জটিল রূপান্তর করতে চান, তখন এই কাস্টমাইজেশন খুবই কার্যকরী।
স্প্রিং ওএক্সএম (Spring OXM) এ কাস্টম Serialization/Deserialization কনফিগারেশন করতে হলে, আপনি আপনার XML ডেটার নির্দিষ্ট ফরম্যাট এবং Java অবজেক্টের মধ্যে কাস্টম রূপান্তর লজিক প্রয়োগ করতে পারবেন। এর মাধ্যমে আপনি স্প্রিং ওএক্সএম এর সাথে একত্রিত হয়ে কাস্টম কনভার্সন এবং XML ম্যাপিং কনফিগারেশন তৈরি করতে পারেন। সাধারণত, এর জন্য আপনি Spring OXM এর সাথে JAXB, Castor বা অন্যান্য XML ম্যাপিং ফ্রেমওয়ার্ক ব্যবহার করতে পারেন।
এখানে, Spring OXM এ কাস্টম Serialization/Deserialization কনফিগারেশন কিভাবে তৈরি করবেন তা বিস্তারিতভাবে আলোচনা করা হবে।
পদক্ষেপ ১: Maven পম.xml কনফিগারেশন
প্রথমে, Maven প্রকল্পে স্প্রিং ওএক্সএম এবং যে কোনো XML ম্যাপিং লাইব্রেরি যেমন JAXB বা Castor ডিপেনডেন্সি যোগ করতে হবে। উদাহরণস্বরূপ, JAXB ডিপেনডেন্সি:
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>5.3.20</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
</dependencies>
পদক্ষেপ ২: কাস্টম Serialization/Deserialization লজিক তৈরি করা
আপনি যদি একটি কাস্টম রূপান্তর পদ্ধতি তৈরি করতে চান, তাহলে আপনাকে একটি কাস্টম Marshaller এবং Unmarshaller তৈরি করতে হবে। কাস্টম Serialization এবং Deserialization তৈরি করতে, আমরা JAXB বা Castor এর সাথে কাস্টম কনভার্সন ক্লাস তৈরি করতে পারি।
কাস্টম Serialization উদাহরণ (Marshaller)
এখানে একটি কাস্টম মার্শালার তৈরি করা হয়েছে যা Java অবজেক্টকে XML এ রূপান্তর করবে:
import org.springframework.oxm.Marshaller;
import org.springframework.oxm.XmlMappingException;
import org.springframework.oxm.jaxb.Jaxb2Marshaller;
import javax.xml.transform.stream.StreamResult;
import java.io.StringWriter;
public class CustomMarshaller implements Marshaller {
private Jaxb2Marshaller jaxb2Marshaller;
public CustomMarshaller() {
this.jaxb2Marshaller = new Jaxb2Marshaller();
this.jaxb2Marshaller.setContextPath("com.example");
}
@Override
public void marshal(Object graph, StreamResult result) throws XmlMappingException {
StringWriter writer = new StringWriter();
jaxb2Marshaller.marshal(graph, new StreamResult(writer));
// কাস্টম Serialization Logic
String customXml = writer.toString();
customXml = customXml.replaceAll("<name>", "<customName>").replaceAll("</name>", "</customName>");
result.getWriter().write(customXml);
}
}
এখানে, CustomMarshaller একটি কাস্টম মার্শালার তৈরি করেছে যা name ট্যাগকে কাস্টম customName ট্যাগে রূপান্তর করে।
কাস্টম Deserialization উদাহরণ (Unmarshaller)
এখন, কাস্টম Unmarshaller তৈরি করা যাক, যা XML থেকে Java অবজেক্টে রূপান্তর করবে:
import org.springframework.oxm.Unmarshaller;
import org.springframework.oxm.XmlMappingException;
import org.springframework.oxm.jaxb.Jaxb2Marshaller;
import javax.xml.transform.stream.StreamSource;
import java.io.StringReader;
public class CustomUnmarshaller implements Unmarshaller {
private Jaxb2Marshaller jaxb2Marshaller;
public CustomUnmarshaller() {
this.jaxb2Marshaller = new Jaxb2Marshaller();
this.jaxb2Marshaller.setContextPath("com.example");
}
@Override
public Object unmarshal(StreamSource source) throws XmlMappingException {
// XML থেকে Java অবজেক্টে রূপান্তর
String xml = source.getReader().toString();
// কাস্টম Deserialization Logic
xml = xml.replaceAll("<customName>", "<name>").replaceAll("</customName>", "</name>");
StreamSource modifiedSource = new StreamSource(new StringReader(xml));
return jaxb2Marshaller.unmarshal(modifiedSource);
}
}
এখানে, CustomUnmarshaller XML থেকে customName ট্যাগের মধ্যে থাকা ডেটা পুনরায় name ট্যাগে রূপান্তর করে।
পদক্ষেপ ৩: Spring OXM কনফিগারেশন
এখন, Spring OXM কনফিগারেশন তৈরি করতে হবে যাতে কাস্টম মার্শালার এবং আনমার্শালার ব্যবহার করা হয়। নিচে Spring কনফিগারেশন ক্লাসের উদাহরণ দেওয়া হলো:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.oxm.Marshaller;
import org.springframework.oxm.Unmarshaller;
@Configuration
public class SpringConfig {
@Bean
public Marshaller marshaller() {
return new CustomMarshaller(); // কাস্টম মার্শালার
}
@Bean
public Unmarshaller unmarshaller() {
return new CustomUnmarshaller(); // কাস্টম আনমার্শালার
}
}
এখানে, আমরা কাস্টম Marshaller এবং Unmarshaller ক্লাসগুলোকে Spring কনফিগারেশন ফাইলে Bean হিসেবে নিবন্ধিত করেছি।
পদক্ষেপ ৪: XML থেকে Java অবজেক্টে রূপান্তর
এখন, Spring কনফিগারেশন ক্লাসের সাহায্যে XML থেকে Java অবজেক্টে রূপান্তর করা হবে:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.oxm.Unmarshaller;
import java.io.StringReader;
public class XmlToObject {
public static void main(String[] args) throws Exception {
ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
Unmarshaller unmarshaller = context.getBean(Unmarshaller.class);
// XML String
String xml = "<person><customName>John Doe</customName><age>30</age></person>";
// XML থেকে Java অবজেক্টে রূপান্তর
Person person = (Person) unmarshaller.unmarshal(new StringReader(xml));
System.out.println(person.getName()); // Output: John Doe
System.out.println(person.getAge()); // Output: 30
}
}
এখানে, Person ক্লাসের name ফিল্ডে customName ট্যাগের ডেটা রূপান্তরিত হবে।
পদক্ষেপ ৫: Java অবজেক্ট থেকে XML এ রূপান্তর
এখন, Java অবজেক্ট থেকে XML এ রূপান্তর করতে কাস্টম মার্শালার ব্যবহার করা হবে:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.oxm.Marshaller;
import java.io.StringWriter;
public class ObjectToXml {
public static void main(String[] args) throws Exception {
ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
Marshaller marshaller = context.getBean(Marshaller.class);
// Java অবজেক্ট
Person person = new Person();
person.setName("Alice");
person.setAge(25);
// Java অবজেক্ট থেকে XML এ রূপান্তর
StringWriter writer = new StringWriter();
marshaller.marshal(person, new StreamResult(writer));
String xmlOutput = writer.toString();
System.out.println(xmlOutput); // Output: <person><customName>Alice</customName><age>25</age></person>
}
}
এখানে, Person অবজেক্টটি customName ট্যাগের সাথে XML আউটপুট প্রদান করবে।
সারাংশ
Spring OXM এ কাস্টম Serialization এবং Deserialization কনফিগারেশন তৈরি করার মাধ্যমে আপনি XML এবং Java অবজেক্টের মধ্যে কাস্টম রূপান্তর করতে পারবেন। এর জন্য কাস্টম মার্শালার এবং আনমার্শালার তৈরি করা হয়, যা XML ফরম্যাটে ডেটা কাস্টমাইজ করতে সাহায্য করে।
Custom Serializer/Deserializer তৈরি করার প্রয়োজন হতে পারে যখন আপনার জাভা অবজেক্টকে XML ফরম্যাটে রূপান্তরের সময় বিশেষ ধরনের কাস্টম লজিক প্রয়োগ করতে হয়। Spring OXM একটি সহজ উপায় প্রদান করে যেখানে আপনি JAXB বা অন্য যে কোন XML-ম্যাপিং লাইব্রেরি ব্যবহার করে কাস্টম সিরিয়ালাইজার এবং ডেসিরিয়ালাইজার তৈরি করতে পারেন। এই কাস্টম সিরিয়ালাইজার এবং ডেসিরিয়ালাইজার ব্যবহার করা হয় যখন ডেটার কিছু নির্দিষ্ট ফরম্যাট, স্টাইল বা কাঠামো প্রয়োজন।
Custom Serializer এবং Deserializer এর ধারণা
- Serializer: এটি জাভা অবজেক্টকে XML ফরম্যাটে রূপান্তর করে (Marshalling)।
- Deserializer: এটি XML ডেটাকে জাভা অবজেক্টে রূপান্তর করে (Unmarshalling)।
উদাহরণ: Custom Serializer এবং Deserializer তৈরি করা
এখানে আমরা একটি কাস্টম সিরিয়ালাইজার এবং ডেসিরিয়ালাইজার তৈরি করব, যা Date ফিল্ডকে একটি নির্দিষ্ট ফরম্যাটে রূপান্তর করবে।
১. Custom Serializer তৈরি
ধরা যাক আমাদের একটি Employee ক্লাস আছে, এবং এতে একটি Date ফিল্ড রয়েছে, যার মান XML আউটপুটে একটি নির্দিষ্ট ফরম্যাটে প্রদর্শন করতে হবে। এটি করার জন্য আমরা JAXB এর মাধ্যমে কাস্টম সিরিয়ালাইজার তৈরি করব।
১.১. Date ফিল্ডের জন্য Custom Serializer:
import javax.xml.bind.annotation.adapters.XmlAdapter;
import java.text.SimpleDateFormat;
import java.util.Date;
// Custom Serializer for Date
public class DateAdapter extends XmlAdapter<String, Date> {
private final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
@Override
public Date unmarshal(String v) throws Exception {
return dateFormat.parse(v);
}
@Override
public String marshal(Date v) throws Exception {
return dateFormat.format(v);
}
}
এই DateAdapter ক্লাসের মাধ্যমে, আপনি Date ফিল্ডকে yyyy-MM-dd ফরম্যাটে কনভার্ট করতে পারবেন। marshal() মেথডটি Date অবজেক্টকে XML স্ট্রিং এ রূপান্তর করবে, এবং unmarshal() মেথডটি XML স্ট্রিংকে Date অবজেক্টে রূপান্তর করবে।
১.২. Employee ক্লাসে কাস্টম সিরিয়ালাইজার প্রয়োগ করা
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import java.util.Date;
@XmlRootElement
public class Employee {
private int id;
private String name;
private Date hireDate;
@XmlElement
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@XmlElement
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@XmlElement
@XmlJavaTypeAdapter(DateAdapter.class) // Custom Adapter applied here
public Date getHireDate() {
return hireDate;
}
public void setHireDate(Date hireDate) {
this.hireDate = hireDate;
}
}
এখানে, @XmlJavaTypeAdapter(DateAdapter.class) অ্যানোটেশনটি Date ফিল্ডের উপর প্রয়োগ করা হয়েছে, যা কাস্টম সিরিয়ালাইজার (DateAdapter) ব্যবহার করবে।
২. Custom Deserializer তৈরি
ডেসিরিয়ালাইজারের কাজ হলো XML ডেটা থেকে জাভা অবজেক্ট তৈরি করা। নিচে কাস্টম ডেসিরিয়ালাইজার তৈরি করার উদাহরণ দেওয়া হলো, যেটি XML ফরম্যাট থেকে Date অবজেক্টে রূপান্তর করবে।
২.১. DateAdapter ডেসিরিয়ালাইজারের জন্য
DateAdapter ক্লাসটি আগেই তৈরি করা হয়েছে, এবং এটি unmarshal() মেথডের মাধ্যমে XML স্ট্রিং থেকে Date অবজেক্টে রূপান্তর করবে।
৩. Marshalling এবং Unmarshalling এর মাধ্যমে Custom Serializer/Deserializer পরীক্ষা করা
Marshalling (Java Object to XML):
import org.springframework.oxm.jaxb.Jaxb2Marshaller;
import javax.xml.transform.stream.StreamResult;
import java.io.StringWriter;
import java.util.Date;
public class MarshallingExample {
public static void main(String[] args) throws Exception {
// Employee অবজেক্ট তৈরি করা
Employee employee = new Employee();
employee.setId(101);
employee.setName("John Doe");
employee.setHireDate(new SimpleDateFormat("yyyy-MM-dd").parse("2024-12-19"));
// Jaxb2Marshaller ইনস্ট্যান্স তৈরি করা
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setClassesToBeBound(Employee.class);
// XML আউটপুট লেখার জন্য StringWriter তৈরি করা
StringWriter writer = new StringWriter();
// Marshalling প্রক্রিয়া: Employee অবজেক্টকে XML-এ রূপান্তরিত করা
marshaller.marshal(employee, new StreamResult(writer));
// XML আউটপুট প্রিন্ট করা
System.out.println("XML Output: \n" + writer.toString());
}
}
Unmarshalling (XML to Java Object):
import org.springframework.oxm.jaxb.Jaxb2Marshaller;
import javax.xml.transform.stream.StreamSource;
import java.io.StringReader;
public class UnmarshallingExample {
public static void main(String[] args) throws Exception {
String xml = "<employee><id>101</id><name>John Doe</name><hireDate>2024-12-19</hireDate></employee>";
// Jaxb2Marshaller ইনস্ট্যান্স তৈরি করা
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setClassesToBeBound(Employee.class);
// Unmarshalling প্রক্রিয়া: XML থেকে Employee অবজেক্টে রূপান্তর
Employee employee = (Employee) marshaller.unmarshal(new StreamSource(new StringReader(xml)));
// Employee ডেটা প্রদর্শন করা
System.out.println("Employee ID: " + employee.getId());
System.out.println("Employee Name: " + employee.getName());
System.out.println("Employee Hire Date: " + new SimpleDateFormat("yyyy-MM-dd").format(employee.getHireDate()));
}
}
উপসংহার
Spring OXM-এর মাধ্যমে Custom Serializer এবং Deserializer তৈরি করলে আপনি XML ডেটার ফরম্যাটে বিশেষ কাস্টমাইজেশন প্রয়োগ করতে পারেন, যা সাধারণ XML রূপান্তরের চেয়ে বেশি নমনীয়তা প্রদান করে। কাস্টম সিরিয়ালাইজার এবং ডেসিরিয়ালাইজার ব্যবহারের মাধ্যমে আপনি নিজের প্রয়োজন অনুযায়ী ডেটা রূপান্তর করতে পারেন, যেমন ডেটার ফরম্যাট পরিবর্তন করা বা বিশেষ ধরনের প্রক্রিয়া প্রয়োগ করা।
Read more