উদাহরণ সহ Schema Validation

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

285

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...