Spring Web Services (Spring-WS) SOAP ভিত্তিক ওয়েব সার্ভিস তৈরি ও ব্যবহারের জন্য একটি শক্তিশালী ফ্রেমওয়ার্ক। এটি SOAP রিকোয়েস্ট গ্রহণ ও রেসপন্স তৈরি করতে কাস্টমাইজড এন্ডপয়েন্ট এবং বিভিন্ন টুলস সরবরাহ করে।
SOAP রিকোয়েস্ট কীভাবে কাজ করে
SOAP রিকোয়েস্ট হলো একটি XML ভিত্তিক বার্তা, যা ক্লায়েন্ট থেকে সার্ভারে পাঠানো হয়। এটি প্রয়োজনীয় তথ্য বহন করে এবং প্রটোকল হিসেবে HTTP বা HTTPS ব্যবহার করে।
SOAP রেসপন্স কী
SOAP রেসপন্স হলো সার্ভারের পক্ষ থেকে প্রেরিত একটি XML বার্তা, যা রিকোয়েস্টের উত্তরে ক্লায়েন্টকে প্রয়োজনীয় তথ্য প্রদান করে।
স্প্রিং ওয়েব সার্ভিসে SOAP রিকোয়েস্ট গ্রহণ ও রেসপন্স তৈরি করার ধাপ
১. XML স্কিমা (XSD) তৈরি করা
XML স্কিমা একটি SOAP মেসেজের কাঠামো সংজ্ঞায়িত করে।
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://example.com/soap"
xmlns="http://example.com/soap"
elementFormDefault="qualified">
<xs:element name="GetRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="message" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
২. JAXB ব্যবহার করে XML থেকে জাভা ক্লাস জেনারেট করা
JAXB (Java Architecture for XML Binding) ব্যবহার করে XML স্কিমা থেকে জাভা ক্লাস জেনারেট করতে পারে। এটি Spring-WS এ SOAP বার্তার ডেটা প্রসেস করার জন্য ব্যবহৃত হয়।
৩. SOAP এন্ডপয়েন্ট তৈরি করা
Spring-WS এ এন্ডপয়েন্ট হলো সেই স্থান যেখানে SOAP রিকোয়েস্ট প্রক্রিয়াজাত করা হয় এবং রেসপন্স তৈরি করা হয়।
@Endpoint
public class ExampleEndpoint {
private static final String NAMESPACE_URI = "http://example.com/soap";
@PayloadRoot(namespace = NAMESPACE_URI, localPart = "GetRequest")
@ResponsePayload
public GetResponse handleRequest(@RequestPayload GetRequest request) {
GetResponse response = new GetResponse();
response.setMessage("Hello, " + request.getName() + "!");
return response;
}
}
এন্ডপয়েন্ট ব্যাখ্যা
@Endpoint: এটি নির্দেশ করে যে এই ক্লাসটি একটি SOAP এন্ডপয়েন্ট।@PayloadRoot: SOAP বার্তার নির্দিষ্ট রুট এলিমেন্টের জন্য এই পদ্ধতি ব্যবহার করা হবে।@RequestPayload: SOAP রিকোয়েস্টের ডেটা গ্রহণ করতে ব্যবহৃত হয়।@ResponsePayload: SOAP রেসপন্স তৈরি ও পাঠানোর জন্য ব্যবহৃত হয়।
৪. কনফিগারেশন ফাইল তৈরি
@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 = "example")
public DefaultWsdl11Definition defaultWsdl11Definition(XsdSchema exampleSchema) {
DefaultWsdl11Definition definition = new DefaultWsdl11Definition();
definition.setPortTypeName("ExamplePort");
definition.setLocationUri("/ws");
definition.setTargetNamespace("http://example.com/soap");
definition.setSchema(exampleSchema);
return definition;
}
@Bean
public XsdSchema exampleSchema() {
return new SimpleXsdSchema(new ClassPathResource("example.xsd"));
}
}
SOAP রিকোয়েস্টের উদাহরণ
SOAP ক্লায়েন্ট থেকে একটি রিকোয়েস্ট এইরকম হতে পারে:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ex="http://example.com/soap">
<soapenv:Header/>
<soapenv:Body>
<ex:GetRequest>
<ex:name>John</ex:name>
</ex:GetRequest>
</soapenv:Body>
</soapenv:Envelope>
SOAP রেসপন্সের উদাহরণ
সার্ভারের থেকে রেসপন্স আসতে পারে নিচের মতো:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ex="http://example.com/soap">
<soapenv:Header/>
<soapenv:Body>
<ex:GetResponse>
<ex:message>Hello, John!</ex:message>
</ex:GetResponse>
</soapenv:Body>
</soapenv:Envelope>
স্প্রিং-WS ব্যবহার করার সুবিধা
- কাস্টমাইজড রিকোয়েস্ট এবং রেসপন্স হ্যান্ডলিং।
- SOAP স্ট্যান্ডার্ড সমর্থন।
- XML ভিত্তিক ডেটা প্রসেসিং সহজতর।
স্প্রিং-WS একটি সুসংগঠিত উপায়ে SOAP রিকোয়েস্ট গ্রহণ এবং রেসপন্স তৈরি করার জন্য উন্নত টুলস এবং ফ্রেমওয়ার্ক সরবরাহ করে। এটি এন্টারপ্রাইজ লেভেলের অ্যাপ্লিকেশন তৈরিতে বিশেষভাবে কার্যকর।
Read more