Spring OXM (Object-XML Mapping) একটি মডিউল যা Spring ফ্রেমওয়ার্কের অংশ। এটি জাভাতে XML ডেটা এবং অবজেক্টের মধ্যে ম্যাপিং করার জন্য একটি সাধারণ উপায় সরবরাহ করে। Spring OXM বিভিন্ন XML বাইন্ডিং ফ্রেমওয়ার্ক যেমন JAXB, Castor, এবং XStream সমর্থন করে। StAX (Streaming API for XML) এর সাথে Spring OXM ব্যবহার করে আপনি XML ডেটা প্রসেসিংয়ে আরও দক্ষতা অর্জন করতে পারেন, বিশেষ করে স্ট্রিমিং পদ্ধতিতে।
StAX এবং Spring OXM
StAX একটি স্ট্রিমিং প্যারসার যা Pull পদ্ধতিতে কাজ করে। এটি ইভেন্ট-ভিত্তিক প্রোসেসিংয়ের জন্য SAX এর মতো হলেও, ব্যবহারকারীকে XML ডেটার উপর আরও নিয়ন্ত্রণ দেয়। Spring OXM এর সাথে StAX ব্যবহার করলে আপনি XML ডেটার ইফিসিয়েন্ট পড়া এবং লেখা উভয় কাজ করতে পারবেন।
Spring OXM এর StAX ইন্টিগ্রেশন
- StAX Marshaller এবং Unmarshaller সেটআপ: Spring OXM একটি
StaxEventItemWriterএবংStaxEventItemReaderপ্রদান করে যা StAX ব্যবহার করে XML ডেটা লেখার এবং পড়ার জন্য ব্যবহৃত হয়। - Marshaller এবং Unmarshaller কনফিগারেশন: StAX এর জন্য আপনি Spring Bean হিসাবে Marshaller এবং Unmarshaller কনফিগার করতে পারেন। এটি XML ডেটাকে অবজেক্টে এবং অবজেক্টকে XML এ রূপান্তর করার জন্য ব্যবহৃত হয়।
কনফিগারেশন উদাহরণ
নিচে একটি উদাহরণ দেওয়া হলো যেখানে Spring OXM এর সাথে StAX ব্যবহার করা হয়েছে:
Maven ডিপেনডেন্সি
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>5.3.22</version> <!-- আপনার Spring এর ভার্সন অনুসারে আপডেট করুন -->
</dependency>
<dependency>
<groupId>javax.xml.stream</groupId>
<artifactId>stax-api</artifactId>
<version>1.0-2</version>
</dependency>
Java Configuration
import org.springframework.oxm.jaxb.Jaxb2Marshaller;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class XmlConfig {
@Bean
public Jaxb2Marshaller jaxb2Marshaller() {
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setPackagesToScan("com.example.models"); // আপনার প্যাকেজ নাম
return marshaller;
}
}
XML লেখা এবং পড়া (StAX ব্যবহার করে)
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLEventWriter;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLOutputFactory;
import java.io.StringReader;
import java.io.StringWriter;
public class StaxExample {
public static void main(String[] args) throws Exception {
// XML String
String xml = "<person><name>John Doe</name><age>30</age></person>";
// StAX Input
XMLInputFactory inputFactory = XMLInputFactory.newInstance();
XMLEventReader reader = inputFactory.createXMLEventReader(new StringReader(xml));
// StAX Output
XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();
StringWriter stringWriter = new StringWriter();
XMLEventWriter writer = outputFactory.createXMLEventWriter(stringWriter);
// Read and Write XML using StAX
while (reader.hasNext()) {
writer.add(reader.nextEvent());
}
writer.close();
reader.close();
System.out.println("Processed XML: " + stringWriter.toString());
}
}
Spring Batch এ StAX ব্যবহার
Spring OXM এবং StAX একসঙ্গে ব্যবহার করে XML ফাইল প্রোসেসিংয়ের জন্য Spring Batch-এ কাস্টম ItemReader এবং ItemWriter তৈরি করা যায়।
@Bean
public StaxEventItemReader<MyObject> reader(Jaxb2Marshaller marshaller) {
StaxEventItemReader<MyObject> reader = new StaxEventItemReader<>();
reader.setResource(new ClassPathResource("data.xml"));
reader.setFragmentRootElementName("item");
reader.setUnmarshaller(marshaller);
return reader;
}
@Bean
public StaxEventItemWriter<MyObject> writer(Jaxb2Marshaller marshaller) {
StaxEventItemWriter<MyObject> writer = new StaxEventItemWriter<>();
writer.setResource(new FileSystemResource("output.xml"));
writer.setRootTagName("items");
writer.setMarshaller(marshaller);
return writer;
}
উপকারিতা
- পুল-ভিত্তিক পদ্ধতি: StAX পুল-পদ্ধতি ব্যবহার করে, যা SAX থেকে উন্নত।
- মেমোরি দক্ষতা: বড় XML ফাইল প্রোসেসিংয়ের জন্য উপযোগী।
- Spring Integration: সহজভাবে Spring OXM এর মাধ্যমে XML বাইন্ডিং এবং প্রোসেসিং করতে পারা যায়।
এটি Spring OXM এবং StAX একত্রে ব্যবহার করার একটি সাধারণ ধারণা। আপনি আপনার প্রয়োজন অনুযায়ী কাস্টমাইজ করতে পারবেন।
Read more