উদাহরণ সহ Streaming API Integration

Spring OXM এবং Streaming API Integration - স্প্রিং ওএক্সএম (Spring OXM) - Java Technologies

315

Spring OXM এবং Streaming API Integration তখন ব্যবহার করা হয়, যখন বড় XML ডেটার সাথে কাজ করতে হয় এবং মেমোরি অপ্টিমাইজেশনের প্রয়োজন হয়। Spring OXM-কে StAX (Streaming API for XML) বা SAX-এর মাধ্যমে ইন্টিগ্রেট করে XML ডেটা স্ট্রিম আকারে পড়া বা লেখা সম্ভব। এটি বড় XML ডেটা প্রসেস করার সময় মেমোরি এবং কর্মদক্ষতা উন্নত করে।


Spring OXM এবং Streaming API Integration-এর বৈশিষ্ট্য

  1. Efficient Memory Usage: বড় XML ডেটা সম্পূর্ণ মেমোরিতে লোড না করে স্ট্রিম আকারে প্রসেস করা।
  2. Event-Driven Parsing: ডেটা প্রসেসিং ইভেন্টের মাধ্যমে পরিচালিত হয়, যা দ্রুত এবং মেমোরি-সাশ্রয়ী।
  3. 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>

উপসংহার

  1. XML Streaming Reader: XMLStreamReader ব্যবহার করে বড় XML ফাইল স্ট্রিম আকারে পড়া হয় এবং Spring OXM marshaller.unmarshal() ব্যবহার করে Object-এ রূপান্তর করা হয়।
  2. XML Streaming Writer: XMLStreamWriter ব্যবহার করে স্ট্রিম আকারে XML লেখা হয় এবং Spring OXM marshaller.marshal() ব্যবহার করে Object থেকে XML ডেটা তৈরি করা হয়।
  3. Efficiency: বড় XML ডেটা সম্পূর্ণ মেমোরিতে লোড না করে স্ট্রিম আকারে পরিচালনা করা মেমোরি এবং প্রসেসিং কর্মদক্ষতা উন্নত করে।
Content added By
Promotion

Are you sure to start over?

Loading...