স্প্রিং OXM (Spring Object/XML Mapping) ফ্রেমওয়ার্ক JAXB (Java Architecture for XML Binding) ব্যবহার করে XML Schema Validation সমর্থন করে। XML Schema Validation নিশ্চিত করে যে XML ডেটা নির্দিষ্ট এক্সএমএল স্কিমার (XML Schema) সাথে মেলে এবং এর কাঠামো সঠিক।
এই টিউটোরিয়ালে আমরা দেখব কিভাবে JAXB ব্যবহার করে XML ডেটাকে একটি নির্দিষ্ট XML Schema-র সাথে যাচাই করা যায়।
প্রয়োজনীয় সেটআপ
XML Schema Validation করতে JAXB মাপলার (marshaller) এবং আনমার্শালারের (unmarshaller) সাথে কিছু অতিরিক্ত কনফিগারেশন যোগ করতে হবে। JAXB-কে XML Schema Validation এর জন্য কনফিগার করার জন্য javax.xml.validation.Validator ক্লাস ব্যবহার করতে হয়।
XML Schema তৈরি করা
প্রথমে একটি XML Schema তৈরি করতে হবে, যা XML ডেটার কাঠামো নির্ধারণ করবে। নিচে একটি employee.xsd XML Schema এর উদাহরণ দেওয়া হলো:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="employee">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="age" type="xs:int"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
এই স্কিমাটি একটি employee এলিমেন্ট সংজ্ঞায়িত করে, যার মধ্যে দুটি উপাদান (name এবং age) থাকবে। name উপাদানটি স্ট্রিং এবং age উপাদানটি পূর্ণসংখ্যা (integer) হবে।
Java ক্লাস তৈরি করা
এখন আমরা JAXB অ্যানোটেশন সহ একটি Employee ক্লাস তৈরি করব, যাতে এই ক্লাসটি XML ডেটার জন্য JAXB রূপান্তর পরিচালনা করতে পারে।
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
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;
}
}
এই Employee ক্লাসে JAXB অ্যানোটেশন ব্যবহার করা হয়েছে, যাতে এটি XML ডেটা এবং Java অবজেক্টের মধ্যে রূপান্তর সহজভাবে করতে পারে।
Spring OXM কনফিগারেশন
স্প্রিং OXM কনফিগারেশন XML ফাইলে JAXB মাপলার কনফিগার করার জন্য, XML Schema Validation সক্রিয় করতে হবে। নিচে একটি উদাহরণ দেওয়া হলো:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:oxm="http://www.springframework.org/schema/oxm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/oxm
http://www.springframework.org/schema/oxm/spring-oxm.xsd">
<!-- JAXB Marshaller Bean with Schema Validation -->
<oxm:jaxb-marshaller id="marshaller" context-path="com.example" validate="true">
<oxm:jaxb-schema-location>classpath:/employee.xsd</oxm:jaxb-schema-location>
</oxm:jaxb-marshaller>
</beans>
এখানে validate="true" অপশনটি XML Schema Validation সক্রিয় করে এবং jaxb-schema-location এর মাধ্যমে XML Schema ফাইলের অবস্থান নির্ধারণ করা হয়। classpath:/employee.xsd নিশ্চিত করে যে employee.xsd ফাইলটি ক্লাসপাথে পাওয়া যাবে।
JAXB ব্যবহার করে XML Schema Validation
এখন, JAXB ব্যবহার করে XML ডেটার সাথে স্কিমা যাচাই করার জন্য নিচের কোডটি ব্যবহার করা যাবে:
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.oxm.jaxb.Jaxb2Marshaller;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;
import org.xml.sax.SAXException;
import java.io.File;
import java.io.StringReader;
public class SpringOXMExample {
public static void main(String[] args) throws Exception {
// Spring Context লোড করুন
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
// JAXB Marshaller Bean ইনিশিয়ালাইজ করুন
Jaxb2Marshaller marshaller = (Jaxb2Marshaller) context.getBean("marshaller");
// Employee অবজেক্ট তৈরি
Employee employee = new Employee();
employee.setName("John Doe");
employee.setAge(30);
// Employee অবজেক্ট XML এ রূপান্তর
StringWriter writer = new StringWriter();
marshaller.marshal(employee, new StreamResult(writer));
String xmlOutput = writer.toString();
// XML Schema Validation
validateXML(xmlOutput);
// XML আউটপুট প্রিন্ট করা
System.out.println("XML Output:");
System.out.println(xmlOutput);
}
private static void validateXML(String xml) throws SAXException, IOException {
// XML Schema ফাইলটি লোড করা
File schemaFile = new File("src/main/resources/employee.xsd");
SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
javax.xml.validation.Schema schema = factory.newSchema(schemaFile);
// XML Validation
Validator validator = schema.newValidator();
validator.validate(new StreamSource(new StringReader(xml)));
}
}
প্রোগ্রামটির ব্যাখ্যা
- Spring Context লোড:
ClassPathXmlApplicationContextব্যবহার করে Spring কনফিগারেশন ফাইলটি লোড করা হয়। - Marshaller Bean ব্যবহার:
marshallerBean ব্যবহার করে Java অবজেক্টEmployeeকে XML ফরম্যাটে রূপান্তরিত করা হয়। - XML রূপান্তর:
marshaller.marshal()মেথড ব্যবহার করে Java অবজেক্ট XML ফরম্যাটে রূপান্তরিত করা হয়। - XML Schema Validation:
validateXML()মেথড XML ডেটা এবং XML Schema ফাইলটি যাচাই করে, যদি XML স্কিমার সাথে মেলে না, তবে একটিSAXExceptionত্রুটি ফেলে।
আউটপুট
যদি XML স্কিমা সঠিকভাবে মেলে, তবে প্রোগ্রামটি XML আউটপুট প্রিন্ট করবে:
XML Output:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<employee>
<name>John Doe</name>
<age>30</age>
</employee>
যদি XML স্কিমার সাথে মিল না থাকে, তবে একটি SAXException ত্রুটি উত্থাপন হবে, যা XML ফাইলের ভুল গঠন বা কাঠামো নির্দেশ করবে।
স্প্রিং OXM এবং JAXB ব্যবহার করে XML Schema Validation একটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা XML ডেটার সঠিকতা যাচাই করতে সহায়তা করে। এটি বিশেষত সিস্টেমের মধ্যে XML ডেটা ইন্টিগ্রিটি নিশ্চিত করার জন্য উপকারী।
Read more