Spring OXM এবং REST API Integration

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

321

Spring OXM এবং REST API Integration খুবই কার্যকরী যখন আপনাকে REST API-এর মাধ্যমে Object এবং XML ডেটার বিনিময় করতে হয়। Spring Framework-এর REST এবং OXM মডিউল একসাথে ব্যবহার করে XML ডেটা প্রক্রিয়া করা যায়। এখানে একটি উদাহরণসহ প্রক্রিয়াটি ব্যাখ্যা করা হলো।


Spring OXM এবং REST API Integration-এর স্টেপগুলো

1. Maven Dependency যোগ করা

Spring OXM এবং REST API ব্যবহার করতে নিচের ডিপেন্ডেন্সি প্রয়োজন:

<dependencies>
    <!-- Spring OXM -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-oxm</artifactId>
        <version>5.3.22</version>
    </dependency>

    <!-- Spring Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- JAXB (XML Binding) -->
    <dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>2.3.1</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

Java 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. REST Controller তৈরি করা

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.oxm.jaxb.Jaxb2Marshaller;
import org.springframework.web.bind.annotation.*;

import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import java.io.StringReader;
import java.io.StringWriter;

@RestController
@RequestMapping("/api/users")
public class UserController {

    @Autowired
    private Jaxb2Marshaller marshaller;

    @PostMapping(value = "/xml", consumes = "application/xml", produces = "application/xml")
    public String processXml(@RequestBody String xmlInput) {
        try {
            // Unmarshal (XML to Object)
            User user = (User) marshaller.unmarshal(new StreamSource(new StringReader(xmlInput)));

            System.out.println("Received User: " + user.getName());

            // Modify or process the User object
            user.setName(user.getName() + " (Processed)");

            // Marshal (Object to XML)
            StringWriter writer = new StringWriter();
            marshaller.marshal(user, new StreamResult(writer));

            return writer.toString();
        } catch (Exception e) {
            e.printStackTrace();
            return "<error>Processing failed</error>";
        }
    }
}

5. Spring Boot Main Class

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringOxmRestApiApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringOxmRestApiApplication.class, args);
    }
}

API-এর Input এবং Output

POST API:

  • URL: http://localhost:8080/api/users/xml
  • Header: Content-Type: application/xml
  • Body:
<user>
    <id>1</id>
    <name>John Doe</name>
    <email>john.doe@example.com</email>
</user>

Response:

<user>
    <id>1</id>
    <name>John Doe (Processed)</name>
    <email>john.doe@example.com</email>
</user>

বিস্তারিত প্রক্রিয়া

  1. XML থেকে Object (Unmarshalling):
    marshaller.unmarshal() ব্যবহার করে XML String-কে User Object-এ রূপান্তর করা হয়।
  2. Object থেকে XML (Marshalling):
    marshaller.marshal() ব্যবহার করে Object-কে XML String-এ রূপান্তর করা হয়।
  3. REST API:
    Spring REST Controller @RequestBody ব্যবহার করে XML ডেটা গ্রহণ করে, প্রক্রিয়া করে এবং XML আউটপুট দেয়।

উপসংহার

Spring OXM এবং REST API Integration-এর মাধ্যমে XML ভিত্তিক ডেটা প্রসেসিং খুবই সহজ। এটি JAXB বা অন্য XML Binding Framework ব্যবহার করে Object এবং XML-এর মধ্যে Mapping করতে পারে। REST API-তে XML ডেটা গ্রহণ এবং রেসপন্স দেওয়ার জন্য এটি অত্যন্ত কার্যকর।

Content added By

Spring OXM (Object-XML Mapping) এবং REST API এর মধ্যে একটি সম্পর্ক তৈরি হয় যখন REST API XML বা JSON ডেটার মাধ্যমে ক্লায়েন্ট এবং সার্ভারের মধ্যে ডেটা বিনিময় করে। Spring OXM XML ডেটার serialization এবং deserialization পরিচালনা করে, যা RESTful সিস্টেমে XML-ভিত্তিক ডেটার প্রক্রিয়াকরণের জন্য উপযোগী। REST API সাধারণত JSON এবং XML উভয় ফরম্যাটে ডেটা প্রদান এবং গ্রহণ করতে সক্ষম হয়।


Spring OXM এবং REST API: সম্পর্ক

  1. Serialization এবং Deserialization:
    • REST API-এর মাধ্যমে যখন XML ডেটা ক্লায়েন্ট থেকে সার্ভারে আসে বা সার্ভার থেকে ক্লায়েন্টে যায়, তখন Spring OXM এর Marshaller এবং Unmarshaller ব্যবহার করে Java Object এবং XML এর মধ্যে রূপান্তর করা যায়।
    • এটি RESTful ওয়েব পরিষেবায় XML ফরম্যাটে ডেটা ট্রান্সফারের ক্ষেত্রে কার্যকর।
  2. বহুমুখী ডেটা ফরম্যাট সমর্থন:
    • REST API-এর মাধ্যমে XML ডেটার জন্য Spring OXM সরাসরি JAXB-এর মতো ফ্রেমওয়ার্ককে সমর্থন করে।
    • API-তে XML বা JSON রেসপন্স ফরম্যাট সামলানো সহজ হয়।
  3. বৈধতা:
    • XML ডেটার স্কিমা যাচাই (XSD) করার জন্য Spring OXM ব্যবহার করা যায়, যা REST API-এর ডেটা সমতা নিশ্চিত করতে সহায়তা করে।

Spring OXM সহ REST API উদাহরণ

প্রয়োজনীয় নির্ভরতা (Maven)

<dependencies>
    <!-- Spring Boot Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- Spring OXM -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-oxm</artifactId>
    </dependency>
    <!-- JAXB API -->
    <dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
    </dependency>
</dependencies>

Java Model Class

package com.example.restoxm;

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;

    @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;
    }
}

Spring Configuration

package com.example.restoxm;

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 jaxb2Marshaller() {
        Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
        marshaller.setClassesToBeBound(User.class);
        return marshaller;
    }
}

REST Controller

package com.example.restoxm;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.oxm.jaxb.Jaxb2Marshaller;
import org.springframework.web.bind.annotation.*;

import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import java.io.StringReader;
import java.io.StringWriter;

@RestController
@RequestMapping("/api/users")
public class UserController {

    @Autowired
    private Jaxb2Marshaller marshaller;

    // Serialize Java Object to XML
    @GetMapping(value = "/{id}", produces = MediaType.APPLICATION_XML_VALUE)
    public String getUserAsXml(@PathVariable int id) throws Exception {
        User user = new User();
        user.setId(id);
        user.setName("John Doe");
        user.setEmail("john.doe@example.com");

        StringWriter writer = new StringWriter();
        marshaller.marshal(user, new StreamResult(writer));
        return writer.toString();
    }

    // Deserialize XML to Java Object
    @PostMapping(value = "/xml", consumes = MediaType.APPLICATION_XML_VALUE)
    public String addUserFromXml(@RequestBody String xml) throws Exception {
        StringReader reader = new StringReader(xml);
        User user = (User) marshaller.unmarshal(new StreamSource(reader));
        return "User added: " + user.getName() + ", Email: " + user.getEmail();
    }
}

API-এর টেস্টিং

GET API (XML Response)

GET http://localhost:8080/api/users/1
Accept: application/xml

Response:

<user>
    <id>1</id>
    <name>John Doe</name>
    <email>john.doe@example.com</email>
</user>

POST API (XML Request)

POST http://localhost:8080/api/users/xml
Content-Type: application/xml

<user>
    <id>2</id>
    <name>Jane Doe</name>
    <email>jane.doe@example.com</email>
</user>

Response:

User added: Jane Doe, Email: jane.doe@example.com

Spring OXM এবং REST API-এর সুবিধা

  1. বহুমুখীতা: Spring OXM-এর মাধ্যমে REST API সহজে XML ফরম্যাট সমর্থন করতে পারে।
  2. স্ট্যান্ডার্ডাইজড ডেটা এক্সচেঞ্জ: XML এবং JSON উভয় ক্ষেত্রেই ডেটার নির্ভুলতা বজায় থাকে।
  3. সহজ একীকরণ: Spring OXM RESTful Controller-এ Marshaller এবং Unmarshaller ব্যবহার করে কার্যকর হয়।
  4. বৈধতা নিশ্চিতকরণ: XSD স্কিমা ব্যবহার করে ডেটার বৈধতা নিশ্চিত করা যায়।

উপসংহার

Spring OXM REST API-তে XML ডেটা হ্যান্ডলিংয়ের জন্য একটি শক্তিশালী পদ্ধতি সরবরাহ করে। এর মাধ্যমে REST API-তে XML ডেটা ট্রান্সফার আরও নির্ভুল এবং দক্ষ হয়।

Content added By

স্প্রিং ওএক্সএম (Spring OXM) এর মাধ্যমে REST API এর জন্য XML/JSON ডেটা প্রসেস করা বেশ সহজ। Spring OXM মূলত XML ডেটা প্রসেস করার জন্য ব্যবহৃত হয়, তবে REST API এ JSON এবং XML উভয় ডেটা হ্যান্ডল করার জন্য এটি Spring MVC-এর সাথে ইন্টিগ্রেট করা যেতে পারে।

কীভাবে REST API-তে XML/JSON ডেটা প্রসেস করবেন


১. প্রয়োজনীয় নির্ভরতাগুলো যোগ করা (Maven):

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>5.3.30</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-oxm</artifactId>
    <version>5.3.30</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version>
</dependency>
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.1</version>
</dependency>

২. জাভা মডেল ক্লাস তৈরি (JAXB ব্যবহার করে):

import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "employee")
public class Employee {
    private String name;
    private int age;

    @XmlElement
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @XmlElement
    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

৩. কনফিগারেশন (Spring Config):

XML এবং JSON মার্শালিং এবং আনমার্শালিং এর জন্য কনফিগারেশন:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.xml.MarshallingHttpMessageConverter;
import org.springframework.oxm.jaxb.Jaxb2Marshaller;

import java.util.List;

@Configuration
public class AppConfig {

    @Bean
    public Jaxb2Marshaller jaxb2Marshaller() {
        Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
        marshaller.setClassesToBeBound(Employee.class);
        return marshaller;
    }

    @Bean
    public MarshallingHttpMessageConverter marshallingHttpMessageConverter() {
        MarshallingHttpMessageConverter converter = new MarshallingHttpMessageConverter();
        converter.setMarshaller(jaxb2Marshaller());
        converter.setUnmarshaller(jaxb2Marshaller());
        return converter;
    }

    public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.add(marshallingHttpMessageConverter());
    }
}

৪. REST API কন্ট্রোলার তৈরি:

import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api/employees")
public class EmployeeController {

    @PostMapping(consumes = {MediaType.APPLICATION_XML_VALUE, MediaType.APPLICATION_JSON_VALUE},
                 produces = {MediaType.APPLICATION_XML_VALUE, MediaType.APPLICATION_JSON_VALUE})
    public Employee createEmployee(@RequestBody Employee employee) {
        // ডেটা প্রসেসিং বা সেভ করা
        employee.setName(employee.getName().toUpperCase()); // শুধু ডেমো প্রসেসিং
        return employee;
    }

    @GetMapping(produces = {MediaType.APPLICATION_XML_VALUE, MediaType.APPLICATION_JSON_VALUE})
    public Employee getEmployee() {
        // উদাহরণস্বরূপ একটি Employee রিটার্ন
        Employee employee = new Employee();
        employee.setName("John Doe");
        employee.setAge(30);
        return employee;
    }
}

৫. API পরীক্ষা (Postman বা curl ব্যবহার করে):

XML ডেটা পাঠানো:

POST /api/employees
Content-Type: application/xml
Accept: application/xml

<employee>
    <name>Jane Smith</name>
    <age>25</age>
</employee>

JSON ডেটা পাঠানো:

POST /api/employees
Content-Type: application/json
Accept: application/json

{
    "name": "Jane Smith",
    "age": 25
}

রেসপন্স (XML/JSON):

XML:

<employee>
    <name>JANE SMITH</name>
    <age>25</age>
</employee>

JSON:

{
    "name": "JANE SMITH",
    "age": 25
}

মূল সুবিধা:

  1. XML এবং JSON উভয় ফরম্যাটে সাপোর্ট: Spring OXM-এর সাহায্যে REST API-তে XML ডেটা প্রসেসিং সহজ হয়, এবং Spring MVC-এর সাহায্যে JSON ডেটাও স্বয়ংক্রিয়ভাবে হ্যান্ডেল করা যায়।
  2. স্বয়ংক্রিয় মার্শালিং/আনমার্শালিং: OXM এবং Jackson-এর ইন্টিগ্রেশনের মাধ্যমে ডেটা রূপান্তর স্বয়ংক্রিয় হয়।
  3. উচ্চ কার্যক্ষমতা: Spring-এর বিল্ট-ইন স্ট্রিম-ভিত্তিক প্রসেসিং এবং ক্যাশিং কার্যক্ষমতা বাড়ায়।

আপনি যদি আরও নির্দিষ্ট কিছু জানতে চান, যেমন কাস্টম ডেটা প্রসেসিং বা এডভান্সড ফিচার, তাহলে বলুন!

Content added By

স্প্রিং ওএক্সএম (Spring Object/XML Mapping) ব্যবহার করে Spring MVC এবং RESTful Service-এর মধ্যে XML ডাটা বিনিময়কে আরও সহজ ও কার্যকর করা যায়। এটি XML এবং জাভা অবজেক্টগুলির মধ্যে ম্যাপিং করার জন্য একটি সাধারণ ফ্রেমওয়ার্ক সরবরাহ করে।


Spring MVC-তে OXM ব্যবহার

Spring MVC-তে স্প্রিং ওএক্সএম ব্যবহার করে XML এবং জাভা অবজেক্টের মধ্যে ডাটা কনভার্সন সহজে সম্পন্ন করা যায়।

Spring MVC কনফিগারেশন এবং OXM ইন্টিগ্রেশন

  1. ম্যাভেন ডিপেনডেন্সি যোগ করুন:
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-oxm</artifactId>
    <version>5.x.x</version>
</dependency>
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.x</version>
</dependency>
  1. JAXB ব্যবহার করে Marshaller এবং Unmarshaller কনফিগার করুন:

    <bean id="marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
        <property name="contextPath" value="com.example.model" />
    </bean>
    
  2. Spring MVC কনফিগারেশন:

    <mvc:annotation-driven />
    <bean class="org.springframework.web.servlet.view.xml.MarshallingView">
        <constructor-arg ref="marshaller" />
    </bean>
    
  3. Controller তৈরি করুন:

    @Controller
    @RequestMapping("/api")
    public class ExampleController {
    
        @Autowired
        private Marshaller marshaller;
    
        @GetMapping(value = "/getXml", produces = MediaType.APPLICATION_XML_VALUE)
        @ResponseBody
        public Object getXml() {
            ExampleModel model = new ExampleModel("Example Name", 123);
            return model;
        }
    }
    

RESTful Service-এ OXM ব্যবহার

RESTful Service-এ স্প্রিং ওএক্সএম ব্যবহার করে XML-ফরম্যাটে ডাটা রেসপন্স ও ইনপুট প্রসেস করা হয়।

উদাহরণ: RESTful Service-এ OXM ব্যবহার

  1. ম্যাভেন ডিপেনডেন্সি যোগ করুন: (যেমন আগের মতো JAXB এবং Spring OXM-এর ডিপেনডেন্সি যোগ করতে হবে।)
  2. JAXB মডেল ক্লাস তৈরি করুন:

    import javax.xml.bind.annotation.XmlRootElement;
    
    @XmlRootElement
    public class ExampleModel {
        private String name;
        private int id;
    
        // Constructors, Getters, and Setters
        public ExampleModel() {}
    
        public ExampleModel(String name, int id) {
            this.name = name;
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    }
    
  3. Spring REST Controller তৈরি করুন:

    @RestController
    @RequestMapping("/api")
    public class ExampleRestController {
    
        @GetMapping(value = "/getExample", produces = MediaType.APPLICATION_XML_VALUE)
        public ExampleModel getExample() {
            return new ExampleModel("Example Data", 1001);
        }
    
        @PostMapping(value = "/postExample", consumes = MediaType.APPLICATION_XML_VALUE)
        public ResponseEntity<String> postExample(@RequestBody ExampleModel model) {
            System.out.println("Received: " + model.getName() + ", ID: " + model.getId());
            return ResponseEntity.ok("Data processed successfully");
        }
    }
    
  4. Marshaller এবং Unmarshaller ব্যবহার করে রেসপন্স প্রসেসিং: যদি কাস্টম প্রসেসিং প্রয়োজন হয়, তাহলে সরাসরি Marshaller বা Unmarshaller ব্যবহার করে XML এবং জাভা অবজেক্টের মধ্যে রূপান্তর করা সম্ভব।

প্রচলিত ব্যবহারের ক্ষেত্র

  1. XML ভিত্তিক ডাটা এক্সচেঞ্জ: যেখানে RESTful API-তে XML ফরম্যাট প্রয়োজন।
  2. SOAP ও REST সংযোগ: SOAP সার্ভিস থেকে ডাটা এক্সচেঞ্জের ক্ষেত্রে XML প্রক্রিয়াকরণ।
  3. ওয়েব সার্ভিস ইন্টিগ্রেশন: ভিন্ন সিস্টেমে ডাটা ট্রান্সফারের সময়।

Spring MVC এবং RESTful Service-এর জন্য সুবিধাসমূহ

  • Marshaller/Unmarshaller-এর মাধ্যমে স্বয়ংক্রিয় ডাটা কনভার্সন।
  • ডাটা প্রসেসিং কোড থেকে বাইন্ডিং লজিক পৃথক রাখা।
  • কাস্টমাইজেশন সহজতর।

Spring OXM Spring MVC এবং RESTful Service-এ XML ডাটা বিনিময়ের জন্য একটি শক্তিশালী ও সহজ সমাধান।

Content added By

স্প্রিং ওএক্সএম (Spring OXM) ব্যবহার করে REST API Integration উদাহরণসহ দেখানো হল। এখানে আমরা একটি REST API তৈরি করব যা XML ডেটা পাঠাবে এবং গ্রহণ করবে, এবং এই ডেটার জন্য স্প্রিং ওএক্সএম ব্যবহার করে MarshallingUnmarshalling করা হবে।


ধাপ ১: প্রয়োজনীয় ডিপেন্ডেন্সি যোগ করা (Maven)

<dependencies>
    <!-- Spring Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Spring OXM -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-oxm</artifactId>
    </dependency>

    <!-- JAXB for XML Marshalling -->
    <dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>2.3.1</version>
    </dependency>
</dependencies>

ধাপ ২: JAXB মডেল তৈরি করা

Student মডেল:

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "student")
public class Student {

    private String id;
    private String name;
    private String department;

    @XmlElement
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    @XmlElement
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @XmlElement
    public String getDepartment() {
        return department;
    }

    public void setDepartment(String department) {
        this.department = department;
    }
}

ধাপ ৩: স্প্রিং ওএক্সএম কনফিগারেশন

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.oxm.jaxb.Jaxb2Marshaller;

@Configuration
public class OXMConfig {

    @Bean
    public Jaxb2Marshaller marshaller() {
        Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
        marshaller.setClassesToBeBound(Student.class);
        return marshaller;
    }
}

ধাপ ৪: REST API কনট্রোলার

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.oxm.jaxb.Jaxb2Marshaller;
import org.springframework.web.bind.annotation.*;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import java.io.StringReader;
import java.io.StringWriter;

@RestController
@RequestMapping("/api/students")
public class StudentController {

    @Autowired
    private Jaxb2Marshaller marshaller;

    // POST Request to Accept XML and Convert to Object
    @PostMapping(consumes = "application/xml", produces = "application/xml")
    public String createStudent(@RequestBody String xmlData) {
        try {
            // Unmarshalling: XML to Object
            StringReader reader = new StringReader(xmlData);
            Student student = (Student) marshaller.unmarshal(new StreamSource(reader));

            // Business logic (for example purposes)
            student.setName(student.getName() + " (Processed)");

            // Marshalling: Object to XML
            StringWriter writer = new StringWriter();
            marshaller.marshal(student, new StreamResult(writer));

            return writer.toString();
        } catch (Exception e) {
            return "<error>Invalid XML</error>";
        }
    }
}

ধাপ ৫: API টেস্ট করা

১. POST Request পাঠানো:

POST /api/students
Content-Type: application/xml
Accept: application/xml

<student>
    <id>1</id>
    <name>John Doe</name>
    <department>Computer Science</department>
</student>

২. Response:

<student>
    <id>1</id>
    <name>John Doe (Processed)</name>
    <department>Computer Science</department>
</student>

উপকারিতা:

  1. XML ডেটা হ্যান্ডলিং: Spring OXM ব্যবহার করে XML ডেটার ম্যাপিং অত্যন্ত সহজ এবং কার্যকর।
  2. ফ্লেক্সিবল: জাভা অবজেক্ট এবং XML ডেটার মধ্যে দ্বিমুখী রূপান্তর দ্রুত হয়।
  3. REST API ইন্টিগ্রেশন: XML ভিত্তিক API-এর জন্য আদর্শ।

আপনার যদি এই উদাহরণে আরও কিছু কাস্টমাইজেশন প্রয়োজন হয়, তাহলে জানাবেন! 😊

Content added By
Promotion

Are you sure to start over?

Loading...