WSDL এবং Schema Validation

স্প্রিং ওয়েব সার্ভিসেস (Spring Web Services) - Java Technologies

337

WSDL এবং Schema Validation কি?

WSDL (Web Services Description Language) হলো একটি ফরম্যাট যা ওয়েব সার্ভিসের কার্যপ্রণালী এবং ডেটা বিনিময়ের কাঠামো বর্ণনা করে।
Schema Validation হলো XML ডকুমেন্টের গঠন এবং ডেটা যাচাই করার একটি পদ্ধতি, যা একটি পূর্বনির্ধারিত XML Schema (XSD) এর সাথে ডকুমেন্টটি মেলে কিনা তা নিশ্চিত করে।

Spring Web Services এই দুটি গুরুত্বপূর্ণ বৈশিষ্ট্য সমর্থন করে, যা SOAP ভিত্তিক ওয়েব সার্ভিস তৈরির সময় কার্যকর ডেটা ভ্যালিডেশন এবং স্ট্যান্ডার্ডাইজড সিস্টেম নিশ্চিত করে।


WSDL এর ভূমিকা

WSDL একটি ওয়েব সার্ভিসের কন্ট্রাক্ট বা API-এর ডকুমেন্টেশন হিসাবে কাজ করে। এটি নির্ধারণ করে:

  • সার্ভিসের এন্ডপয়েন্ট (Endpoint) কোথায় অবস্থিত।
  • সার্ভিসের অপারেশনগুলো (Operations) কী কী।
  • ডেটা বিনিময়ের ইনপুট এবং আউটপুট কাঠামো (Input/Output Schema) কেমন।

Spring Web Services এ WSDL ব্যবহার করে SOAP সার্ভিস তৈরি করার জন্য কন্ট্রাক্ট-প্রথম পদ্ধতি গ্রহণ করা হয়।


Schema Validation এর ভূমিকা

Schema Validation সার্ভিসে পাঠানো XML মেসেজটি সঠিক কাঠামো এবং ডেটা টাইপ অনুসরণ করছে কিনা তা নিশ্চিত করে। এটি নিম্নোক্ত কারণে গুরুত্বপূর্ণ:

  • ইনপুট মেসেজ ভ্যালিড না হলে সার্ভিসটি সঠিকভাবে কাজ করতে পারবে না।
  • ভ্যালিডেশন ব্যবহার করে অপ্রত্যাশিত ডেটা বা সিকিউরিটি ঝুঁকি এড়ানো যায়।
  • এটি ডেভেলপারদের ডিবাগ এবং ত্রুটি খুঁজে বের করতে সহায়তা করে।

Spring Web Services এ WSDL এবং Schema Validation

WSDL তৈরি ও কনফিগারেশন

Spring Web Services এ WSDL ফাইল তৈরি করতে নিম্নলিখিত ধাপগুলি অনুসরণ করা হয়:

  1. XML Schema তৈরি: একটি XML Schema (XSD) তৈরি করুন যা ইনপুট এবং আউটপুট ডেটার কাঠামো নির্ধারণ করে।
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://example.com/schema">
    <xs:element name="MyRequest">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="name" type="xs:string" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="MyResponse">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="message" type="xs:string" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>
  1. WSDL Configuration:

Spring Web Services এ WSDL কনফিগার করতে নিচের মত Bean ব্যবহার করা হয়:

@Bean(name = "myService")
public DefaultWsdl11Definition defaultWsdl11Definition(XsdSchema mySchema) {
    DefaultWsdl11Definition wsdl11Definition = new DefaultWsdl11Definition();
    wsdl11Definition.setPortTypeName("MyServicePort");
    wsdl11Definition.setLocationUri("/ws");
    wsdl11Definition.setTargetNamespace("http://example.com/schema");
    wsdl11Definition.setSchema(mySchema);
    return wsdl11Definition;
}

@Bean
public XsdSchema mySchema() {
    return new SimpleXsdSchema(new ClassPathResource("my-schema.xsd"));
}
  1. WSDL ফাইল অ্যাক্সেস: অ্যাপ্লিকেশন চালু করার পর WSDL ফাইলটি http://localhost:8080/ws/myService.wsdl থেকে দেখা যাবে।

Schema Validation কার্যকর করা

Schema Validation কার্যকর করতে @Endpoint ক্লাসে ইনকামিং মেসেজের ভ্যালিডেশন যোগ করতে হয়। Spring Web Services স্বয়ংক্রিয়ভাবে Schema Validation সমর্থন করে। উদাহরণস্বরূপ:

@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;
    }
}

Validation ত্রুটি পরিচালনা

ভ্যালিডেশন ত্রুটি হলে Spring Web Services স্বয়ংক্রিয়ভাবে SOAP Fault রেসপন্স তৈরি করে। উদাহরণ:

<soap:Fault>
    <faultcode>soap:Client</faultcode>
    <faultstring>Validation error</faultstring>
</soap:Fault>

WSDL এবং Schema Validation এর উপকারিতা

  • ত্রুটি হ্রাস: ডেটা কাঠামো ভুল হলে আগেই তা সনাক্ত করা যায়।
  • সুরক্ষা নিশ্চিত: অপ্রত্যাশিত ডেটা বা ইনজেকশন আক্রমণ প্রতিরোধ করা যায়।
  • ডকুমেন্টেশন: WSDL স্বয়ংক্রিয় ডকুমেন্টেশন হিসেবে কাজ করে।
  • স্ট্যান্ডার্ডাইজড যোগাযোগ: কনজিউমার এবং প্রোভাইডারের মধ্যে একক কাঠামোতে যোগাযোগ হয়।

সারাংশ

Spring Web Services এ WSDL এবং Schema Validation ওয়েব সার্ভিসের কার্যকারিতা এবং নির্ভুলতা নিশ্চিত করে। এটি সার্ভিসের ইনপুট ও আউটপুট ভ্যালিডেশন সহজ করে এবং স্ট্যান্ডার্ড মেনে ডেটা বিনিময়ের মাধ্যমে ডেভেলপারদের উন্নত মানের সেবা প্রদান করতে সাহায্য করে।


Content added By

WSDL (Web Services Description Language) একটি XML (Extensible Markup Language) ভিত্তিক ভাষা যা ওয়েব সার্ভিসের কার্যকারিতা এবং ডেটা বিনিময়ের পদ্ধতি বর্ণনা করে। এটি মূলত ক্লায়েন্ট এবং সার্ভারের মধ্যে যোগাযোগের চুক্তি (Contract) নির্ধারণ করতে ব্যবহৃত হয়।

WSDL একটি ওয়েব সার্ভিস সম্পর্কে নিম্নলিখিত বিষয়গুলো স্পষ্ট করে:

  • কী কী কার্যক্রম (Operations) উপলব্ধ।
  • কী ধরনের ইনপুট এবং আউটপুট ডেটা ব্যবহার করা হবে।
  • কোন প্রোটোকল এবং এন্ডপয়েন্ট (Endpoints) ব্যবহৃত হবে।

WSDL এর গঠন

WSDL সাধারণত নিচের কিছু প্রধান উপাদান নিয়ে গঠিত:

Types

ডেটা টাইপ সংজ্ঞায়িত করে। এটি XML Schema ব্যবহার করে ইনপুট এবং আউটপুট ডেটার গঠন নির্ধারণ করে।

<types>
    <schema>
        <!-- XML Schema Definition -->
    </schema>
</types>

Message

ওয়েব সার্ভিসের জন্য ইনপুট এবং আউটপুট বার্তার কাঠামো নির্ধারণ করে।

<message name="GetExampleRequest">
    <part name="parameters" element="tns:GetExampleRequest"/>
</message>

PortType

সার্ভিসের উপলব্ধ কার্যক্রম (Operations) এবং তাদের ইনপুট ও আউটপুট বার্তা সংজ্ঞায়িত করে।

<portType name="ExamplePortType">
    <operation name="GetExample">
        <input message="tns:GetExampleRequest"/>
        <output message="tns:GetExampleResponse"/>
    </operation>
</portType>

Binding

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"/>
    </operation>
</binding>

Service

এন্ডপয়েন্ট বা URL নির্দেশ করে যা ওয়েব সার্ভিসে অ্যাক্সেস দেয়।

<service name="ExampleService">
    <port name="ExamplePort" binding="tns:ExampleBinding">
        <soap:address location="http://example.com/soap"/>
    </port>
</service>

WSDL কীভাবে কাজ করে?

  1. ওয়েব সার্ভিস প্রকাশ
    একটি ওয়েব সার্ভিস তৈরি করার পর, WSDL ব্যবহার করে সেই সার্ভিসের ডেটা বিনিময়ের নিয়ম এবং এন্ডপয়েন্ট সম্পর্কে তথ্য প্রকাশ করা হয়।
  2. ক্লায়েন্ট জেনারেশন
    WSDL ফাইল ব্যবহার করে ক্লায়েন্ট অ্যাপ্লিকেশন জেনারেট করা হয়। এটি সার্ভিসে যোগাযোগের জন্য প্রয়োজনীয় স্টাব (Stub) তৈরি করে।
  3. SOAP বার্তা বিনিময়
    ক্লায়েন্ট এবং সার্ভারের মধ্যে SOAP বার্তা আদান-প্রদান হয়। WSDL অনুযায়ী এই বার্তাগুলোর গঠন নিশ্চিত করা হয়।
  4. প্রোটোকল নির্ধারণ
    WSDL HTTP, SMTP, বা JMS এর মতো বিভিন্ন প্রোটোকল সমর্থন করে। ক্লায়েন্ট এবং সার্ভার এই প্রোটোকলের মাধ্যমে যোগাযোগ স্থাপন করে।

WSDL ব্যবহার করার সুবিধা

স্ট্যান্ডার্ড চুক্তি (Standard Contract):

ক্লায়েন্ট এবং সার্ভারের মধ্যে নির্ভরযোগ্য যোগাযোগের জন্য একটি নির্দিষ্ট স্ট্যান্ডার্ড নির্ধারণ করে।

ইন্টারঅপারেবিলিটি:

WSDL এর সাহায্যে ভিন্ন ভিন্ন প্ল্যাটফর্ম এবং প্রোগ্রামিং ভাষায় তৈরি অ্যাপ্লিকেশন একে অপরের সঙ্গে কাজ করতে পারে।

স্বয়ংক্রিয় ক্লায়েন্ট জেনারেশন:

WSDL ফাইল থেকে স্বয়ংক্রিয়ভাবে ক্লায়েন্ট জেনারেট করা যায়, যা ডেভেলপমেন্টে সময় সাশ্রয় করে।

স্কেলেবিলিটি:

WSDL ব্যবহার করে সহজেই নতুন ফিচার বা এন্ডপয়েন্ট যুক্ত করা যায়।


উদাহরণ: WSDL ফাইল

নিম্নলিখিত একটি উদাহরণ WSDL ফাইল:

<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:tns="http://example.com/soap"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://example.com/soap">
    
    <types>
        <xsd:schema targetNamespace="http://example.com/soap">
            <xsd:element name="GetExampleRequest" type="xsd:string"/>
            <xsd:element name="GetExampleResponse" type="xsd:string"/>
        </xsd:schema>
    </types>

    <message name="GetExampleRequest">
        <part name="parameters" element="tns:GetExampleRequest"/>
    </message>
    <message name="GetExampleResponse">
        <part name="parameters" element="tns:GetExampleResponse"/>
    </message>

    <portType name="ExamplePortType">
        <operation name="GetExample">
            <input message="tns:GetExampleRequest"/>
            <output message="tns:GetExampleResponse"/>
        </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://example.com/soap"/>
        </port>
    </service>
</definitions>

সারাংশ

WSDL একটি গুরুত্বপূর্ণ টুল যা ওয়েব সার্ভিসের কার্যকারিতা এবং ডেটা বিনিময়ের পদ্ধতি নির্ধারণ করে। এটি ওয়েব সার্ভিসের ইন্টারঅপারেবিলিটি এবং কার্যকারিতা নিশ্চিত করতে সাহায্য করে। ডেভেলপমেন্ট প্রক্রিয়াকে সুসংগঠিত এবং সহজ করতে WSDL একটি অপরিহার্য মাধ্যম।

Content added By

Schema Validation কী?

Schema Validation হলো XML ডেটা একটি নির্ধারিত স্কিমা (XSD - XML Schema Definition) অনুযায়ী বৈধ কিনা তা যাচাই করার প্রক্রিয়া। স্প্রিং ওয়েব সার্ভিসে এটি SOAP অনুরোধ এবং প্রতিক্রিয়ার ডেটা কাঠামোর নির্ভুলতা নিশ্চিত করতে ব্যবহৃত হয়।


Schema Validation এর প্রয়োজনীয়তা

ডেটার সঠিকতা নিশ্চিত করা

SOAP মেসেজে পাঠানো ডেটা যদি নির্ধারিত কাঠামো (XSD) অনুযায়ী না হয়, তাহলে সঠিকভাবে ডেটা প্রক্রিয়াজাত করা সম্ভব নয়। Schema Validation ডেটার সঠিকতা নিশ্চিত করে।

ক্লায়েন্ট-সার্ভার চুক্তি বজায় রাখা

SOAP ওয়েব সার্ভিস একটি চুক্তি-ভিত্তিক প্রক্রিয়া। XSD ফাইল সেই চুক্তির কাঠামো নির্ধারণ করে। Schema Validation নিশ্চিত করে যে ক্লায়েন্ট এবং সার্ভার উভয় পক্ষ চুক্তি অনুযায়ী ডেটা আদান-প্রদান করছে।

ত্রুটি শনাক্তকরণ সহজ করা

Schema Validation ব্যবহার করলে ভুল বা অনুপযুক্ত ডেটা সহজেই শনাক্ত করা যায়। এটি ডিবাগিং সহজতর করে এবং সার্ভারের ডেটা প্রসেসিং লজিকে সমস্যা সৃষ্টি হতে দেয় না।

সুরক্ষা নিশ্চিত করা

অনির্ধারিত বা ভুল কাঠামোর ডেটা গ্রহণ করলে সার্ভারে নিরাপত্তা ঝুঁকি তৈরি হতে পারে। Schema Validation নিশ্চিত করে যে শুধুমাত্র বৈধ ডেটাই সার্ভারে প্রক্রিয়াজাত হবে।

স্ট্যান্ডার্ড রক্ষা করা

SOAP ওয়েব সার্ভিসের একটি নির্ধারিত স্ট্যান্ডার্ড রয়েছে। XSD ভিত্তিক Schema Validation ব্যবহার করলে সেই স্ট্যান্ডার্ড মেনে ডেটা আদান-প্রদান নিশ্চিত হয়।


স্প্রিং ওয়েব সার্ভিসে Schema Validation কনফিগারেশন

স্প্রিং ওয়েব সার্ভিসে Schema Validation খুব সহজেই কনফিগার করা যায়। নিচে এর উদাহরণ দেওয়া হলো:

XSD ফাইল

প্রথমে একটি XSD ফাইল তৈরি করতে হবে, যেখানে ডেটার কাঠামো নির্ধারণ করা থাকবে।

calculator.xsd

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://example.com/calculator"
           xmlns="http://example.com/calculator" elementFormDefault="qualified">

    <xs:element name="AddRequest">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="number1" type="xs:int"/>
                <xs:element name="number2" type="xs:int"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="AddResponse">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="result" type="xs:int"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

</xs:schema>

Schema Validation সক্রিয় করা

স্প্রিং কনফিগারেশনে Validator এবং XSD Schema যুক্ত করে Validation কনফিগার করতে হবে।

WebServiceConfig.java

@EnableWs
@Configuration
public class WebServiceConfig extends WsConfigurerAdapter {

    @Bean
    public XsdSchema calculatorSchema() {
        return new SimpleXsdSchema(new ClassPathResource("calculator.xsd"));
    }

    @Bean
    public PayloadValidatingInterceptor validatingInterceptor() {
        PayloadValidatingInterceptor interceptor = new PayloadValidatingInterceptor();
        interceptor.setValidateRequest(true); // অনুরোধ যাচাই
        interceptor.setValidateResponse(true); // প্রতিক্রিয়া যাচাই
        interceptor.setSchema(calculatorSchema());
        return interceptor;
    }

    @Override
    public void addInterceptors(List<EndpointInterceptor> interceptors) {
        interceptors.add(validatingInterceptor());
    }
}

Schema Validation সক্রিয় করার উপকারিতা

  1. SOAP বার্তার নির্ভুলতা: অনুরোধ ও প্রতিক্রিয়ার ডেটা স্বয়ংক্রিয়ভাবে যাচাই হয়।
  2. ত্রুটির তাত্ক্ষণিক প্রতিবেদন: ভুল XML ডেটার জন্য সার্ভার তাত্ক্ষণিকভাবে ক্লায়েন্টকে ত্রুটির বার্তা পাঠায়।
  3. উন্নত ডিবাগিং: সমস্যার কারণ দ্রুত শনাক্ত করা যায়।
  4. বিশ্বস্ত পরিষেবা: বৈধ ডেটা নিশ্চিত করে পরিষেবা আরও নির্ভরযোগ্য করে তোলে।

উদাহরণ: Validation ত্রুটি

ভুল SOAP অনুরোধ:

<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>INVALID</cal:number2>
        </cal:AddRequest>
    </soapenv:Body>
</soapenv:Envelope>

সার্ভার প্রতিক্রিয়া:

<soapenv:Fault xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <faultcode>soapenv:Client</faultcode>
    <faultstring>Validation error: 'INVALID' is not a valid integer</faultstring>
</soapenv:Fault>

সারাংশ

Schema Validation স্প্রিং ওয়েব সার্ভিসে SOAP বার্তার গুণগত মান এবং নিরাপত্তা নিশ্চিত করতে অত্যন্ত গুরুত্বপূর্ণ। এটি ডেটার কাঠামো যাচাই করে, ত্রুটি শনাক্ত করে, এবং ওয়েব সার্ভিসের চুক্তি রক্ষা করে।

Content added By

WSDL এবং XSD কী?

  • WSDL (Web Services Description Language)
    WSDL একটি XML ভিত্তিক ভাষা যা ওয়েব সার্ভিসের ফাংশনালিটি বর্ণনা করে। এটি ক্লায়েন্ট এবং সার্ভারের মধ্যে যোগাযোগের জন্য প্রয়োজনীয় কনফিগারেশন প্রদান করে।
    উদাহরণস্বরূপ, WSDL ফাইলে সার্ভিসের নাম, পোর্ট টাইপ, অপারেশন, এবং ডেটা টাইপ বর্ণিত থাকে।
  • XSD (XML Schema Definition)
    XSD একটি স্ট্যান্ডার্ড যা XML ডকুমেন্টের ডেটার গঠন এবং সীমাবদ্ধতাগুলি বর্ণনা করে। WSDL ফাইলে ব্যবহৃত XML মেসেজ ফরম্যাটের গঠন XSD দ্বারা নির্ধারিত হয়।

Spring Web Services এ WSDL এবং XSD ব্যবহারের গুরুত্ব

  • SOAP বার্তা স্ট্রাকচার
    SOAP বার্তার ডেটা টাইপ এবং ফরম্যাট সংজ্ঞায়িত করতে XSD ব্যবহার করা হয়।
  • ক্লায়েন্ট-সার্ভার চুক্তি (Contract-First Approach)
    WSDL এবং XSD ব্যবহার করে ক্লায়েন্ট ও সার্ভারের মধ্যে ডেটা বিনিময়ের কাঠামো নির্ধারিত হয়।

Spring Web Services এ WSDL এবং XSD কনফিগারেশন

WSDL ফাইল তৈরি

  1. WSDL ফাইল তৈরি করুন
    একটি WSDL ফাইল তৈরি করুন যেখানে সার্ভিসের অপারেশন এবং ডেটা টাইপ নির্ধারণ করা হয়েছে।

    উদাহরণ:

    <definitions xmlns="http://schemas.xmlsoap.org/wsdl/" 
                 xmlns:tns="http://example.com/webservice" 
                 xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
                 name="EmployeeService" 
                 targetNamespace="http://example.com/webservice">
        
        <types>
            <xsd:schema targetNamespace="http://example.com/webservice">
                <xsd:element name="GetEmployeeRequest">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="id" type="xsd:int"/>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
                <xsd:element name="GetEmployeeResponse">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="name" type="xsd:string"/>
                            <xsd:element name="salary" type="xsd:double"/>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
            </xsd:schema>
        </types>
        
        <message name="GetEmployeeRequest">
            <part name="parameters" element="tns:GetEmployeeRequest"/>
        </message>
        <message name="GetEmployeeResponse">
            <part name="parameters" element="tns:GetEmployeeResponse"/>
        </message>
        
        <portType name="EmployeeServicePortType">
            <operation name="GetEmployee">
                <input message="tns:GetEmployeeRequest"/>
                <output message="tns:GetEmployeeResponse"/>
            </operation>
        </portType>
        
        <binding name="EmployeeServiceBinding" type="tns:EmployeeServicePortType">
            <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
            <operation name="GetEmployee">
                <soap:operation soapAction="http://example.com/webservice/GetEmployee"/>
                <input>
                    <soap:body use="literal"/>
                </input>
                <output>
                    <soap:body use="literal"/>
                </output>
            </operation>
        </binding>
        
        <service name="EmployeeService">
            <port name="EmployeeServicePort" binding="tns:EmployeeServiceBinding">
                <soap:address location="http://localhost:8080/ws"/>
            </port>
        </service>
    </definitions>
    

XSD ফাইল তৈরি

XSD ফাইল তৈরি করে XML ডেটার কাঠামো এবং বৈধতা নিয়ন্ত্রণ করতে হবে।

উদাহরণ:

<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="GetEmployeeRequest">
       <xs:complexType>
           <xs:sequence>
               <xs:element name="id" type="xs:int"/>
           </xs:sequence>
       </xs:complexType>
   </xs:element>

   <xs:element name="GetEmployeeResponse">
       <xs:complexType>
           <xs:sequence>
               <xs:element name="name" type="xs:string"/>
               <xs:element name="salary" type="xs:double"/>
           </xs:sequence>
       </xs:complexType>
   </xs:element>

</xs:schema>

Spring Configuration

  1. Endpoint তৈরি
    একটি Spring Endpoint তৈরি করতে হবে যা SOAP বার্তা হ্যান্ডল করবে।

    উদাহরণ:

    @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;
        }
    }
    
  2. WSDL এবং XSD Bean Configuration
    Spring এর Application Context এ WSDL এবং XSD কনফিগার করুন।

    উদাহরণ:

    @Bean
    public DefaultWsdl11Definition defaultWsdl11Definition(XsdSchema employeeSchema) {
        DefaultWsdl11Definition wsdl11Definition = new DefaultWsdl11Definition();
        wsdl11Definition.setPortTypeName("EmployeeServicePort");
        wsdl11Definition.setLocationUri("/ws");
        wsdl11Definition.setTargetNamespace("http://example.com/webservice");
        wsdl11Definition.setSchema(employeeSchema);
        return wsdl11Definition;
    }
    
    @Bean
    public XsdSchema employeeSchema() {
        return new SimpleXsdSchema(new ClassPathResource("employee.xsd"));
    }
    

WSDL এবং XSD এর সুবিধা

  • ডেটা স্ট্রাকচার এবং সার্ভিস ইন্টারফেস নির্ধারণে স্বচ্ছতা প্রদান করে।
  • ক্লায়েন্ট-সার্ভারের মধ্যে যোগাযোগে ভুলের সম্ভাবনা হ্রাস করে।
  • বড় আকারের এন্টারপ্রাইজ সিস্টেমে পুনর্ব্যবহারযোগ্য এবং একক ডেটা চুক্তি নিশ্চিত করে।

Spring Web Services এ WSDL এবং XSD কনফিগারেশন SOAP ওয়েব সার্ভিসের কার্যকারিতা বাড়ায় এবং এটি ক্লায়েন্ট-সার্ভারের মধ্যে নির্ভরযোগ্য যোগাযোগের সুযোগ দেয়।

Content added By

Schema Validation একটি গুরুত্বপূর্ণ বৈশিষ্ট্য, যা নিশ্চিত করে যে SOAP মেসেজের পেইলোড (Payload) এক্সএমএল স্কিমার (XML Schema) নিয়ম অনুসারে তৈরি হয়েছে। Spring Web Services ব্যবহার করে Schema Validation সহজেই কনফিগার করা যায়। এটি SOAP মেসেজ প্রক্রিয়াকরণের আগে ডেটার সঠিকতা যাচাই করে এবং প্রয়োজন অনুযায়ী ত্রুটি প্রদর্শন করে।


Schema Validation যোগ করার ধাপসমূহ

প্রয়োজনীয় ডিপেন্ডেন্সি

প্রথমে প্রকল্পে প্রয়োজনীয় Maven ডিপেন্ডেন্সি যোগ করুন। উদাহরণস্বরূপ:

<dependency>
    <groupId>org.springframework.ws</groupId>
    <artifactId>spring-ws-core</artifactId>
    <version>2.5.0</version>
</dependency>
<dependency>
    <groupId>org.springframework.oxm</groupId>
    <artifactId>spring-oxm</artifactId>
    <version>5.3.0</version>
</dependency>

ধাপ ১: XML স্কিমা তৈরি

প্রথমে SOAP মেসেজের কাঠামো নির্ধারণের জন্য একটি XML স্কিমা তৈরি করুন।

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>

ধাপ ২: WSDL ফাইল তৈরি

একটি WSDL ফাইল তৈরি করুন যা SOAP সার্ভিসের কাঠামো নির্ধারণ করবে। স্কিমাটি এখানে ইমপোর্ট করতে হবে।

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>
            <xsd:import namespace="http://example.com/students" schemaLocation="student-details.xsd"/>
        </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>

ধাপ ৩: Spring Configuration

Schema Validation নিশ্চিত করতে 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);
        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"));
    }
}

ধাপ ৪: এন্ডপয়েন্ট তৈরি

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) {
        // Validate the payload (Spring will automatically validate using the schema)
        if (request.getId() <= 0) {
            throw new IllegalArgumentException("Invalid student ID");
        }

        GetStudentResponse response = new GetStudentResponse();
        response.setName("John Doe");
        response.setAge(22);
        response.setGrade("A");
        return response;
    }
}

ধাপ ৫: Schema Validation সক্রিয়করণ

Spring Web Services স্বয়ংক্রিয়ভাবে পেইলোড ভ্যালিডেশন করে যদি স্কিমা সঠিকভাবে সংযুক্ত থাকে। WSDL এবং XSD এর মধ্যে সংযোগ নিশ্চিত করতে হবে।

SOAP ক্লায়েন্ট থেকে যদি ভুল কাঠামোর মেসেজ পাঠানো হয়, তাহলে Spring একটি SOAP Fault ফেরত পাঠাবে, যা ত্রুটির কারণ ব্যাখ্যা করবে।


ধাপ ৬: SOAP ক্লায়েন্ট ব্যবহার

একটি সঠিক 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>

যদি স্কিমার বিপরীতে কোনো ত্রুটি থাকে, যেমন id ফিল্ডে ভুল ডেটা প্রদান করা হয়, তাহলে SOAP Fault রেসপন্স হবে:

<soapenv:Fault>
   <faultcode>soapenv:Client</faultcode>
   <faultstring>Validation error: Invalid content</faultstring>
</soapenv:Fault>

সারাংশ

Spring Web Services এর Schema Validation ডেটার সঠিকতা এবং কাঠামো নিশ্চিত করতে সাহায্য করে। এটি স্বয়ংক্রিয় ভ্যালিডেশন সাপোর্ট করে, যা জটিল SOAP সার্ভিসের জন্য অত্যন্ত কার্যকর। উপরের ধাপগুলো অনুসরণ করে একটি কার্যকর ভ্যালিডেশন সিস্টেম সহজেই তৈরি করা সম্ভব।

Content added By
Promotion

Are you sure to start over?

Loading...