Spring OXM এবং Streaming API Integration তখন ব্যবহার করা হয়, যখন বড় XML ডেটার সাথে কাজ করতে হয় এবং মেমোরি অপ্টিমাইজেশনের প্রয়োজন হয়। Spring OXM-কে StAX (Streaming API for XML) বা SAX-এর মাধ্যমে ইন্টিগ্রেট করে XML ডেটা স্ট্রিম আকারে পড়া বা লেখা সম্ভব। এটি বড় XML ডেটা প্রসেস করার সময় মেমোরি এবং কর্মদক্ষতা উন্নত করে।
Spring OXM এবং Streaming API Integration-এর বৈশিষ্ট্য
- Efficient Memory Usage: বড় XML ডেটা সম্পূর্ণ মেমোরিতে লোড না করে স্ট্রিম আকারে প্রসেস করা।
- Event-Driven Parsing: ডেটা প্রসেসিং ইভেন্টের মাধ্যমে পরিচালিত হয়, যা দ্রুত এবং মেমোরি-সাশ্রয়ী।
- Spring OXM Support: Spring OXM-এর সঙ্গে StAX ব্যবহার করে সহজে স্ট্রিমিং সমর্থন করা।
Streaming API Integration-এর উদাহরণ
1. Maven Dependency
Spring OXM এবং StAX ব্যবহার করার জন্য প্রয়োজনীয় ডিপেন্ডেন্সি:
<dependencies>
<!-- Spring OXM -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>5.3.22</version>
</dependency>
<!-- JAXB (XML Binding) -->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
<!-- StAX -->
<dependency>
<groupId>javax.xml.stream</groupId>
<artifactId>stax-api</artifactId>
<version>1.0-2</version>
</dependency>
</dependencies>
2. POJO Class তৈরি করা
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "user")
public class User {
private int id;
private String name;
private String email;
public User() {}
public User(int id, String name, String email) {
this.id = id;
this.name = name;
this.email = email;
}
@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
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
3. Spring Configuration
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.oxm.jaxb.Jaxb2Marshaller;
@Configuration
public class AppConfig {
@Bean
public Jaxb2Marshaller marshaller() {
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setClassesToBeBound(User.class);
return marshaller;
}
}
4. XML Streaming Reader and Writer
XML Data Streaming Reader (Unmarshalling):
import org.springframework.oxm.jaxb.Jaxb2Marshaller;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamReader;
import java.io.FileReader;
public class XmlStreamingReader {
public static void main(String[] args) {
try {
// Initialize StAX Reader
XMLInputFactory factory = XMLInputFactory.newInstance();
XMLStreamReader reader = factory.createXMLStreamReader(new FileReader("users.xml"));
// Spring OXM Marshaller
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setClassesToBeBound(User.class);
// Parse XML and Unmarshal
while (reader.hasNext()) {
if (reader.isStartElement() && "user".equals(reader.getLocalName())) {
User user = (User) marshaller.unmarshal(reader);
System.out.println("User: " + user.getName() + " - " + user.getEmail());
}
reader.next();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
XML Data Streaming Writer (Marshalling):
import org.springframework.oxm.jaxb.Jaxb2Marshaller;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamWriter;
import java.io.FileWriter;
public class XmlStreamingWriter {
public static void main(String[] args) {
try {
// Initialize StAX Writer
XMLOutputFactory factory = XMLOutputFactory.newInstance();
XMLStreamWriter writer = factory.createXMLStreamWriter(new FileWriter("output.xml"));
// Start Document
writer.writeStartDocument();
writer.writeStartElement("users");
// Spring OXM Marshaller
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setClassesToBeBound(User.class);
// Create User Objects and Write
User user1 = new User(1, "John Doe", "john.doe@example.com");
User user2 = new User(2, "Jane Doe", "jane.doe@example.com");
marshaller.marshal(user1, new javax.xml.transform.stax.StAXResult(writer));
marshaller.marshal(user2, new javax.xml.transform.stax.StAXResult(writer));
// End Document
writer.writeEndElement();
writer.writeEndDocument();
writer.close();
System.out.println("XML written successfully.");
} catch (Exception e) {
e.printStackTrace();
}
}
}
5. Input File (users.xml)
<users>
<user>
<id>1</id>
<name>John Doe</name>
<email>john.doe@example.com</email>
</user>
<user>
<id>2</id>
<name>Jane Doe</name>
<email>jane.doe@example.com</email>
</user>
</users>
উপসংহার
- XML Streaming Reader:
XMLStreamReaderব্যবহার করে বড় XML ফাইল স্ট্রিম আকারে পড়া হয় এবং Spring OXMmarshaller.unmarshal()ব্যবহার করে Object-এ রূপান্তর করা হয়। - XML Streaming Writer:
XMLStreamWriterব্যবহার করে স্ট্রিম আকারে XML লেখা হয় এবং Spring OXMmarshaller.marshal()ব্যবহার করে Object থেকে XML ডেটা তৈরি করা হয়। - Efficiency: বড় XML ডেটা সম্পূর্ণ মেমোরিতে লোড না করে স্ট্রিম আকারে পরিচালনা করা মেমোরি এবং প্রসেসিং কর্মদক্ষতা উন্নত করে।
Content added By
Read more