Jackson এবং JAXB Integration

জ্যাকসন (Jackson) - Java Technologies

484

Jackson এবং JAXB (Java Architecture for XML Binding) উভয়ই Java-তে ডেটা বাইন্ডিংয়ের জন্য ব্যবহৃত হয়। Jackson মূলত JSON ডেটা প্রসেস করার জন্য ব্যবহৃত হয়, আর JAXB XML ডেটার জন্য ব্যবহৃত হয়। তবে, কিছু ক্ষেত্রে একই মডেল ক্লাস উভয় ফরম্যাট (JSON এবং XML) সমর্থন করতে পারে। এজন্য Jackson এবং JAXB একসাথে ব্যবহার করা যায়।


Jackson এবং JAXB Integration-এর উদ্দেশ্য

  1. একই মডেল ক্লাস থেকে JSON ও XML সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করা।
  2. JAXB অ্যানোটেশনগুলোকে Jackson JSON প্রসেসিংয়ের জন্য পুনরায় ব্যবহার করা।
  3. JSON এবং XML ফরম্যাটের মধ্যে সামঞ্জস্যপূর্ণ ডেটা হ্যান্ডলিং।

JAXB এবং Jackson কীভাবে একত্রে কাজ করে

  1. JAXB অ্যানোটেশন ব্যবহার করে Jackson-এর JSON ডেটা প্রসেস করা।
  2. Jackson JSON প্রসেসিং সক্ষম করতে JacksonAnnotationIntrospector ব্যবহার করা।
  3. একই ক্লাসে JAXB এবং Jackson-এর অ্যানোটেশন একত্রে ব্যবহার করা।

উদাহরণ

মডেল ক্লাস

import com.fasterxml.jackson.annotation.JsonInclude;
import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlRootElement;

@JsonInclude(JsonInclude.Include.NON_NULL) // Jackson Annotation
@XmlRootElement // JAXB Annotation
public class User {
    @XmlElement(name = "user_id") // JAXB Annotation
    private int id;

    @XmlElement(name = "user_name") // JAXB Annotation
    private String name;

    @XmlElement(name = "user_email") // JAXB Annotation
    private String email;

    // Getters and Setters
    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

JSON প্রসেসিং

import com.fasterxml.jackson.databind.ObjectMapper;

public class JacksonExample {
    public static void main(String[] args) throws Exception {
        ObjectMapper objectMapper = new ObjectMapper();

        // JSON ডেটা থেকে User অবজেক্ট তৈরি
        String json = "{ \"user_id\": 1, \"user_name\": \"John Doe\", \"user_email\": \"john@example.com\" }";
        User user = objectMapper.readValue(json, User.class);

        System.out.println("Name: " + user.getName());
        
        // User অবজেক্ট থেকে JSON তৈরি
        String serializedJson = objectMapper.writeValueAsString(user);
        System.out.println("Serialized JSON: " + serializedJson);
    }
}

আউটপুট:

Name: John Doe
Serialized JSON: {"user_id":1,"user_name":"John Doe","user_email":"john@example.com"}

XML প্রসেসিং

import jakarta.xml.bind.JAXBContext;
import jakarta.xml.bind.Marshaller;
import jakarta.xml.bind.Unmarshaller;
import java.io.StringReader;
import java.io.StringWriter;

public class JaxbExample {
    public static void main(String[] args) throws Exception {
        // XML থেকে User অবজেক্ট তৈরি
        String xml = "<user><user_id>1</user_id><user_name>John Doe</user_name><user_email>john@example.com</user_email></user>";

        JAXBContext context = JAXBContext.newInstance(User.class);
        Unmarshaller unmarshaller = context.createUnmarshaller();
        User user = (User) unmarshaller.unmarshal(new StringReader(xml));

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

        // User অবজেক্ট থেকে XML তৈরি
        Marshaller marshaller = context.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        StringWriter writer = new StringWriter();
        marshaller.marshal(user, writer);

        System.out.println("Serialized XML: \n" + writer);
    }
}

আউটপুট:

Name: John Doe
Serialized XML:
<user>
    <user_id>1</user_id>
    <user_name>John Doe</user_name>
    <user_email>john@example.com</user_email>
</user>

Jackson এবং JAXB-এর অ্যানোটেশন একসাথে ব্যবহার করা

JAXB অ্যানোটেশনকে Jackson JSON প্রসেসিং-এ সক্ষম করা

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule;

public class JacksonWithJaxb {
    public static void main(String[] args) throws Exception {
        ObjectMapper objectMapper = new ObjectMapper();

        // JAXB অ্যানোটেশন সক্রিয় করা
        objectMapper.registerModule(new JaxbAnnotationModule());

        // JSON ডেটা থেকে User অবজেক্ট তৈরি
        String json = "{ \"user_id\": 1, \"user_name\": \"John Doe\", \"user_email\": \"john@example.com\" }";
        User user = objectMapper.readValue(json, User.class);

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

        // User অবজেক্ট থেকে JSON তৈরি
        String serializedJson = objectMapper.writeValueAsString(user);
        System.out.println("Serialized JSON: " + serializedJson);
    }
}

Jackson এবং JAXB একত্রে ব্যবহার করে একই মডেল ক্লাস থেকে JSON এবং XML উভয় ফরম্যাটে ডেটা প্রসেস করা সম্ভব। @JsonInclude, @XmlElement, এবং অন্যান্য অ্যানোটেশন একসাথে ব্যবহার করলে ডেটা বাইন্ডিং আরও কার্যকর হয়।

JAXB অ্যানোটেশনকে JSON প্রসেসিং সক্ষম করতে JaxbAnnotationModule মডিউল Jackson-এ ব্যবহার করতে হবে।

এই পদ্ধতি বিভিন্ন অ্যাপ্লিকেশনে ব্যবহারকারীদের জন্য এক্সপোর্ট ও ইমপোর্ট সুবিধা প্রদান করতে সহায়ক।

Content added By

JAXB (Java Architecture for XML Binding) এবং Jackson হলো দুটি জনপ্রিয় লাইব্রেরি, যা ডেটা বাইন্ডিং (Data Binding) এর জন্য ব্যবহৃত হয়। তাদের প্রধান পার্থক্য হলো JAXB মূলত XML ডেটার জন্য এবং Jackson মূলত JSON ডেটার জন্য ডিজাইন করা। তবে, উভয় লাইব্রেরি নির্দিষ্ট ক্ষেত্রে XML এবং JSON এর সাথে কাজ করতে পারে।


JAXB (Java Architecture for XML Binding)

  • প্রধান উদ্দেশ্য: Java অবজেক্ট এবং XML এর মধ্যে ডেটা বাইন্ডিং।
  • ডিফল্ট ফরম্যাট: XML।
  • অ্যানোটেশন: @XmlElement, @XmlAttribute, @XmlRootElement
  • ডিপেন্ডেন্সি: Java EE বা Jakarta EE-তে অন্তর্ভুক্ত, তবে Java 9 থেকে এটি আলাদাভাবে যুক্ত করতে হয়।
  • ডেটা ফরম্যাট: শুধুমাত্র XML ফাইলের জন্য কার্যকর (অন্য ডেটা ফরম্যাট সাপোর্ট দেয় না)।
  • ডেসিরিয়ালাইজেশন: XML থেকে Java ক্লাস তৈরি করতে সক্ষম।

JAXB উদাহরণ:

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

@XmlRootElement
public class User {
    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;
    }
}

Jackson

  • প্রধান উদ্দেশ্য: Java অবজেক্ট এবং JSON এর মধ্যে ডেটা বাইন্ডিং।
  • ডিফল্ট ফরম্যাট: JSON।
  • অ্যানোটেশন: @JsonProperty, @JsonIgnore, @JsonCreator, @JsonValue
  • ডিপেন্ডেন্সি: Third-party লাইব্রেরি যা আলাদাভাবে যোগ করতে হয়।
  • ডেটা ফরম্যাট: JSON এর পাশাপাশি YAML, XML, CBOR, এবং আরও অনেক ফরম্যাট সাপোর্ট করে।
  • ডেসিরিয়ালাইজেশন: JSON থেকে Java ক্লাস তৈরি করতে সক্ষম।

Jackson উদাহরণ:

import com.fasterxml.jackson.annotation.JsonProperty;

public class User {
    @JsonProperty("user_name")
    private String name;

    @JsonProperty("user_age")
    private int age;

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

মূল পার্থক্য টেবিল আকারে

বৈশিষ্ট্যJAXBJackson
প্রধান উদ্দেশ্যJava অবজেক্ট এবং XML ডেটার মধ্যে বাইন্ডিং।Java অবজেক্ট এবং JSON ডেটার মধ্যে বাইন্ডিং।
ডিফল্ট ডেটা ফরম্যাটXML।JSON।
অ্যানোটেশন@XmlElement, @XmlRootElement, ইত্যাদি।@JsonProperty, @JsonIgnore, ইত্যাদি।
ডেটা ফরম্যাট সাপোর্টশুধুমাত্র XML।JSON, XML, YAML, CBOR, MessagePack।
ডিপেন্ডেন্সিJava EE / Jakarta EE-তে অন্তর্ভুক্ত।Third-party লাইব্রেরি (Maven বা Gradle-এ যোগ করতে হয়)।
অ্যাপ্লিকেশনXML নির্ভর অ্যাপ্লিকেশন।RESTful API এবং JSON নির্ভর অ্যাপ্লিকেশন।
প্যাকেজিংJava Standard API।Third-party library (FasterXML)।
কাস্টমাইজেশনসীমিত, শুধুমাত্র XML এর সাথে।বেশি ফ্লেক্সিবল, JSON, XML এবং অন্যান্য ফরম্যাট সাপোর্ট।
প্রসেসিং পারফরম্যান্সতুলনামূলক ধীর।তুলনামূলক দ্রুত।

JAXB বনাম Jackson: ব্যবহারের ক্ষেত্র

  • JAXB ব্যবহারের ক্ষেত্র:
    • যখন XML ডেটার সাথে প্রধান কাজ করতে হয়।
    • XML-ভিত্তিক ওয়েব সার্ভিস বা SOAP সার্ভিস ডেভেলপমেন্টে।
  • Jackson ব্যবহারের ক্ষেত্র:
    • JSON-ভিত্তিক RESTful API ডেভেলপমেন্টে।
    • দ্রুত ডেটা প্রসেসিং এবং ফরম্যাট কাস্টমাইজেশনের জন্য।
    • JSON-এর পাশাপাশি YAML বা XML সাপোর্ট করার জন্য।

একই ডেটা ফরম্যাটে কাজের তুলনা

XML Serialization: JAXB বনাম Jackson

JAXB:

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;

User user = new User("John Doe", 25);
JAXBContext context = JAXBContext.newInstance(User.class);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(user, System.out);

Jackson:

import com.fasterxml.jackson.dataformat.xml.XmlMapper;

User user = new User("John Doe", 25);
XmlMapper xmlMapper = new XmlMapper();
String xml = xmlMapper.writeValueAsString(user);
System.out.println(xml);

  • JAXB: XML ফরম্যাট নিয়ে কাজের জন্য বিশেষায়িত। এটি XML ডেটার ক্ষেত্রে সহজ সমাধান প্রদান করে।
  • Jackson: JSON এবং অন্যান্য ডেটা ফরম্যাট (যেমন YAML, XML) নিয়ে কাজের জন্য বহুমুখী এবং ফ্লেক্সিবল। RESTful API ডেভেলপমেন্ট এবং JSON ডেটা প্রসেসিং Jackson-এর জন্য বেশি উপযোগী।
  • Jackson vs JAXB নির্বাচন: নির্ভর করে প্রকল্পের চাহিদা এবং ডেটা ফরম্যাটের প্রয়োজনীয়তার উপর।
Content added By

Jackson লাইব্রেরি সরাসরি JAXB (Java Architecture for XML Binding) অ্যানোটেশন সমর্থন করে। এটি আপনাকে এমন মডেল ক্লাসগুলোর সাথে JSON ডেটা ব্যবহার করতে দেয় যেগুলো ইতিমধ্যেই JAXB অ্যানোটেশন সহ XML ডেটা ম্যানেজ করতে ব্যবহৃত হয়।


JAXB এবং Jackson এর ইন্টিগ্রেশন

JAXB Annotations কি?

JAXB অ্যানোটেশন XML ডেটার Serialization এবং Deserialization করার জন্য Java ক্লাসগুলোর জন্য মেটাডাটা সরবরাহ করে। উদাহরণস্বরূপ:

  • @XmlRootElement: রুট এলিমেন্ট নির্ধারণ করে।
  • @XmlElement: XML এর একটি ফিল্ড বা এলিমেন্ট নির্ধারণ করে।
  • @XmlAttribute: XML এর একটি অ্যাট্রিবিউট নির্ধারণ করে।

Jackson এর জন্য JAXB Annotation মডিউল

Jackson এর একটি অতিরিক্ত মডিউল আছে, যা JAXB অ্যানোটেশনগুলোর সাথে JSON ডেটা ম্যানিপুলেট করতে দেয়।

ম্যাভেন ডিপেনডেন্সি:

<dependency>
    <groupId>com.fasterxml.jackson.module</groupId>
    <artifactId>jackson-module-jaxb-annotations</artifactId>
    <version>2.15.2</version> <!-- সর্বশেষ ভার্সন -->
</dependency>

JAXB Annotation সহ মডেল ক্লাস তৈরি

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

@XmlRootElement
public class User {
    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;
    }
}

ObjectMapper কনফিগারেশন (JAXB Annotation ব্যবহার করে)

JAXB Module রেজিস্টার করা

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule;

public class JacksonWithJaxbExample {
    public static void main(String[] args) throws Exception {
        // JAXB Annotation সমর্থনকারী ObjectMapper তৈরি
        ObjectMapper mapper = new ObjectMapper();
        mapper.registerModule(new JaxbAnnotationModule());

        // মডেল অবজেক্ট তৈরি
        User user = new User();
        user.setName("Alice");
        user.setAge(30);

        // JSON Serialization
        String json = mapper.writeValueAsString(user);
        System.out.println("Serialized JSON: " + json);

        // JSON Deserialization
        String jsonString = "{\"name\":\"Alice\",\"age\":30}";
        User deserializedUser = mapper.readValue(jsonString, User.class);
        System.out.println("Deserialized User: " + deserializedUser.getName() + ", " + deserializedUser.getAge());
    }
}

আউটপুট

Serialization:

{"name":"Alice","age":30}

Deserialization:

Deserialized User: Alice, 30

JAXB এবং JSON এর মধ্যে Mapping

  1. @XmlRootElement → JSON রুট অবজেক্ট।
  2. @XmlElement → JSON এর একটি ফিল্ড।
  3. @XmlAttribute → JSON ফিল্ড হিসেবে কাজ করবে, তবে এটি XML এ অ্যাট্রিবিউট হিসেবে কাজ করে।

উদাহরণ: @XmlAttribute

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

@XmlRootElement
public class Product {
    @XmlAttribute
    private int id;

    private String name;

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

Serialization:

{"id":1,"name":"Laptop"}

Spring Boot এবং JAXB Annotation সহ REST API উদাহরণ

Controller উদাহরণ:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    @GetMapping("/user")
    public User getUser() {
        User user = new User();
        user.setName("Alice");
        user.setAge(30);
        return user;
    }
}

Spring Boot Configuration:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class JacksonConfig {
    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper mapper = new ObjectMapper();
        mapper.registerModule(new JaxbAnnotationModule());
        return mapper;
    }
}

API Output:

{"name":"Alice","age":30}
  • Jackson এবং JAXB এর ইন্টিগ্রেশন আপনাকে JSON এবং XML ফরম্যাট উভয়ের সাথে কাজ করার সময় মডেল ক্লাস পুনরায় লেখার প্রয়োজনীয়তা থেকে মুক্তি দেয়।
  • JaxbAnnotationModule Jackson এর ObjectMapper এ রেজিস্টার করে JAXB অ্যানোটেশন সমর্থন সক্ষম করা যায়।
  • এটি বিশেষভাবে কার্যকর যখন একটি API JSON এবং XML ফরম্যাট উভয়ই সমর্থন করে।
Content added By

Jackson শুধু JSON নয়, XML ডেটা প্রক্রিয়াজাত করতেও সক্ষম। JAXB-অভিযোজিত (JAXB-compatible) ডেটা মডেল দিয়ে Jackson JSON এবং XML উভয় ফরম্যাটে ডেটা হ্যান্ডল করতে পারে। এটি বিশেষত তখন কার্যকর যখন একই ডেটা মডেল থেকে JSON এবং XML উভয়ই উৎপন্ন বা পাঠ করা দরকার।


JAXB এবং Jackson-এর সমন্বয়

Jackson সরাসরি JAXB-এনোটেশন সমর্থন করে, যেমন:

  • @XmlRootElement
  • @XmlElement
  • @XmlAttribute
  • @XmlTransient

প্রয়োজনীয় ডিপেন্ডেন্সি

XML হ্যান্ডলিংয়ের জন্য Jackson-এ jackson-dataformat-xml অন্তর্ভুক্ত করতে হবে।

Maven ডিপেন্ডেন্সি:

<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
    <version>2.15.2</version> <!-- Latest version -->
</dependency>

JSON এবং XML-এর জন্য মডেল ক্লাস তৈরি

মডেল ক্লাস:

import com.fasterxml.jackson.annotation.JsonProperty;
import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlRootElement;

@XmlRootElement
class User {
    @XmlElement
    @JsonProperty
    public int id;

    @XmlElement
    @JsonProperty
    public String name;

    @XmlElement
    @JsonProperty
    public String email;

    @XmlElement
    @JsonProperty
    public Address address;
}

@XmlRootElement
class Address {
    @XmlElement
    @JsonProperty
    public String city;

    @XmlElement
    @JsonProperty
    public String zip;
}

1. JSON Serialization এবং Deserialization

JSON Serialization:

import com.fasterxml.jackson.databind.ObjectMapper;

public class Main {
    public static void main(String[] args) throws Exception {
        User user = new User();
        user.id = 101;
        user.name = "John Doe";
        user.email = "john.doe@example.com";

        Address address = new Address();
        address.city = "Dhaka";
        address.zip = "1212";

        user.address = address;

        // JSON serialization
        ObjectMapper objectMapper = new ObjectMapper();
        String jsonOutput = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(user);
        System.out.println("JSON Output:");
        System.out.println(jsonOutput);
    }
}

আউটপুট:

{
  "id": 101,
  "name": "John Doe",
  "email": "john.doe@example.com",
  "address": {
    "city": "Dhaka",
    "zip": "1212"
  }
}

2. XML Serialization এবং Deserialization

XML Serialization:

import com.fasterxml.jackson.dataformat.xml.XmlMapper;

public class Main {
    public static void main(String[] args) throws Exception {
        User user = new User();
        user.id = 101;
        user.name = "John Doe";
        user.email = "john.doe@example.com";

        Address address = new Address();
        address.city = "Dhaka";
        address.zip = "1212";

        user.address = address;

        // XML serialization
        XmlMapper xmlMapper = new XmlMapper();
        String xmlOutput = xmlMapper.writerWithDefaultPrettyPrinter().writeValueAsString(user);
        System.out.println("XML Output:");
        System.out.println(xmlOutput);
    }
}

আউটপুট:

<User>
  <id>101</id>
  <name>John Doe</name>
  <email>john.doe@example.com</email>
  <address>
    <city>Dhaka</city>
    <zip>1212</zip>
  </address>
</User>

3. JSON এবং XML থেকে Deserialization

JSON থেকে Object:

String jsonInput = """
{
  "id": 101,
  "name": "John Doe",
  "email": "john.doe@example.com",
  "address": {
    "city": "Dhaka",
    "zip": "1212"
  }
}
""";

ObjectMapper objectMapper = new ObjectMapper();
User userFromJson = objectMapper.readValue(jsonInput, User.class);
System.out.println("Name from JSON: " + userFromJson.name);

XML থেকে Object:

String xmlInput = """
<User>
  <id>101</id>
  <name>John Doe</name>
  <email>john.doe@example.com</email>
  <address>
    <city>Dhaka</city>
    <zip>1212</zip>
  </address>
</User>
""";

XmlMapper xmlMapper = new XmlMapper();
User userFromXml = xmlMapper.readValue(xmlInput, User.class);
System.out.println("Name from XML: " + userFromXml.name);

মুখ্য ব্যবহারিক ক্ষেত্র

  1. API ডেভেলপমেন্ট:
    • একক মডেল ব্যবহার করে JSON এবং XML ফরম্যাট সমর্থন।
  2. Cross-Platform Data Exchange:
    • XML ব্যবহারকারী সিস্টেম এবং JSON-ভিত্তিক সিস্টেমের মধ্যে সমন্বয়।
  3. JAXB Migration:
    • JAXB থেকে JSON এবং XML-এ স্থানান্তর।

উপকারিতা

  1. একই মডেল ব্যবহার করে JSON এবং XML উভয় ফরম্যাটে কাজ করা যায়।
  2. JAXB এনোটেশন সমর্থনের জন্য অতিরিক্ত কোড লেখার প্রয়োজন হয় না।
  3. Serialization এবং Deserialization প্রক্রিয়া দ্রুত এবং সহজ।

এভাবে Jackson ব্যবহার করে JSON এবং XML উভয় ফরম্যাট কার্যকরভাবে পরিচালনা করা সম্ভব।

Content added By

JAXB (Java Architecture for XML Binding) এবং Jackson হলো দুটি আলাদা লাইব্রেরি, যেগুলো XML এবং JSON ডেটা প্রক্রিয়াকরণের জন্য ব্যবহৃত হয়। অনেক সময় একই ডেটা মডেল থেকে XML এবং JSON উভয় ধরনের serialization/deserialization প্রয়োজন হয়। Jackson এবং JAXB-এর সমন্বয় করে এটি অর্জন করা যায়।


Jackson এবং JAXB-এর মধ্যে প্রধান পার্থক্য

ফিচারJAXBJackson
প্রাথমিক কাজXML ডেটা প্রক্রিয়াকরণ।JSON ডেটা প্রক্রিয়াকরণ।
অ্যানোটেশনJAXB-specific (@XmlElement, ইত্যাদি)Jackson-specific (@JsonProperty)।
ডেটা ফরম্যাটশুধুমাত্র XML।JSON, XML, YAML, CSV।
IntegrationJAXB annotations পড়তে পারে।JAXB annotations এর জন্য সাপোর্ট প্রদান করে।

JAXB এবং Jackson-এর ইন্টিগ্রেশন করার কারণ

  • একই ডেটা মডেল থেকে XML এবং JSON উভয় serialization/deserialization পরিচালনা করা।
  • কোড পুনর্ব্যবহারযোগ্যতা নিশ্চিত করা।
  • JAXB annotations এর মাধ্যমে JSON এবং XML উভয় ডেটা ফরম্যাটের জন্য সমর্থন।

ইন্টিগ্রেশন প্রক্রিয়া

1. JAXB এবং Jackson ডিপেনডেন্সি যুক্ত করা

Maven ব্যবহার করলে আপনার pom.xml-এ নিচের ডিপেনডেন্সিগুলো যুক্ত করুন:

<dependencies>
    <!-- Jackson Core -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.15.2</version>
    </dependency>

    <!-- Jackson Module for JAXB Annotations -->
    <dependency>
        <groupId>com.fasterxml.jackson.module</groupId>
        <artifactId>jackson-module-jaxb-annotations</artifactId>
        <version>2.15.2</version>
    </dependency>

    <!-- JAXB API -->
    <dependency>
        <groupId>jakarta.xml.bind</groupId>
        <artifactId>jakarta.xml.bind-api</artifactId>
        <version>3.0.2</version>
    </dependency>
</dependencies>

2. JAXB Annotated Class তৈরি করা

একটি ডেটা মডেল ক্লাস তৈরি করুন এবং JAXB-specific annotations ব্যবহার করুন:

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

@XmlRootElement
public class Product {
    private int id;
    private String name;
    private double price;

    @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 double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }
}

3. Jackson ObjectMapper-এ JAXB Module যুক্ত করা

Jackson-এর সাথে JAXB annotations সমর্থন করতে হলে JaxbAnnotationModule যুক্ত করতে হবে।

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule;

public class JacksonJAXBIntegrationExample {
    public static void main(String[] args) throws Exception {
        // ObjectMapper তৈরি
        ObjectMapper objectMapper = new ObjectMapper();

        // JAXB Module যুক্ত করা
        objectMapper.registerModule(new JaxbAnnotationModule());

        // Sample Data
        Product product = new Product();
        product.setId(1);
        product.setName("Smartphone");
        product.setPrice(699.99);

        // JSON Serialization
        String json = objectMapper.writeValueAsString(product);
        System.out.println("JSON Output:");
        System.out.println(json);

        // JSON Deserialization
        String jsonInput = """
                {
                    "id": 2,
                    "name": "Laptop",
                    "price": 999.99
                }
                """;
        Product deserializedProduct = objectMapper.readValue(jsonInput, Product.class);
        System.out.println("Deserialized Product:");
        System.out.println("ID: " + deserializedProduct.getId());
        System.out.println("Name: " + deserializedProduct.getName());
        System.out.println("Price: " + deserializedProduct.getPrice());
    }
}

আউটপুট:

JSON Output:
{"id":1,"name":"Smartphone","price":699.99}

Deserialized Product:
ID: 2
Name: Laptop
Price: 999.99

XML এবং JSON উভয় ফরম্যাটে Serialization/Deserialization

JAXB দিয়ে XML Serialization/Deserialization

import jakarta.xml.bind.JAXBContext;
import jakarta.xml.bind.JAXBException;
import jakarta.xml.bind.Marshaller;
import jakarta.xml.bind.Unmarshaller;
import java.io.StringReader;
import java.io.StringWriter;

public class JAXBExample {
    public static void main(String[] args) throws JAXBException {
        Product product = new Product();
        product.setId(1);
        product.setName("Smartphone");
        product.setPrice(699.99);

        // JAXB Context তৈরি
        JAXBContext context = JAXBContext.newInstance(Product.class);

        // XML Serialization
        StringWriter writer = new StringWriter();
        Marshaller marshaller = context.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(product, writer);
        String xml = writer.toString();
        System.out.println("XML Output:");
        System.out.println(xml);

        // XML Deserialization
        StringReader reader = new StringReader(xml);
        Unmarshaller unmarshaller = context.createUnmarshaller();
        Product deserializedProduct = (Product) unmarshaller.unmarshal(reader);
        System.out.println("Deserialized Product:");
        System.out.println("ID: " + deserializedProduct.getId());
        System.out.println("Name: " + deserializedProduct.getName());
        System.out.println("Price: " + deserializedProduct.getPrice());
    }
}

আউটপুট:

XML Output:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<product>
    <id>1</id>
    <name>Smartphone</name>
    <price>699.99</price>
</product>

Deserialized Product:
ID: 1
Name: Smartphone
Price: 699.99

JSON এবং XML উভয়ের জন্য একই মডেল ব্যবহার

JAXB এবং Jackson ইন্টিগ্রেশন করলে একই মডেল থেকে JSON এবং XML উভয় ফরম্যাট তৈরি করা সম্ভব।

উদাহরণ:

public class CombinedExample {
    public static void main(String[] args) throws Exception {
        Product product = new Product();
        product.setId(1);
        product.setName("Smartphone");
        product.setPrice(699.99);

        // JAXB দিয়ে XML Serialization
        JAXBContext context = JAXBContext.newInstance(Product.class);
        StringWriter writer = new StringWriter();
        Marshaller marshaller = context.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(product, writer);
        System.out.println("XML Output:");
        System.out.println(writer.toString());

        // Jackson দিয়ে JSON Serialization
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.registerModule(new JaxbAnnotationModule());
        String json = objectMapper.writeValueAsString(product);
        System.out.println("JSON Output:");
        System.out.println(json);
    }
}

আউটপুট:

XML Output:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<product>
    <id>1</id>
    <name>Smartphone</name>
    <price>699.99</price>
</product>

JSON Output:
{"id":1,"name":"Smartphone","price":699.99}
  • JAXB এবং Jackson ইন্টিগ্রেশন ব্যবহার করে JSON এবং XML উভয় serialization/deserialization সহজে করা যায়।
  • একই মডেল থেকে দুই ফরম্যাট তৈরি করা গেলে কোড পুনর্ব্যবহারযোগ্য এবং সংক্ষিপ্ত হয়।
  • JaxbAnnotationModule Jackson ObjectMapper-কে JAXB annotations পড়তে সক্ষম করে।
  • XML এবং JSON উভয় প্রয়োজন হলে, JAXB এবং Jackson একত্রে একটি কার্যকর সমাধান।
Content added By
Promotion

Are you sure to start over?

Loading...