Spring Web Services এর Contract-First পদ্ধতি ব্যবহারের মাধ্যমে SOAP ওয়েব সার্ভিস তৈরি করলে WSDL (Web Services Description Language) ডকুমেন্টটি প্রথমে তৈরি হয় এবং এর উপর ভিত্তি করে সার্ভিস ইমপ্লিমেন্ট করা হয়। নিচে একটি বাস্তব উদাহরণসহ এই প্রক্রিয়া বর্ণনা করা হলো:
প্রাথমিক প্রস্তুতি
প্রয়োজনীয় ডিপেন্ডেন্সি
Spring WS ব্যবহার করতে হলে Maven বা Gradle-এ প্রাসঙ্গিক ডিপেন্ডেন্সি যুক্ত করতে হবে। Maven এর জন্য উদাহরণ:
<dependency>
<groupId>org.springframework.ws</groupId>
<artifactId>spring-ws-core</artifactId>
<version>2.5.0</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
ধাপ ১: WSDL তৈরি
প্রথমে WSDL ফাইল তৈরি করুন যা ওয়েব সার্ভিসের কাঠামো নির্ধারণ করবে।
student-details.wsdl:
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:tns="http://example.com/students"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://example.com/students">
<types>
<xsd:schema targetNamespace="http://example.com/students">
<xsd:element name="GetStudentRequest">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="id" type="xsd:int"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="GetStudentResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="age" type="xsd:int"/>
<xsd:element name="grade" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</types>
<message name="GetStudentRequest">
<part name="parameters" element="tns:GetStudentRequest"/>
</message>
<message name="GetStudentResponse">
<part name="parameters" element="tns:GetStudentResponse"/>
</message>
<portType name="StudentDetailsPort">
<operation name="GetStudentDetails">
<input message="tns:GetStudentRequest"/>
<output message="tns:GetStudentResponse"/>
</operation>
</portType>
<binding name="StudentDetailsBinding" type="tns:StudentDetailsPort">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="GetStudentDetails">
<soap:operation soapAction="http://example.com/students/GetStudentDetails"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="StudentDetailsService">
<port name="StudentDetailsPort" binding="tns:StudentDetailsBinding">
<soap:address location="http://localhost:8080/ws"/>
</port>
</service>
</definitions>
ধাপ ২: JAXB কনফিগারেশন এবং ক্লাস জেনারেশন
JAXB মডেল জেনারেট করা
JAXB ব্যবহার করে WSDL থেকে Java ক্লাস জেনারেট করতে হবে। Maven এর জন্য jaxb2-maven-plugin ব্যবহার করা যায়:
pom.xml:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>2.5.0</version>
<executions>
<execution>
<goals>
<goal>xjc</goal>
</goals>
<configuration>
<schemaDirectory>${project.basedir}/src/main/resources/wsdl</schemaDirectory>
<outputDirectory>${project.basedir}/src/main/java</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
ধাপ ৩: Spring Configuration ক্লাস তৈরি
SOAP মেসেজ ডিসপ্যাচার এবং WSDL লোকেশন কনফিগার করার জন্য একটি কনফিগারেশন ক্লাস তৈরি করুন।
WebServiceConfig.java:
@EnableWs
@Configuration
public class WebServiceConfig extends WsConfigurerAdapter {
@Bean
public ServletRegistrationBean<MessageDispatcherServlet> messageDispatcherServlet(ApplicationContext applicationContext) {
MessageDispatcherServlet servlet = new MessageDispatcherServlet();
servlet.setApplicationContext(applicationContext);
servlet.setTransformWsdlLocations(true);
return new ServletRegistrationBean<>(servlet, "/ws/*");
}
@Bean(name = "students")
public DefaultWsdl11Definition defaultWsdl11Definition(XsdSchema studentsSchema) {
DefaultWsdl11Definition definition = new DefaultWsdl11Definition();
definition.setPortTypeName("StudentDetailsPort");
definition.setLocationUri("/ws");
definition.setTargetNamespace("http://example.com/students");
definition.setSchema(studentsSchema);
return definition;
}
@Bean
public XsdSchema studentsSchema() {
return new SimpleXsdSchema(new ClassPathResource("student-details.xsd"));
}
}
ধাপ ৪: এন্ডপয়েন্ট তৈরি
StudentEndpoint.java:
@Endpoint
public class StudentEndpoint {
private static final String NAMESPACE_URI = "http://example.com/students";
@PayloadRoot(namespace = NAMESPACE_URI, localPart = "GetStudentRequest")
@ResponsePayload
public GetStudentResponse getStudent(@RequestPayload GetStudentRequest request) {
GetStudentResponse response = new GetStudentResponse();
response.setName("John Doe");
response.setAge(22);
response.setGrade("A");
return response;
}
}
ধাপ ৫: সার্ভিস টেস্ট করা
সার্ভিসটি টেস্ট করতে SOAP ক্লায়েন্ট ব্যবহার করা যেতে পারে, যেমন SoapUI। SOAP রিকোয়েস্ট উদাহরণ:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:stu="http://example.com/students">
<soapenv:Header/>
<soapenv:Body>
<stu:GetStudentRequest>
<stu:id>1</stu:id>
</stu:GetStudentRequest>
</soapenv:Body>
</soapenv:Envelope>
SOAP রেসপন্স:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:stu="http://example.com/students">
<soapenv:Header/>
<soapenv:Body>
<stu:GetStudentResponse>
<stu:name>John Doe</stu:name>
<stu:age>22</stu:age>
<stu:grade>A</stu:grade>
</stu:GetStudentResponse>
</soapenv:Body>
</soapenv:Envelope>
সারাংশ
Spring Web Services এর Contract-First পদ্ধতি SOAP ওয়েব সার্ভিসের জন্য উচ্চমানের স্ট্যান্ডার্ড নিশ্চিত করে। উপরের ধাপগুলো অনুসরণ করে আপনি একটি কার্যকর ওয়েব সার্ভিস তৈরি করতে পারবেন।
Read more