Spring Web Services এ Message Dispatching কি?
Message Dispatching হলো Spring Web Services-এর একটি প্রক্রিয়া, যেখানে ইনকামিং SOAP মেসেজ প্রক্রিয়াজাত করা হয় এবং সঠিক Endpoint-এ পাঠানো হয়। Spring Web Services এটি করার জন্য একটি MessageDispatcherServlet ব্যবহার করে, যা SOAP মেসেজের রুটিং এবং হ্যান্ডলিং সহজ করে।
Message Dispatching কিভাবে কাজ করে?
Spring Web Services এর Message Dispatching নিম্নলিখিত ধাপগুলোর মাধ্যমে কাজ করে:
- SOAP মেসেজ গ্রহণ: MessageDispatcherServlet ইনকামিং SOAP মেসেজ গ্রহণ করে।
- Payload Extraction: মেসেজ থেকে XML পে-লোড বের করা হয়।
- Endpoint Mapping: পে-লোড অনুযায়ী উপযুক্ত @Endpoint নির্বাচন করা হয়।
- Message Processing: Endpoint মেসেজ প্রক্রিয়া করে আউটপুট তৈরি করে।
- SOAP Response তৈরি: আউটপুটকে SOAP ফরম্যাটে রূপান্তর করে রেসপন্স হিসেবে পাঠানো হয়।
MessageDispatcherServlet কনফিগারেশন
Spring Web Services এ MessageDispatcherServlet ব্যবহার করার জন্য প্রয়োজনীয় কনফিগারেশন করতে হয়। উদাহরণস্বরূপ:
@Bean
public ServletRegistrationBean<MessageDispatcherServlet> messageDispatcherServlet(ApplicationContext context) {
MessageDispatcherServlet servlet = new MessageDispatcherServlet();
servlet.setApplicationContext(context);
servlet.setTransformWsdlLocations(true); // WSDL ফাইল লোকেশন ট্রান্সফর্ম করতে ব্যবহৃত
return new ServletRegistrationBean<>(servlet, "/ws/*");
}
Endpoint Mapping কিভাবে কাজ করে?
Message Dispatching প্রক্রিয়ায় Spring Web Services PayloadRootAnnotationMethodEndpointMapping ব্যবহার করে পে-লোডের namespace এবং localPart অনুযায়ী সঠিক Endpoint চিহ্নিত করে। উদাহরণস্বরূপ:
@Endpoint
public class MySoapEndpoint {
@PayloadRoot(namespace = "http://example.com/schema", localPart = "MyRequest")
@ResponsePayload
public MyResponse handleRequest(@RequestPayload MyRequest request) {
MyResponse response = new MyResponse();
response.setMessage("Hello, " + request.getName());
return response;
}
}
উপরোক্ত উদাহরণে namespace এবং localPart এর ভিত্তিতে MessageDispatcherServlet মেসেজটিকে MySoapEndpoint-এ রুট করবে।
Message Dispatching এর সুবিধা
- স্বয়ংক্রিয় রুটিং: SOAP মেসেজকে সঠিক Endpoint এ রুট করার জন্য কোনো অতিরিক্ত লজিক লিখতে হয় না।
- মডুলার ডিজাইন: একাধিক Endpoint যোগ করা সহজ এবং প্রতিটি Endpoint আলাদা আলাদা কাজ সম্পাদন করে।
- সহজ কনফিগারেশন: Spring এর DI (Dependency Injection) ব্যবহার করে Message Dispatcher সহজেই কনফিগার করা যায়।
- কাস্টমাইজেশন: প্রয়োজনে কাস্টম Endpoint Mapping যুক্ত করা যায়।
কাস্টম Endpoint Mapping তৈরি করা
ডিফল্ট PayloadRootAnnotationMethodEndpointMapping এর পাশাপাশি কাস্টম Mapping তৈরি করা যায়। উদাহরণস্বরূপ:
@Bean
public SimpleSoapEndpointMapping customEndpointMapping() {
SimpleSoapEndpointMapping mapping = new SimpleSoapEndpointMapping();
mapping.setMappings(Map.of(
"http://example.com/schema/MyRequest", "mySoapEndpoint"
));
return mapping;
}
Message Dispatching এর গুরুত্বপূর্ণ বৈশিষ্ট্য
- SOAP Fault হ্যান্ডলিং: ইনকামিং মেসেজ ভুল হলে MessageDispatcherServlet স্বয়ংক্রিয়ভাবে SOAP Fault তৈরি করে।
- WS-Security ইন্টিগ্রেশন: সুরক্ষিত মেসেজ প্রক্রিয়াজাত করতে WS-Security সমর্থন করে।
- সাধারণ এবং জটিল মেসেজ সমর্থন: XML ভিত্তিক সরল অথবা জটিল মেসেজ সমর্থন করে।
সারাংশ
Spring Web Services এ Message Dispatching একটি স্বয়ংক্রিয় প্রক্রিয়া যা SOAP মেসেজ গ্রহণ, প্রক্রিয়াজাত, এবং সঠিক Endpoint-এ রুট করার কাজ সম্পাদন করে। এটি ডেভেলপারদের জন্য কনফিগারেশন সহজ করে এবং মেসেজ প্রক্রিয়াকরণে দক্ষতা আনে।
স্প্রিং ওয়েব সার্ভিসেস (Spring Web Services)-এ Message Dispatching এমন একটি প্রক্রিয়া যেখানে ইনকামিং SOAP মেসেজগুলো নির্দিষ্ট এন্ডপয়েন্টে (Endpoint) পাঠানো হয়, যেখানে মেসেজটি প্রক্রিয়াকরণ করা হয়। এটি একটি কেন্দ্রীয় অংশ যা ওয়েব সার্ভিসের কাজ পরিচালনা করতে সাহায্য করে।
Message Dispatching কিভাবে কাজ করে?
প্রাথমিক ধারণা
Message Dispatching হলো এমন একটি সিস্টেম যেখানে ইনকামিং SOAP রিকোয়েস্টের ভিত্তিতে সঠিক এন্ডপয়েন্ট নির্বাচন করা হয় এবং সেখানে মেসেজটি পাঠানো হয়। এটি মূলত মেসেজের Payload (ডেটা অংশ) এবং অন্যান্য তথ্য বিশ্লেষণ করে সিদ্ধান্ত নেয়।
প্রক্রিয়ার ধাপসমূহ
- SOAP মেসেজ রিসিভ করা:
HTTP প্রোটোকল বা অন্য কোনো পরিবহন মাধ্যমের মাধ্যমে ইনকামিং মেসেজটি রিসিভ করা হয়। - মেসেজ পার্সিং (Parsing):
মেসেজের পে-লোড বিশ্লেষণ করা হয়। এর জন্য XML পার্সার ব্যবহার করা হয়। - এন্ডপয়েন্ট রেজলভার (Endpoint Resolver):
পে-লোড বা SOAP অ্যাকশন (SOAP Action) অনুযায়ী উপযুক্ত এন্ডপয়েন্ট নির্বাচন করা হয়। - মেসেজ প্রসেসিং:
নির্বাচিত এন্ডপয়েন্টে মেসেজটি পাঠানো হয় এবং সেখানে নির্ধারিত লজিক প্রয়োগ করা হয়। - রেসপন্স তৈরি:
মেসেজ প্রসেসিং শেষ হলে রেসপন্স তৈরি হয় এবং সেটি ক্লায়েন্টের কাছে ফেরত পাঠানো হয়।
স্প্রিং ওয়েব সার্ভিসে Message Dispatching
MessageDispatcherServlet
স্প্রিং ওয়েব সার্ভিসে MessageDispatcherServlet ক্লাস Message Dispatching এর জন্য দায়ী। এটি SOAP মেসেজ রিসিভ করে এবং সঠিক এন্ডপয়েন্টে ডেলিভারি করে।
Endpoint Mapping
Message Dispatching প্রক্রিয়ায় Endpoint Mapping গুরুত্বপূর্ণ ভূমিকা পালন করে। এটি নির্ধারণ করে ইনকামিং মেসেজ কোন এন্ডপয়েন্টে পাঠানো হবে। Spring-WS বিভিন্ন ধরনের এন্ডপয়েন্ট ম্যাপিং সাপোর্ট করে:
- PayloadRootQNameEndpointMapping: SOAP মেসেজের Payload Root Element এর ভিত্তিতে এন্ডপয়েন্ট নির্বাচন করে।
- SoapActionEndpointMapping: SOAP মেসেজের SOAP Action হেডারের ভিত্তিতে এন্ডপয়েন্ট নির্বাচন করে।
- URIEndpointMapping: ইনকামিং রিকোয়েস্টের URI এর ভিত্তিতে এন্ডপয়েন্ট নির্বাচন করে।
উদাহরণ: Message Dispatching
MessageDispatcherServlet কনফিগার করা
Spring Configuration ব্যবহার করে MessageDispatcherServlet সেটআপ:
@EnableWs
@Configuration
public class WebServiceConfig extends WsConfigurerAdapter {
@Bean
public ServletRegistrationBean<MessageDispatcherServlet> messageDispatcherServlet(ApplicationContext context) {
MessageDispatcherServlet servlet = new MessageDispatcherServlet();
servlet.setApplicationContext(context);
servlet.setTransformWsdlLocations(true);
return new ServletRegistrationBean<>(servlet, "/ws/*");
}
}
Endpoint Mapping উদাহরণ
Payload Root Element ব্যবহার করে এন্ডপয়েন্ট নির্বাচন করা:
@Endpoint
public class ExampleEndpoint {
@PayloadRoot(namespace = "http://example.com/soap", localPart = "GetExampleRequest")
@ResponsePayload
public GetExampleResponse processRequest(@RequestPayload GetExampleRequest request) {
GetExampleResponse response = new GetExampleResponse();
response.setMessage("Hello, " + request.getName());
return response;
}
}
SOAP মেসেজ এবং Dispatching
যখন নিচের SOAP মেসেজটি পাঠানো হয়:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ex="http://example.com/soap">
<soapenv:Header/>
<soapenv:Body>
<ex:GetExampleRequest>
<name>John</name>
</ex:GetExampleRequest>
</soapenv:Body>
</soapenv:Envelope>
MessageDispatcherServlet মেসেজটি রিসিভ করে, এবং PayloadRootQNameEndpointMapping ব্যবহার করে GetExampleRequest পে-লোডের ভিত্তিতে ExampleEndpoint-এ মেসেজটি পাঠিয়ে দেয়।
Message Dispatching এর সুবিধা
স্বয়ংক্রিয় এন্ডপয়েন্ট নির্বাচন
Message Dispatching স্বয়ংক্রিয়ভাবে সঠিক এন্ডপয়েন্ট নির্বাচন করে, যা ম্যানুয়াল রাউটিং-এর প্রয়োজনীয়তা কমায়।
মডুলার আর্কিটেকচার
এন্ডপয়েন্ট ম্যাপিং আলাদাভাবে কনফিগার করা যায়, যা প্রজেক্টের মডুলারিটি বাড়ায়।
বর্ধিত স্থায়িত্ব এবং রিয়েল-টাইম প্রসেসিং
Message Dispatching এর মাধ্যমে ইনকামিং মেসেজ দ্রুত এবং নির্ভুলভাবে প্রসেস করা যায়।
স্কেলেবিলিটি
বড় এবং জটিল ওয়েব সার্ভিস আর্কিটেকচারের জন্য Message Dispatching একটি স্কেলেবল সমাধান।
সারাংশ
Spring Web Services-এ Message Dispatching SOAP মেসেজ প্রক্রিয়াকরণের একটি কেন্দ্রীয় অংশ। এটি ইনকামিং মেসেজ পার্স করে সঠিক এন্ডপয়েন্টে পাঠায় এবং মেসেজের কার্যকারিতা নিশ্চিত করে। MessageDispatcherServlet এবং Endpoint Mapping মিলে এই প্রক্রিয়াকে সহজ এবং কার্যকর করে তোলে।
MessageDispatcherServlet কী?
MessageDispatcherServlet হলো স্প্রিং ফ্রেমওয়ার্কের একটি বিশেষায়িত Servlet যা স্প্রিং ওয়েব সার্ভিসের জন্য SOAP মেসেজ প্রক্রিয়াজাত করে। এটি একটি ফ্রন্ট কন্ট্রোলার হিসেবে কাজ করে, যা SOAP অনুরোধ গ্রহণ করে, প্রাসঙ্গিক Endpoints এ রুট করে, এবং প্রতিক্রিয়া তৈরি করে।
MessageDispatcherServlet এর বৈশিষ্ট্য
- SOAP মেসেজ রাউটিং: এটি SOAP অনুরোধগুলিকে নির্দিষ্ট Endpoint-এ পাঠায়।
- WSDL প্রকাশ: এটি স্বয়ংক্রিয়ভাবে WSDL তৈরি এবং প্রকাশ করতে পারে।
- ইন্টিগ্রেশন সহজতর করে: স্প্রিং কনফিগারেশন ও কাস্টমাইজেশন সহজতর করে।
- বৈধতা যাচাই (Validation): এটি XSD স্কিমার ভিত্তিতে মেসেজ ভ্যালিডেশন সমর্থন করে।
MessageDispatcherServlet সেটআপ
MessageDispatcherServlet ব্যবহার করতে হলে এটি আপনার স্প্রিং কনফিগারেশনে যুক্ত করতে হবে।
উদাহরণ: 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); // WSDL লোকেশন ট্রান্সফর্ম সক্রিয়
return new ServletRegistrationBean<>(servlet, "/ws/*");
}
@Bean
public XsdSchema calculatorSchema() {
return new SimpleXsdSchema(new ClassPathResource("calculator.xsd"));
}
}
ব্যাখ্যা:
- Servlet Registration:
ServletRegistrationBeanব্যবহার করে MessageDispatcherServlet রেজিস্টার করা হয়। - Application Context: MessageDispatcherServlet এর জন্য স্প্রিং অ্যাপ্লিকেশন কনটেক্সট সেট করা হয়।
- WSDL লোকেশন ট্রান্সফর্ম:
setTransformWsdlLocations(true)সেট করলে WSDL ফাইলটি সহজেই উপলব্ধ হয়।
WSDL তৈরি করা
MessageDispatcherServlet এর সাহায্যে একটি WSDL প্রকাশ করা যেতে পারে। নিচে এর জন্য প্রয়োজনীয় সেটআপ দেখানো হলো।
CalculatorWsdlConfig.java
@Bean(name = "calculator")
public DefaultWsdl11Definition defaultWsdl11Definition(XsdSchema calculatorSchema) {
DefaultWsdl11Definition definition = new DefaultWsdl11Definition();
definition.setPortTypeName("CalculatorPort");
definition.setTargetNamespace("http://example.com/calculator");
definition.setLocationUri("/ws");
definition.setSchema(calculatorSchema);
return definition;
}
ব্যাখ্যা:
- Port Type Name: SOAP সার্ভিসের পোর্ট টাইপের নাম নির্ধারণ করে।
- Target Namespace: SOAP সার্ভিসের জন্য নির্দিষ্ট নামস্পেস।
- Location URI: SOAP সার্ভিসটি কোথায় উপলব্ধ হবে তা নির্দেশ করে।
- Schema: XSD ফাইল দ্বারা SOAP বার্তার কাঠামো নির্ধারণ করা হয়।
MessageDispatcherServlet এর কার্যপ্রবাহ
- SOAP অনুরোধ গ্রহণ: MessageDispatcherServlet HTTP প্রোটোকলের মাধ্যমে SOAP মেসেজ গ্রহণ করে।
- Endpoint সনাক্তকরণ: মেসেজের তথ্য অনুযায়ী নির্দিষ্ট Endpoint নির্বাচন করে।
- SOAP মেসেজ প্রক্রিয়াজাতকরণ: অনুরোধ প্রসেস করার জন্য Endpoint এ পাঠানো হয়।
- SOAP প্রতিক্রিয়া প্রেরণ: Endpoint থেকে প্রাপ্ত ফলাফল SOAP প্রতিক্রিয়া আকারে ক্লায়েন্টকে পাঠানো হয়।
উদাহরণ: SOAP অনুরোধ এবং প্রতিক্রিয়া
SOAP অনুরোধ (Request):
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:cal="http://example.com/calculator">
<soapenv:Header/>
<soapenv:Body>
<cal:AddRequest>
<cal:number1>5</cal:number1>
<cal:number2>10</cal:number2>
</cal:AddRequest>
</soapenv:Body>
</soapenv:Envelope>
SOAP প্রতিক্রিয়া (Response):
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:cal="http://example.com/calculator">
<soapenv:Header/>
<soapenv:Body>
<cal:AddResponse>
<cal:result>15</cal:result>
</cal:AddResponse>
</soapenv:Body>
</soapenv:Envelope>
MessageDispatcherServlet এর সুবিধা
- সহজ সেটআপ: স্প্রিং ওয়েব সার্ভিসে MessageDispatcherServlet সহজেই সেটআপ করা যায়।
- বৈধতা নিশ্চিতকরণ: XSD স্কিমার ভিত্তিতে SOAP বার্তা যাচাই করা যায়।
- ডকুমেন্টেশন তৈরি: WSDL স্বয়ংক্রিয়ভাবে তৈরি এবং প্রকাশ করা যায়।
- স্ট্যান্ডার্ড সমর্থন: SOAP এবং WS-Security এর মতো স্ট্যান্ডার্ড সমর্থন করে।
- কাস্টমাইজেশন: কনফিগারেশন সহজ এবং প্রয়োজন অনুযায়ী কাস্টমাইজ করা যায়।
সারাংশ
MessageDispatcherServlet স্প্রিং ওয়েব সার্ভিসে SOAP বার্তা প্রক্রিয়াজাত করার জন্য একটি কেন্দ্রীয় ভূমিকা পালন করে। এটি ক্লায়েন্ট এবং সার্ভারের মধ্যে নির্ভুল ও কার্যকর যোগাযোগ নিশ্চিত করে এবং SOAP ওয়েব সার্ভিসকে দ্রুত এবং সহজে বাস্তবায়ন করতে সহায়তা করে।
Endpoint Mapping কী?
স্প্রিং ওয়েব সার্ভিসেসে Endpoint Mapping হল একটি প্রক্রিয়া যেখানে SOAP বার্তা প্রক্রিয়াকরণের জন্য নির্দিষ্ট এন্ডপয়েন্ট নির্বাচন করা হয়। এটি SOAP রিকোয়েস্টের ভিত্তিতে সঠিক মেথড বা ক্লাসে রিকোয়েস্ট রাউট করে। স্প্রিং-WS ডিফল্ট এবং কাস্টম উভয় ধরনের এন্ডপয়েন্ট ম্যাপিং সমর্থন করে।
Default Endpoint Mapping
স্প্রিং-WS ডিফল্টভাবে বার্তা হ্যান্ডলিংয়ের জন্য PayloadRootQNameEndpointMapping ব্যবহার করে। এটি SOAP বার্তার Payload Root QName (Qualified Name) ব্যবহার করে নির্দিষ্ট এন্ডপয়েন্টে রিকোয়েস্ট পাঠায়।
কনফিগারেশন
ডিফল্ট এন্ডপয়েন্ট ম্যাপিং ব্যবহার করার জন্য নিচের ধাপগুলো অনুসরণ করা হয়:
Endpoint ক্লাস তৈরি
@Endpointঅ্যানোটেশন ব্যবহার করে একটি এন্ডপয়েন্ট তৈরি করতে হয়।উদাহরণ:
@Endpoint public class EmployeeEndpoint { private static final String NAMESPACE_URI = "http://example.com/webservice"; @PayloadRoot(namespace = NAMESPACE_URI, localPart = "GetEmployeeRequest") @ResponsePayload public GetEmployeeResponse getEmployee(@RequestPayload GetEmployeeRequest request) { GetEmployeeResponse response = new GetEmployeeResponse(); response.setName("John Doe"); response.setSalary(75000); return response; } }- SOAP রিকোয়েস্ট অনুযায়ী রুট নির্ধারণ
@PayloadRootঅ্যানোটেশন ব্যবহার করে রিকোয়েস্ট রুট এবং নেমস্পেস সংজ্ঞায়িত করতে হবে।
ডিফল্টের সুবিধা
- সহজে কনফিগার করা যায়।
- ছোট প্রকল্পের জন্য কার্যকর।
- কমপ্লেক্সিটি কম এবং দ্রুত সেটআপের জন্য আদর্শ।
Custom Endpoint Mapping
বড় এবং জটিল অ্যাপ্লিকেশনে SOAP বার্তা হ্যান্ডলিংয়ের জন্য Custom Endpoint Mapping ব্যবহার করা হয়। এটি বিশেষত তখন ব্যবহার করা হয় যখন বার্তা প্রসেসিংয়ের জন্য Payload Root QName যথেষ্ট নয়।
কাস্টম ম্যাপিংয়ের জন্য ক্লাসগুলো
স্প্রিং-WS কাস্টম ম্যাপিংয়ের জন্য কয়েকটি প্রিফিনড ক্লাস সরবরাহ করে:
- SoapActionEndpointMapping: SOAP অ্যাকশনের ভিত্তিতে এন্ডপয়েন্ট নির্বাচন করে।
- SimpleUrlEndpointMapping: URL এর ভিত্তিতে এন্ডপয়েন্ট ম্যাপ করে।
- XPathPayloadEndpointMapping: XPath এক্সপ্রেশন ব্যবহার করে এন্ডপয়েন্ট নির্ধারণ করে।
SoapActionEndpointMapping ব্যবহার
SOAP বার্তার SOAP Action এর ভিত্তিতে এন্ডপয়েন্ট নির্বাচন করতে SoapActionEndpointMapping ব্যবহার করা হয়।
SOAP Action সেটআপ
WSDL ফাইলে SOAP Action নির্ধারণ করতে হবে।উদাহরণ:
<soap:operation soapAction="http://example.com/webservice/GetEmployee"/>SOAP Action Mapping কনফিগার
কনফিগারেশনেSoapActionEndpointMappingযোগ করতে হবে।উদাহরণ:
@Bean public SoapActionEndpointMapping soapActionEndpointMapping() { SoapActionEndpointMapping mapping = new SoapActionEndpointMapping(); mapping.setMappings(Collections.singletonMap( "http://example.com/webservice/GetEmployee", "employeeEndpoint" )); return mapping; }
SimpleUrlEndpointMapping ব্যবহার
URL ভিত্তিক এন্ডপয়েন্ট নির্বাচন করতে SimpleUrlEndpointMapping ব্যবহার করা হয়।
Mapping Configuration
নির্দিষ্ট URL এবং এন্ডপয়েন্টের মধ্যে ম্যাপিং সেট করুন।উদাহরণ:
@Bean public SimpleUrlEndpointMapping simpleUrlEndpointMapping() { SimpleUrlEndpointMapping mapping = new SimpleUrlEndpointMapping(); mapping.setMappings(Collections.singletonMap( "/employeeService", "employeeEndpoint" )); return mapping; }
XPathPayloadEndpointMapping ব্যবহার
XML পেলোডের নির্দিষ্ট অংশের উপর ভিত্তি করে এন্ডপয়েন্ট নির্বাচন করতে XPathPayloadEndpointMapping ব্যবহার করা হয়।
XPath এক্সপ্রেশন নির্ধারণ
পেলোড থেকে XPath ব্যবহার করে বার্তা প্রক্রিয়াকরণের জন্য গুরুত্বপূর্ণ তথ্য নির্ধারণ করুন।উদাহরণ:
@Bean public XPathPayloadEndpointMapping xpathEndpointMapping() { XPathPayloadEndpointMapping mapping = new XPathPayloadEndpointMapping(); mapping.setExpressions(Collections.singletonMap( "//GetEmployeeRequest", "employeeEndpoint" )); return mapping; }
Default এবং Custom Endpoint Mapping এর তুলনা
| বৈশিষ্ট্য | Default Mapping | Custom Mapping |
|---|---|---|
| ব্যবহারযোগ্যতা | সাধারণ এবং দ্রুত সেটআপ | বড় এবং জটিল প্রকল্পে কার্যকর |
| কনফিগারেশন জটিলতা | সহজ | অপেক্ষাকৃত জটিল |
| আবশ্যকতা | PayloadRootQName যথেষ্ট | SOAP Action, URL বা XPath প্রয়োজন |
Endpoint Mapping কেন গুরুত্বপূর্ণ?
- SOAP বার্তা প্রক্রিয়াকরণ সহজ করে।
- প্রজেক্টের স্কেল অনুযায়ী কাস্টমাইজ করার সুযোগ দেয়।
- ক্লিন এবং ওয়েল-ডিফাইন্ড আর্কিটেকচার নিশ্চিত করে।
ডিফল্ট ম্যাপিং ছোট প্রকল্পে উপযোগী হলেও, কাস্টম ম্যাপিং বড় স্কেল এন্টারপ্রাইজ অ্যাপ্লিকেশনের জন্য অত্যন্ত কার্যকর।
Spring Web Services-এ Message Dispatching হলো SOAP মেসেজ প্রক্রিয়াকরণের একটি প্রক্রিয়া যেখানে ইনকামিং SOAP রিকোয়েস্ট একটি নির্দিষ্ট এন্ডপয়েন্টে রুট করা হয়। Spring-এ MessageDispatcherServlet এই কাজটি পরিচালনা করে। নিচে উদাহরণসহ Message Dispatching কনফিগারেশনের প্রক্রিয়া বর্ণনা করা হলো:
Message Dispatching-এর মূল উপাদান
- MessageDispatcherServlet: ইনকামিং SOAP মেসেজ প্রসেস করে এবং এন্ডপয়েন্টে পাঠায়।
- DefaultMethodEndpointAdapter: এন্ডপয়েন্ট ক্লাসের মেথডগুলোকে সঠিকভাবে কল করতে সাহায্য করে।
- PayloadRootAnnotationMethodEndpointMapping: SOAP পেইলোডের রুট এলিমেন্টের ভিত্তিতে এন্ডপয়েন্ট ম্যাপিং করে।
Message Dispatching কনফিগারেশন
ধাপ ১: Maven ডিপেন্ডেন্সি যোগ করা
SOAP মেসেজ ডিসপ্যাচার সক্রিয় করতে নিচের ডিপেন্ডেন্সিগুলো নিশ্চিত করুন:
<dependency>
<groupId>org.springframework.ws</groupId>
<artifactId>spring-ws-core</artifactId>
<version>2.5.0</version>
</dependency>
ধাপ ২: MessageDispatcherServlet কনফিগার করা
MessageDispatcherServlet কনফিগার করতে একটি Spring Configuration ক্লাস তৈরি করুন।
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); // WSDL লোকেশনের ডাইনামিক রুটিং সক্রিয় করে
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"));
}
}
ব্যাখ্যা:
ServletRegistrationBeanক্লাস ব্যবহার করেMessageDispatcherServletরেজিস্টার করা হয়েছে।setTransformWsdlLocations(true)ফিচারটি SOAP WSDL লোকেশন ডাইনামিক করার জন্য ব্যবহার করা হয়।/ws/*এই URL প্যাটার্নটি SOAP সার্ভিসকে রুট করার জন্য নির্ধারণ করা হয়েছে।
ধাপ ৩: এন্ডপয়েন্ট তৈরি
একটি এন্ডপয়েন্ট তৈরি করুন যা ইনকামিং SOAP মেসেজ প্রসেস করবে।
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 getStudentDetails(@RequestPayload GetStudentRequest request) {
GetStudentResponse response = new GetStudentResponse();
response.setName("John Doe");
response.setAge(22);
response.setGrade("A");
return response;
}
}
ব্যাখ্যা:
@Endpoint: এই অ্যানোটেশন একটি ক্লাসকে SOAP এন্ডপয়েন্ট হিসেবে চিহ্নিত করে।@PayloadRoot: ইনকামিং পেইলোডের রুট এলিমেন্ট এবং নেমস্পেসের ভিত্তিতে এন্ডপয়েন্ট ম্যাপিং করে।@RequestPayloadএবং@ResponsePayload: ইনকামিং SOAP পেইলোডকে ডি-সিরিয়ালাইজ এবং আউটগোয়িং পেইলোডকে সিরিয়ালাইজ করতে ব্যবহৃত হয়।
ধাপ ৪: WSDL ফাইল এবং Schema তৈরি
SOAP সার্ভিসের কাঠামো নিশ্চিত করতে WSDL এবং Schema তৈরি করতে হবে।
student-details.xsd:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://example.com/students"
xmlns="http://example.com/students"
elementFormDefault="qualified">
<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>
ধাপ ৫: সার্ভিস পরীক্ষা
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-এ Message Dispatching কনফিগারেশন সহজ এবং কার্যকর। MessageDispatcherServlet ইনকামিং SOAP মেসেজগুলো সঠিক এন্ডপয়েন্টে রুট করে এবং তা প্রসেস করে। উপরের ধাপগুলো অনুসরণ করে একটি শক্তিশালী SOAP সার্ভিস তৈরি ও কনফিগার করা যায়।
Read more