SOAP (Simple Object Access Protocol) একটি প্রোটোকল যা ওয়েব সার্ভিসের মাধ্যমে ডেটা এক্সচেঞ্জের জন্য XML ভিত্তিক বার্তা আদান-প্রদানের সুবিধা দেয়। স্প্রিং ফ্রেমওয়ার্ক SOAP ওয়েব সার্ভিস তৈরি এবং ব্যবহারে উন্নত সমাধান সরবরাহ করে, যা ডেভেলপারদের জন্য একটি সহজ এবং কার্যকর প্ল্যাটফর্ম।
SOAP ওয়েব সার্ভিস কী?
SOAP হলো একটি প্রোটোকল যা XML ব্যবহার করে বার্তা প্রেরণ এবং গ্রহণের মাধ্যমে ওয়েব সার্ভিসের কার্য সম্পাদন নিশ্চিত করে। এটি মূলত এন্টারপ্রাইজ অ্যাপ্লিকেশনগুলোর মধ্যে যোগাযোগ সহজ করার জন্য ব্যবহৃত হয়। SOAP ওয়েব সার্ভিসের বৈশিষ্ট্যগুলো হল:
- প্ল্যাটফর্ম নিরপেক্ষ: SOAP বার্তা যে কোনো অপারেটিং সিস্টেম বা প্রোগ্রামিং ভাষায় কাজ করতে পারে।
- XML ভিত্তিক বার্তা বিনিময়: ডেটা বিনিময়ে XML স্ট্যান্ডার্ড ব্যবহার করে।
- WS-Security সমর্থন: উন্নত নিরাপত্তার জন্য WS-Security ব্যবহার করা যায়।
- স্ট্যান্ডার্ডাইজড প্রোটোকল: HTTP, SMTP, এবং অন্যান্য প্রোটোকলের উপর কাজ করে।
SOAP ওয়েব সার্ভিসে স্প্রিং-এর ভূমিকা
স্প্রিং ওয়েব সার্ভিস একটি SOAP-ভিত্তিক ওয়েব সার্ভিস তৈরি করার জন্য প্রয়োজনীয় টুল এবং ফ্রেমওয়ার্ক সরবরাহ করে। এর মাধ্যমে ডেভেলপাররা সহজেই SOAP বার্তা তৈরি, প্রক্রিয়াকরণ এবং পরিচালনা করতে পারেন।
স্প্রিং ওয়েব সার্ভিসের কয়েকটি গুরুত্বপূর্ণ বৈশিষ্ট্য:
- ক্লিন কোড আর্কিটেকচার: স্প্রিং ওয়েব সার্ভিস কোনো WSDL বা SOAP API-এর অপ্রয়োজনীয় জটিলতা এড়িয়ে সহজ এবং পরিষ্কার কোড লেখার সুযোগ দেয়।
- XML ফোকাসড ডিজাইন: SOAP বার্তা XML ভিত্তিক হওয়ায় স্প্রিং এটিকে প্রাধান্য দিয়ে কাজ করে।
- ইন্টিগ্রেশন সমর্থন: স্প্রিং ফ্রেমওয়ার্কের অন্যান্য মডিউলের সঙ্গে সহজে সংযোগ স্থাপন করা যায়।
- SOAP বার্তা ভ্যালিডেশন: SOAP বার্তা প্রসেসিং এবং XSD (XML Schema Definition) ব্যবহার করে ডেটার বৈধতা যাচাই করা সহজ।
SOAP ওয়েব সার্ভিসের উপাদানসমূহ
SOAP বার্তা (SOAP Message)
SOAP বার্তা হলো XML ভিত্তিক একটি ডকুমেন্ট, যার প্রধান উপাদানসমূহ:
- SOAP Envelope: বার্তার কাঠামো সংজ্ঞায়িত করে।
- SOAP Header: অতিরিক্ত তথ্য সংরক্ষণ করে।
- SOAP Body: মূল ডেটা বা কার্য সম্পাদনের জন্য প্রয়োজনীয় তথ্য বহন করে।
- SOAP Fault: ত্রুটি সম্পর্কিত তথ্য প্রদান করে।
WSDL (Web Services Description Language)
WSDL একটি XML ডকুমেন্ট যা ওয়েব সার্ভিসের বিবরণ এবং এটির ব্যবহারের জন্য প্রয়োজনীয় পদ্ধতি ব্যাখ্যা করে।
UDDI (Universal Description, Discovery, and Integration)
UDDI হলো একটি রেজিস্ট্রি যেখানে SOAP সার্ভিসগুলোর বিবরণ প্রকাশ করা হয়, যা ক্লায়েন্টদের নির্ধারিত সার্ভিস খুঁজে পেতে সাহায্য করে।
স্প্রিং-ভিত্তিক SOAP ওয়েব সার্ভিসের উদাহরণ
ডিপেনডেন্সি যোগ করা (Dependency Addition)
Maven বা Gradle-এ স্প্রিং ওয়েব সার্ভিসের ডিপেনডেন্সি যোগ করুন:
<dependency>
<groupId>org.springframework.ws</groupId>
<artifactId>spring-ws-core</artifactId>
<version>3.1.1</version>
</dependency>
SOAP বার্তা প্রক্রিয়াকরণ এন্ডপয়েন্ট
SOAP বার্তা গ্রহণ এবং প্রক্রিয়া করার জন্য একটি @Endpoint তৈরি করুন:
@Endpoint
public class CalculatorEndpoint {
@PayloadRoot(namespace = "http://example.com/calculator", localPart = "AdditionRequest")
@ResponsePayload
public AdditionResponse add(@RequestPayload AdditionRequest request) {
AdditionResponse response = new AdditionResponse();
response.setResult(request.getNumber1() + request.getNumber2());
return response;
}
}
SOAP কনফিগারেশন ফাইল
SOAP ওয়েব সার্ভিসের কনফিগারেশন সহজ করার জন্য WebServiceConfig ক্লাস তৈরি করুন:
@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 = "calculator")
public DefaultWsdl11Definition defaultWsdl11Definition(XsdSchema calculatorSchema) {
DefaultWsdl11Definition wsdl11Definition = new DefaultWsdl11Definition();
wsdl11Definition.setPortTypeName("CalculatorPort");
wsdl11Definition.setLocationUri("/ws");
wsdl11Definition.setTargetNamespace("http://example.com/calculator");
wsdl11Definition.setSchema(calculatorSchema);
return wsdl11Definition;
}
@Bean
public XsdSchema calculatorSchema() {
return new SimpleXsdSchema(new ClassPathResource("calculator.xsd"));
}
}
SOAP ওয়েব সার্ভিসের সুবিধা
- ডেটা নিরাপত্তা: XML এনক্রিপশন এবং WS-Security ব্যবহার করে ডেটা সুরক্ষিত রাখা যায়।
- স্ট্যান্ডার্ডাইজড ফরম্যাট: WSDL ব্যবহার করে পরিষেবা চুক্তি তৈরি করা হয়।
- স্কেলযোগ্যতা: এন্টারপ্রাইজ লেভেলের সিস্টেমের জন্য উপযোগী।
- ইন্টার-অপারেবিলিটি: ভিন্ন প্ল্যাটফর্মের মধ্যে সহজে কাজ করতে পারে।
SOAP (Simple Object Access Protocol) হলো একটি স্ট্যান্ডার্ড প্রোটোকল যা ওয়েব সার্ভিসের মাধ্যমে বিভিন্ন অ্যাপ্লিকেশন বা সিস্টেমের মধ্যে তথ্য বিনিময় করতে ব্যবহৃত হয়। এটি XML ভিত্তিক একটি মেসেজ ফরম্যাট এবং মূলত নেটওয়ার্কের মাধ্যমে দূরবর্তী পরিষেবা (remote service) ডাকে সাহায্য করার জন্য ডিজাইন করা হয়েছে।
SOAP এর প্রধান বৈশিষ্ট্য
XML ভিত্তিক মেসেজিং
SOAP মেসেজ গুলো XML ফরম্যাটে তৈরি হয়, যা প্ল্যাটফর্ম এবং প্রোগ্রামিং ল্যাঙ্গুয়েজ স্বাধীনতার নিশ্চয়তা দেয়।
স্ট্যান্ডার্ড প্রোটোকল
SOAP একটি স্ট্যান্ডার্ড প্রোটোকল যা W3C (World Wide Web Consortium) দ্বারা অনুমোদিত। এটি নিরাপত্তা, নির্ভরযোগ্যতা এবং ইন্টারঅপারেবিলিটি নিশ্চিত করে।
চ্যানেল স্বাধীনতা
SOAP মেসেজ HTTP, SMTP, FTP বা TCP/IP এর মতো বিভিন্ন প্রোটোকলের মাধ্যমে পাঠানো যায়, যা এটিকে ফ্লেক্সিবল করে তোলে।
WS-Security সমর্থন
SOAP বার্তাগুলোর নিরাপত্তা নিশ্চিত করতে WS-Security ব্যবহার করা হয়। এতে এনক্রিপশন, সিগনেচার এবং টোকেনের মাধ্যমে নিরাপত্তা নিশ্চিত করা যায়।
কন্ট্রাক্ট-বেসড যোগাযোগ
SOAP ওয়েব সার্ভিসের জন্য WSDL (Web Service Description Language) ব্যবহার করে একটি পরিষ্কার কন্ট্রাক্ট বা চুক্তি নির্ধারণ করে।
SOAP এর গঠন
SOAP মেসেজ মূলত তিনটি অংশ নিয়ে গঠিত:
Envelope
SOAP মেসেজের মূল কাঠামো। এটি পুরো মেসেজের জন্য একটি কন্টেইনার হিসেবে কাজ করে এবং এর মধ্যে Header ও Body থাকে।
Header
ঐচ্ছিক অংশ, যা মেটাডেটা বা অতিরিক্ত তথ্য ধারণ করে। যেমন, নিরাপত্তা তথ্য বা ট্রানজেকশন ম্যানেজমেন্ট।
Body
SOAP মেসেজের মূল অংশ, যেখানে আসল ডেটা বা মেসেজের বিষয়বস্তু থাকে।
SOAP এর উপকারিতা
- প্ল্যাটফর্ম স্বাধীনতা: যেকোনো প্ল্যাটফর্মে ব্যবহৃত হতে পারে।
- স্ট্যান্ডার্ড মেনে চলা: W3C অনুমোদিত স্ট্যান্ডার্ড হওয়ায় নির্ভরযোগ্য।
- নিরাপত্তা: WS-Security এর মাধ্যমে উন্নত নিরাপত্তা।
- পরিষ্কার কন্ট্রাক্ট: WSDL ব্যবহার করে সুনির্দিষ্টভাবে চুক্তি নির্ধারণ।
- বিভিন্ন প্রোটোকল সমর্থন: HTTP ছাড়াও SMTP বা FTP এর মাধ্যমে যোগাযোগের ক্ষমতা।
SOAP এর সীমাবদ্ধতা
- তুলনামূলকভাবে জটিল এবং ভারী (overhead) প্রোটোকল।
- শুধুমাত্র XML ফরম্যাটে ডেটা আদান-প্রদান করে।
- RESTful ওয়েব সার্ভিসের তুলনায় কিছু ক্ষেত্রে পারফরম্যান্স কম।
SOAP বনাম REST
| বৈশিষ্ট্য | SOAP | REST |
|---|---|---|
| ডেটা ফরম্যাট | শুধুমাত্র XML | JSON, XML, Text, HTML ইত্যাদি |
| স্ট্যান্ডার্ড | W3C দ্বারা নিয়ন্ত্রিত | স্থির স্ট্যান্ডার্ড নেই |
| নিরাপত্তা | WS-Security সমর্থন | HTTPS ভিত্তিক নিরাপত্তা |
| ক্লায়েন্ট-সার্ভার মডেল | কন্ট্রাক্ট ভিত্তিক | স্টেটলেস এবং ফ্লেক্সিবল |
সারাংশ
SOAP একটি স্ট্যান্ডার্ড প্রোটোকল যা নিরাপত্তা এবং নির্ভরযোগ্যতার সঙ্গে ওয়েব সার্ভিসের মাধ্যমে তথ্য বিনিময়ে ব্যবহৃত হয়। যদিও এটি কিছুটা জটিল, তবে বড় মাপের এন্টারপ্রাইজ অ্যাপ্লিকেশনগুলিতে SOAP এখনও একটি জনপ্রিয় পছন্দ।
SOAP (Simple Object Access Protocol) হলো একটি প্রটোকল যা XML ফরম্যাটে ডেটা আদান-প্রদান করতে ব্যবহৃত হয়। SOAP মেসেজের গঠন অত্যন্ত নির্দিষ্ট এবং এটি নিম্নলিখিত প্রধান অংশগুলো নিয়ে গঠিত:
SOAP এর মূল অংশসমূহ
Envelope (এনভেলপ)
SOAP মেসেজের শীর্ষ স্তর। এটি পুরো মেসেজটিকে আবৃত করে এবং মেসেজের গঠন ও প্রসঙ্গ নির্ধারণ করে।
উদাহরণ:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
...
</soap:Envelope>
Header (হেডার)
এই অংশটি ঐচ্ছিক এবং অতিরিক্ত মেটাডেটা বা প্রসেসিং নির্দেশনা ধারণ করে। সাধারণত, এটি সিকিউরিটি, অটেনটিকেশন বা রাউটিং সম্পর্কিত তথ্য প্রদান করে।
উদাহরণ:
<soap:Header>
<auth:Authentication xmlns:auth="http://example.com/auth">
<auth:Token>abc123</auth:Token>
</auth:Authentication>
</soap:Header>
Body (বডি)
SOAP মেসেজের প্রধান অংশ। এটি আসল ডেটা বা নির্দেশনা ধারণ করে যা ক্লায়েন্ট এবং সার্ভার মধ্যে আদান-প্রদান হয়।
উদাহরণ:
<soap:Body>
<GetUserDetails xmlns="http://example.com/user">
<UserId>12345</UserId>
</GetUserDetails>
</soap:Body>
Fault (ফল্ট)
এই অংশটি তখন ব্যবহৃত হয় যখন কোনো ত্রুটি বা সমস্যা ঘটে। এটি মেসেজ প্রক্রিয়াকরণের সময় কোনো সমস্যা হলে তার বর্ণনা প্রদান করে।
উদাহরণ:
<soap:Body>
<soap:Fault>
<faultcode>soap:Client</faultcode>
<faultstring>Invalid UserId</faultstring>
</soap:Fault>
</soap:Body>
SOAP এর গঠনের বিস্তারিত
Envelope বিস্তারিত
- এটি SOAP মেসেজের রুট এলিমেন্ট।
- এটি "Header" এবং "Body" এর মতো উপাদান ধারণ করে।
Header বিস্তারিত
- এটি সম্পূর্ণ ঐচ্ছিক।
- সিকিউরিটি টোকেন, সেশন ডেটা, বা অন্যান্য প্রসেসিং তথ্য সরবরাহ করে।
- SOAP মেসেজ প্রসেসরের জন্য নির্দেশনা প্রদান করে।
Body বিস্তারিত
- এটি SOAP মেসেজের সবচেয়ে গুরুত্বপূর্ণ অংশ।
- ক্লায়েন্ট এবং সার্ভারের মধ্যে প্রয়োজনীয় তথ্য বা রিকোয়েস্ট-রেসপন্স মডেল প্রদর্শন করে।
- XML ভিত্তিক ডেটা ধারণ করে।
Fault বিস্তারিত
- এটি SOAP মেসেজে ত্রুটি বা সমস্যা হলে ব্যবহৃত হয়।
- "faultcode" এবং "faultstring" ব্যবহার করে সমস্যার প্রকৃতি এবং বিবরণ প্রদান করে।
উদাহরণ: SOAP মেসেজের পূর্ণ গঠন
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Header>
<auth:Authentication xmlns:auth="http://example.com/auth">
<auth:Token>abc123</auth:Token>
</auth:Authentication>
</soap:Header>
<soap:Body>
<GetUserDetails xmlns="http://example.com/user">
<UserId>12345</UserId>
</GetUserDetails>
</soap:Body>
</soap:Envelope>
SOAP মেসেজের এই গঠন ক্লায়েন্ট এবং সার্ভার উভয়ের জন্য যোগাযোগের স্ট্যান্ডার্ড তৈরি করে।
স্প্রিং ওয়েব সার্ভিসে SOAP গঠন ব্যবহার
স্প্রিং ওয়েব সার্ভিসে SOAP মেসেজের এই গঠন স্বয়ংক্রিয়ভাবে হ্যান্ডেল করা হয়। ডেভেলপাররা সাধারণত শুধুমাত্র Endpoint এবং Payload ডিফাইন করেন। SOAP এর Envelope, Header, Body, এবং Fault স্প্রিং WS নিজে থেকেই ম্যানেজ করে।
WSDL (Web Services Description Language) কী?
WSDL হলো একটি XML ভিত্তিক ভাষা যা SOAP ওয়েব সার্ভিসের জন্য পরিষেবার বিবরণ (description) প্রদান করে। এটি মূলত ওয়েব সার্ভিসের কাঠামো, এন্ডপয়েন্ট, অপারেশন এবং ডেটা টাইপ নির্ধারণ করে। WSDL একটি পরিষেবা সম্পর্কে ক্লায়েন্ট এবং সার্ভার উভয়ের জন্য একটি কন্ট্র্যাক্ট হিসেবে কাজ করে।
স্প্রিং ওয়েব সার্ভিসে WSDL এর ভূমিকা
Spring Web Services এ WSDL ব্যবহার করা হয় SOAP পরিষেবা তৈরি এবং কনজিউম করার জন্য। এটি নিম্নলিখিত দিকগুলোতে গুরুত্বপূর্ণ:
- পরিষেবা বিবরণ: সার্ভিস কীভাবে কাজ করবে, তা নির্ধারণ করে।
- কন্ট্র্যাক্ট-ফার্স্ট অ্যাপ্রোচ: WSDL ভিত্তিক পরিষেবা তৈরি করা হয়।
- ইন্টিগ্রেশন: সার্ভিস এবং ক্লায়েন্টের মধ্যে নিরবচ্ছিন্ন সংযোগ নিশ্চিত করে।
WSDL এর মূল উপাদান
১. Types
ওয়েব সার্ভিসের ডেটা টাইপ সংজ্ঞায়িত করে। এটি XSD (XML Schema Definition) ব্যবহার করে।
২. Message
ওয়েব সার্ভিসে প্রেরিত এবং প্রাপ্ত ডেটার কাঠামো সংজ্ঞায়িত করে।
৩. PortType
পরিষেবার অপারেশনসমূহ এবং তাদের ইনপুট-আউটপুট মেসেজ সংজ্ঞায়িত করে।
৪. Binding
SOAP বা HTTP এর মতো প্রোটোকলের সাহায্যে পরিষেবা কীভাবে কাজ করবে তা নির্ধারণ করে।
৫. Service
এন্ডপয়েন্ট (endpoint) URL প্রদান করে, যা পরিষেবা অ্যাক্সেস করার জন্য প্রয়োজন।
স্প্রিং ওয়েব সার্ভিসে WSDL ব্যবহার
WSDL ফাইল তৈরি
Spring-WS এ কন্ট্র্যাক্ট-ফার্স্ট পদ্ধতিতে প্রথমে WSDL ফাইল তৈরি করতে হয়। উদাহরণস্বরূপ, নিচে একটি WSDL ফাইলের কাঠামো দেওয়া হলো:
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:tns="http://example.com/ws"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
targetNamespace="http://example.com/ws"
name="ExampleService">
<types>
<xsd:schema targetNamespace="http://example.com/ws">
<xsd:element name="GetRequest" type="xsd:string"/>
<xsd:element name="GetResponse" type="xsd:string"/>
</xsd:schema>
</types>
<message name="GetRequestMessage">
<part name="parameters" element="tns:GetRequest"/>
</message>
<message name="GetResponseMessage">
<part name="parameters" element="tns:GetResponse"/>
</message>
<portType name="ExamplePortType">
<operation name="GetExample">
<input message="tns:GetRequestMessage"/>
<output message="tns:GetResponseMessage"/>
</operation>
</portType>
<binding name="ExampleBinding" type="tns:ExamplePortType">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="GetExample">
<soap:operation soapAction="http://example.com/GetExample"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="ExampleService">
<port name="ExamplePort" binding="tns:ExampleBinding">
<soap:address location="http://localhost:8080/ws"/>
</port>
</service>
</definitions>
Spring-WS এ WSDL লোড করা
Spring-WS এ WSDL লোড করতে নিচের মতো কনফিগারেশন করা হয়:
@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/ws");
definition.setSchema(exampleSchema);
return definition;
}
@Bean
public XsdSchema exampleSchema() {
return new SimpleXsdSchema(new ClassPathResource("example.xsd"));
}
}
WSDL ব্যবহারের সুবিধা
- স্ট্যান্ডার্ডাইজড: ওয়েব সার্ভিসের জন্য একটি নির্ধারিত স্ট্যান্ডার্ড প্রদান করে।
- ইন্টারঅপারেবিলিটি: বিভিন্ন প্ল্যাটফর্ম এবং ভাষার মধ্যে পরিষেবা সহজে ব্যবহার করা যায়।
- স্বয়ংক্রিয় ক্লায়েন্ট জেনারেশন: WSDL ব্যবহার করে ক্লায়েন্ট কোড জেনারেট করা যায়।
চ্যালেঞ্জ
- WSDL ফাইল তৈরি এবং বজায় রাখা তুলনামূলকভাবে সময়সাপেক্ষ।
- SOAP প্রটোকল ব্যবহারের কারণে কিছু ক্ষেত্রে উচ্চতর ওভারহেড হয়।
WSDL ব্যবহার করে Spring-WS এ SOAP পরিষেবা তৈরি করলে পরিষেবাগুলো স্ট্যান্ডার্ড এবং পুনর্ব্যবহারযোগ্য হয়, যা এন্টারপ্রাইজ অ্যাপ্লিকেশনের জন্য অত্যন্ত কার্যকর।
স্প্রিং ওয়েব সার্ভিসেস (Spring Web Services) ব্যবহার করে SOAP ভিত্তিক ওয়েব সার্ভিস তৈরি করার প্রক্রিয়া অনেক সহজ। এখানে একটি স্টেপ-বাই-স্টেপ গাইড দেওয়া হলো, যেখানে একটি উদাহরণ হিসেবে একটি সিম্পল SOAP ওয়েব সার্ভিস তৈরি করা হবে যা ব্যবহারকারীর নামের ভিত্তিতে একটি স্বাগত বার্তা প্রদান করবে।
প্রকল্পের প্রাথমিক সেটআপ
Maven ডিপেন্ডেন্সি
প্রথমে, pom.xml ফাইলে প্রয়োজনীয় ডিপেন্ডেন্সি যুক্ত করুন:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web-services</artifactId>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
XML স্কিমা তৈরি
SOAP ওয়েব সার্ভিসে ব্যবহার করা হবে এমন ডেটার গঠন (structure) ডিফাইন করার জন্য একটি XML স্কিমা (XSD) তৈরি করুন।
greeting.xsd
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://example.com/webservice"
xmlns="http://example.com/webservice"
elementFormDefault="qualified">
<xs:element name="GetGreetingRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetGreetingResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="message" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
JAXB ক্লাস জেনারেট করা
উপরের স্কিমা থেকে JAXB ক্লাস জেনারেট করতে maven-jaxb2-plugin ব্যবহার করুন:
pom.xml এ JAXB প্লাগইন যুক্ত করুন:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>2.5.0</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<schemaDirectory>${project.basedir}/src/main/resources/xsd</schemaDirectory>
<outputDirectory>${project.basedir}/target/generated-sources/jaxb</outputDirectory>
</configuration>
</plugin>
XSD ফাইলটি src/main/resources/xsd ডিরেক্টরিতে রাখুন এবং Maven Build চালান। JAXB ক্লাসগুলো target/generated-sources/jaxb ফোল্ডারে জেনারেট হবে।
SOAP এন্ডপয়েন্ট তৈরি
SOAP এন্ডপয়েন্ট হ্যান্ডলিংয়ের জন্য একটি ক্লাস তৈরি করুন:
GreetingEndpoint.java
@Endpoint
public class GreetingEndpoint {
private static final String NAMESPACE_URI = "http://example.com/webservice";
@PayloadRoot(namespace = NAMESPACE_URI, localPart = "GetGreetingRequest")
@ResponsePayload
public GetGreetingResponse getGreeting(@RequestPayload GetGreetingRequest request) {
GetGreetingResponse response = new GetGreetingResponse();
response.setMessage("Hello, " + request.getName() + "! Welcome to Spring Web Services.");
return response;
}
}
Spring Bean কনফিগারেশন
SOAP মেসেজ প্রসেস করার জন্য MessageDispatcherServlet কনফিগার করুন:
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 = "greetings")
public DefaultWsdl11Definition defaultWsdl11Definition(XsdSchema greetingSchema) {
DefaultWsdl11Definition definition = new DefaultWsdl11Definition();
definition.setPortTypeName("GreetingPort");
definition.setLocationUri("/ws");
definition.setTargetNamespace("http://example.com/webservice");
definition.setSchema(greetingSchema);
return definition;
}
@Bean
public XsdSchema greetingSchema() {
return new SimpleXsdSchema(new ClassPathResource("xsd/greeting.xsd"));
}
}
অ্যাপ্লিকেশন চালু করা
Spring Boot অ্যাপ্লিকেশন চালু করার জন্য main ক্লাস:
SpringWebServiceApplication.java
@SpringBootApplication
public class SpringWebServiceApplication {
public static void main(String[] args) {
SpringApplication.run(SPRINGWebServiceApplication.class, args);
}
}
WSDL অ্যাক্সেস করা
অ্যাপ্লিকেশন চালু করার পর ব্রাউজারে http://localhost:8080/ws/greetings.wsdl URL-এ গেলে WSDL ফাইল দেখা যাবে। এটি SOAP ক্লায়েন্ট তৈরি করতে ব্যবহার করা যাবে।
SOAP ক্লায়েন্ট দিয়ে টেস্ট
SOAP ক্লায়েন্ট ব্যবহার করে XML মেসেজ পাঠান এবং সার্ভারের উত্তর পান:
SOAP Request:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://example.com/webservice">
<soapenv:Header/>
<soapenv:Body>
<web:GetGreetingRequest>
<web:name>John</web:name>
</web:GetGreetingRequest>
</soapenv:Body>
</soapenv:Envelope>
SOAP Response:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://example.com/webservice">
<soapenv:Header/>
<soapenv:Body>
<web:GetGreetingResponse>
<web:message>Hello, John! Welcome to Spring Web Services.</web:message>
</web:GetGreetingResponse>
</soapenv:Body>
</soapenv:Envelope>
সারাংশ
এই গাইডের মাধ্যমে একটি SOAP ভিত্তিক ওয়েব সার্ভিস তৈরি করার প্রক্রিয়া ব্যাখ্যা করা হলো। এটি ব্যবহার করে সহজে এবং কার্যকরভাবে Spring Web Services দিয়ে SOAP এন্ডপয়েন্ট তৈরি করা যায়।
Read more