স্প্রিং ওএক্সএম (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 ফরম্যাটে ডেটা কাস্টমাইজ করতে সাহায্য করে।
Read more