SOAP বার্তা যাচাইকরণ নীতি রানটাইম ত্রুটি সমস্যা সমাধান

আপনি Apigee Edge-এর ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন
.info- তে যান।

উৎস বার্তা উপলব্ধ নয়

ত্রুটি কোড

steps.messagevalidation.SourceMessageNotAvailable

ত্রুটিপূর্ণ প্রতিক্রিয়া বডি

{
  "fault": {
    "faultstring": "source_var_name message is not
     available for[policy_name]",
    "detail": {
      "Errorcode":
       "steps.messagevalidation.SourceMessageNotAvailable"
     }
  }
}

ত্রুটির প্রতিক্রিয়া বডির উদাহরণ

{
  "fault": {
    "faultstring": "request message is not available for MessageValidation: SOAP-Message-Validation-1",
    "detail": {
      "errorcode": "steps.messagevalidation.SourceMessageNotAvailable"
    }
  }
}

কারণ

SOAPMessageValidation পলিসির <Source> এলিমেন্টে নির্দিষ্ট করা মেসেজ ভেরিয়েবলটি যদি নিম্নলিখিতগুলির মধ্যে কোনো একটি হয়, তাহলে এই ত্রুটিটি ঘটে:

  • আওতার বাইরে (যে নির্দিষ্ট কার্যপ্রবাহে নীতিমালাটি কার্যকর করা হচ্ছে সেখানে উপলব্ধ নয়) অথবা
  • সমাধান করা যাচ্ছে না (সংজ্ঞায়িত নয়)

উদাহরণস্বরূপ, এই ত্রুটিটি ঘটে যদি SOAPMessageValidation পলিসির <Source> এলিমেন্টটি এমন একটি ভেরিয়েবলে সেট করা হয় যা পলিসিটি কার্যকর করার ফ্লো-তে বিদ্যমান নেই।

রোগ নির্ণয়

  1. ফল্ট স্ট্রিং থেকে ত্রুটি ঘটা SOAPMessageValidation পলিসির নাম এবং source ভেরিয়েবলের নাম শনাক্ত করুন। উদাহরণস্বরূপ, নিম্নলিখিত ফল্ট স্ট্রিং-এ, SOAPMessageValidation পলিসির নাম হলো SOAP-Message-Validation-1 এবং source ভেরিয়েবল হলো request :

    "faultstring": "request message is not available for MessageValidation: SOAP-Message-Validation-1"
    
  2. ব্যর্থ হওয়া SOAPMessageValidation পলিসি XML-এ, <Source> এলিমেন্টে সেট করা ভেরিয়েবলের নামটি ফল্ট স্ট্রিং-এ (উপরের ধাপ ১) চিহ্নিত ভেরিয়েবলের নামের সাথে মেলে কিনা তা যাচাই করুন।

    উদাহরণস্বরূপ, নিম্নলিখিত SOAPMessageValidation পলিসিটি <Source> এলিমেন্টে request নামের একটি ভেরিয়েবল নির্দিষ্ট করে, যা ফল্ট স্ট্রিং-এর বিষয়বস্তুর সাথে মিলে যায়:

    <MessageValidation async="false" continueOnError="false" enabled="true" name="SOAP-Message-Validation-1">
        <DisplayName>SOAP Message Validation-1</DisplayName>
        <Properties/>
        <Element namespace="http://schemas.xmlsoap.org/soap/prices">GetPriceResponse</Element>
        <SOAPMessage/>
        <Source>request</Source>
        <ResourceURL>xsd://Script-1.xsd</ResourceURL>
    </MessageValidation>
    
  3. <Source> এলিমেন্টে ব্যবহৃত ভেরিয়েবলটি সেই ফ্লো-তে সংজ্ঞায়িত এবং উপলব্ধ আছে কিনা তা নির্ধারণ করুন, যেখানে SOAPMessageValidation পলিসিটি কার্যকর করা হচ্ছে।

    যদি ভেরিয়েবলটি হয়:

    • আওতার বাইরে (যে নির্দিষ্ট কার্যপ্রবাহে নীতিমালাটি কার্যকর করা হচ্ছে সেখানে উপলব্ধ নয়) অথবা
    • সমাধান করা যাচ্ছে না (সংজ্ঞায়িত নয়)

    তাহলে এটাই ত্রুটির কারণ।

    উদাহরণস্বরূপ, ধরা যাক উপরে দেখানো SOAPMessageValidation পলিসিটি রেসপন্স ফ্লোতে কার্যকর হয়। কিন্তু, উপরের <Source> এলিমেন্টের উদাহরণে ব্যবহৃত request ভ্যারিয়েবলটি শুধুমাত্র রিকোয়েস্ট ফ্লোতেই উপলব্ধ থাকে।

    যেহেতু রেসপন্স ফ্লোতে request ভেরিয়েবলটি বিদ্যমান নেই, তাই আপনি নিম্নলিখিত এররটি পাবেন:

    "faultstring": "request message is not available for MessageValidation: SOAP-Message-Validation-1"
    

সমাধান

নিশ্চিত করুন যে, ব্যর্থ SOAPMessageValidation পলিসির <Source> এলিমেন্টে সেট করা ভেরিয়েবলটি, যে ফ্লো-তে পলিসিটি এক্সিকিউট হয়, সেখানে সংজ্ঞায়িত এবং বিদ্যমান আছে।

উপরে দেখানো উদাহরণটি সংশোধন করতে, আপনি <Source > এলিমেন্টটিকে পরিবর্তন করে response ভেরিয়েবলটি ব্যবহার করতে পারেন, যা রেসপন্স ফ্লো-তে বিদ্যমান থাকে:

<MessageValidation async="false" continueOnError="false" enabled="true" name="SOAP-Message-Validation-1">
    <DisplayName>SOAP Message Validation-1</DisplayName>
    <Properties/>
    <Element namespace="http://schemas.xmlsoap.org/soap/prices">GetPriceResponse</Element>
    <SOAPMessage/>
    <Source>response</Source>
    <ResourceURL>xsd://Script-1.xsd</ResourceURL>
</MessageValidation>

ননমেসেজভেরিয়েবল

ত্রুটি কোড

steps.messagevalidation.NonMessageVariable

ত্রুটিপূর্ণ প্রতিক্রিয়া বডি

{
  "fault": {
    "faultstring": "Variable var_name does not resolve to a Message"
    "detail": {
      "errorcode": "steps.messagevalidation.NonMessageVariable"
    }
  }
}

ত্রুটির প্রতিক্রিয়া বডির উদাহরণ

{
  "fault": {
    "faultstring": "Variable message.content does not resolve to a Message",
    "detail": {
      "errorcode": "steps.messagevalidation.NonMessageVariable"
    }
  }
}

কারণ

SOAPMessageValidation পলিসির <Source> এলিমেন্টটি যদি Message টাইপের নয় এমন কোনো ভেরিয়েবলে সেট করা হয়, তাহলে এই ত্রুটিটি ঘটে।

মেসেজ টাইপ ভেরিয়েবলগুলো সম্পূর্ণ HTTP অনুরোধ এবং প্রতিক্রিয়া উপস্থাপন করে। Apigee Edge-এর বিল্ট-ইন ফ্লো ভেরিয়েবল request , response , এবং message হলো Message টাইপের। মেসেজ ভেরিয়েবল সম্পর্কে আরও জানতে, ভেরিয়েবল রেফারেন্স দেখুন।

রোগ নির্ণয়

  1. ফল্ট স্ট্রিং থেকে সেই ভেরিয়েবলের নামটি শনাক্ত করুন যা মেসেজ টাইপে রিজলভ হয় না। উদাহরণস্বরূপ, নিম্নলিখিত ফল্ট স্ট্রিং-এ ভেরিয়েবলের নাম হলো message.content :

    "faultstring": "Variable message.content does not resolve to a Message"
    
  2. যে নির্দিষ্ট এপিআই প্রক্সিতে ব্যর্থতা ঘটেছে, সেখানকার সমস্ত SOAPMessageValidation পলিসি পরীক্ষা করুন। সেখানে এক বা একাধিক SOAPMessageValidation পলিসি থাকতে পারে। সেই নির্দিষ্ট SOAPMessageValidation পলিসি বা পলিসিগুলো শনাক্ত করুন, যেখানে <Source> এলিমেন্টে উল্লেখিত ভেরিয়েবলটি ফল্ট স্ট্রিং-এ (উপরের ধাপ ১) শনাক্ত করা ভেরিয়েবলের নামের সাথে মেলে।

    উদাহরণস্বরূপ, নিম্নলিখিত পলিসিটি <Source> এলিমেন্টটিকে message.content নামের একটি ভেরিয়েবলে সেট করে, যা ফল্ট স্ট্রিং-এ যা আছে তার সাথে মেলে:

    <MessageValidation async="false" continueOnError="false" enabled="true" name="SOAP-Message-Validation-1">
        <DisplayName>SOAP Message Validation-1</DisplayName>
        <Properties/>
        <Element namespace="http://schemas.xmlsoap.org/soap/prices">GetPriceResponse</Element>
        <SOAPMessage/>
        <Source>message.content</Source>
        <ResourceURL>xsd://Script-1.xsd</ResourceURL>
    </MessageValidation>
    

    যেহেতু message.content ভেরিয়েবলটি `Message` টাইপের নয়, তাই আপনি এই ত্রুটিটি পাচ্ছেন:

    "faultstring": "Variable message.content does not resolve to a Message"
    

সমাধান

নিশ্চিত করুন যে ব্যর্থ SOAPMessageValidation পলিসির <Source> এলিমেন্টটি এমন একটি Message টাইপ ভেরিয়েবলে সেট করা আছে, যা পলিসিটি যে ফ্লোতে এক্সিকিউট হয় সেখানে বিদ্যমান।

পলিসিটি সংশোধন করতে, আপনি <Source> এলিমেন্টটি পরিবর্তন করে Message টাইপের একটি ভ্যারিয়েবল নির্দিষ্ট করতে পারেন। উদাহরণস্বরূপ, ব্যর্থ SOAPMessageValidation পলিসিতে, আপনি <Source> এলিমেন্টটিকে request হিসেবে নির্দিষ্ট করতে পারতেন।

<MessageValidation async="false" continueOnError="false" enabled="true" name="SOAP-Message-Validation-1">
    <DisplayName>SOAP Message Validation-1</DisplayName>
    <Properties/>
    <Element namespace="http://sample.com"> sampleObject</Element>
    <SOAPMessage/>
    <Source>request</Source>
    <ResourceURL>xsd://Script-1.xsd</ResourceURL>
</MessageValidation>

ব্যর্থ

ত্রুটি কোড

steps.messagevalidation.Failed

ত্রুটিপূর্ণ প্রতিক্রিয়া বডি

{
  "fault": {
    "faultstring": "Variable var_name failed with reason: \"reason [Line varline_num
    "detail": {
      "errorcode": "steps.messagevalidation.Failed"
    }
  }
}

ত্রুটির প্রতিক্রিয়া বডির উদাহরণ

{
  "fault": {
    "faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expecting a child element but found none [Line 9]\"",
    "detail": {
      "errorcode": "steps.messagevalidation.Failed"
    }
  }
}

কারণ

SOAPMessageValidation পলিসি যদি XSD স্কিমা বা WSDL ডেফিনিশনের সাথে ইনপুট মেসেজ পেলোডকে যাচাই করতে ব্যর্থ হয়, তাহলে এই ত্রুটিটি ঘটে। পেলোড মেসেজে ত্রুটিপূর্ণ JSON বা XML থাকলেও এটি ঘটবে।

এই ত্রুটিটি ঘটার কয়েকটি সম্ভাব্য কারণ নিচে দেওয়া হলো:

কারণ বর্ণনা
অমিল XML পেলোড ইনপুট XML পেলোডটি SoapMessageValidation পলিসিতে নির্দিষ্ট করা XSD স্কিমা মেনে চলে না।
অমিল SOAP পেলোড ইনপুট SOAP পেলোডটি SoapMessageValidation পলিসিতে নির্দিষ্ট করা WSDL সংজ্ঞা মেনে চলে না।
ত্রুটিপূর্ণ JSON বা XML ইনপুট SOAP পেলোডে সুগঠিত XML বা JSON নেই।

কারণ: অমিল XML পেলোড

SoapMessageValidation পলিসির <ResourceURL> এলিমেন্টে নির্দিষ্ট করা XSD স্কিমা যদি ইনপুট XML পেলোড মেনে না চলে, তাহলে এই ত্রুটিটি ঘটে।

ত্রুটির বার্তার উদাহরণ

{
  "fault": {
    "faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expecting a child element but found none [Line 9]\"",
    "detail": {
      "errorcode": "steps.messagevalidation.Failed"
    }
  }
}

রোগ নির্ণয়

  1. SOAPMessageValidation পলিসির নাম, ব্যর্থতার কারণ এবং যে লাইন নম্বরে XML পেলোডটি XSD স্কিমার সাথে মেলে না, তা শনাক্ত করুন। এই সমস্ত তথ্য ফল্ট স্ট্রিং-এ থাকে। উদাহরণস্বরূপ, নিম্নলিখিত ফল্ট স্ট্রিং-এ, SOAPMessageValidation পলিসির নাম হলো SOAP-Message-Validation-1, ব্যর্থতার কারণ হলো Expecting a child element but found none [Line 9] : এবং লাইন নম্বরটি হলো 9

    "faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expecting a child element but found none [Line 9]\""
    
  2. SOAPMessageValidation পলিসিটি পরীক্ষা করুন এবং নিশ্চিত করুন যে এটি মেসেজ ভ্যালিডেট করার জন্য একটি XSD স্কিমা ডেফিনিশন ফাইল ব্যবহার করে। উদাহরণস্বরূপ, নিম্নলিখিত SOAPMessageValidation পলিসিটির <ResourceURL> এলিমেন্টে একটি XSD রিসোর্স ফাইল রয়েছে:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <MessageValidation async="false" continueOnError="false" enabled="true" name="SOAP-Message-Validation-1">
        <DisplayName>SOAP Message Validation-1</DisplayName>
        <Properties/>
        <SOAPMessage/>
        <Source>request</Source>
        <ResourceURL>xsd://Script-1.xsd</ResourceURL>
    </MessageValidation>
    
  3. ব্যর্থতার কারণ বোঝার জন্য উপরের ধাপ ১-এ চিহ্নিত লাইন নম্বরের ইনপুট পেলোড পরীক্ষা করুন।

    নমুনা ইনপুট এক্সএমএল পেলোড

    <?xml version="1.0"?>
    <soap:Envelope
    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
    <soap:Body>
        <shipOrder
        xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance">
        <shipTo>
            <name>Karl Kalckstein</name>
        </shipTo>
        <items>
            <item>
                <title>I love APIs</title>
                <quantity>1</quantity>
                <price>2.90</price>
            </item>
        </items>
    </shipOrder>
    </soap:Body>
    </soap:Envelope>
    

    উপরে দেখানো উদাহরণে, ৯ নম্বর লাইনে </shipTo> শেষ ট্যাগটি রয়েছে।

  4. <shipTo> এলিমেন্টটি কেমন হওয়া উচিত তা দেখতে SOAPMessageValidation পলিসিতে ব্যবহৃত XML স্কিমা ডেফিনিশন ফাইল, Script-1.xsd , পরীক্ষা করুন:

    ...
    <xsd:element name="shipTo" type="shipAddress"/>
    ...
    <xsd:complexType name="shipAddress">
    <xsd:sequence>
    <xsd:element name="name" type="xsd:string"/>
    <xsd:element name="street" type="xsd:string"/>
    <xsd:element name="address" type="xsd:string"/>
    <xsd:element name="country" type="xsd:string"/>
    </xsd:sequence>
    </xsd:complexType>
    ...
    

    ভ্যালিডেশনের জন্য ব্যবহৃত নমুনা XSD অনুযায়ী, <shipTo> এলিমেন্টের মধ্যে অবশ্যই <name> , <street> , <address> এবং <country> এই চাইল্ড এলিমেন্টগুলো থাকতে হবে। কিন্তু, ইনপুট XML পেলোডে শুধুমাত্র একটি চাইল্ড এলিমেন্ট, <name> রয়েছে। ফলে, আপনি এই এররটি পাচ্ছেন:

    "faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expecting a child element but found none [Line 9]\""
    

সমাধান

এই ভ্যালিডেশন ত্রুটিটি সমাধান করার দুটি উপায় আছে:

সমাধান #১

যদি আপনি নির্ধারণ করেন যে XSD স্কিমা সংজ্ঞাটি অপ্রয়োজনীয় সীমাবদ্ধতা আরোপ করছে এবং <shipTo> এলিমেন্টের অধীনে শুধুমাত্র <name> চাইল্ড এলিমেন্টটি প্রয়োজন, তাহলে আপনি SOAPMessageValidation পলিসিতে ব্যবহৃত Script-1.xsd পরিবর্তন করতে পারেন। উপরের পেলোড উদাহরণটি ভ্যালিডেট করার জন্য, আপনি XSD ফাইলটি নিম্নরূপভাবে পরিবর্তন করতে পারেন:

...
<xsd:element name="shipTo" type="shipAddress"/>
...
<xsd:complexType name="shipAddress">
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>

সমাধান #২

যদি XSD ডেফিনিশন ফাইলটি সঠিক হয়, তাহলে ইনপুট XML পেলোডটি xsd সাথে মেলানোর জন্য পরিবর্তন করা যেতে পারে। উদাহরণস্বরূপ, আপনি xsd সাথে সামঞ্জস্যপূর্ণ করার জন্য পেলোডটি নিম্নরূপে পরিবর্তন করতে পারেন:

<?xml version="1.0">
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Body>
    <shipOrder xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance">
    <shipTo>
        <name>Karl Kalckstein</name>
        <street>1020 Parkway</street>
        <address>Mountain View, CA 94043</address>
        <country>USA</country>
    </shipTo>
    <items>
        <item>
            <title>I love APIs</title>
            <quantity>1</quantity>
            <price>2.90</price>
        </item>
    </items>
</shipOrder>
</soap:Body>
</soap:Envelope>

কারণ: SOAP পেলোডের অমিল

SoapMessageValidation পলিসির <ResourceURL> এলিমেন্টে নির্দিষ্ট করা WSDL সংজ্ঞা ইনপুট SOAP পেলোডটি মেনে না চললে এই ত্রুটিটি ঘটে।

ত্রুটির বার্তার উদাহরণ

{
  "fault": {
    "faultstring": "SOAP-Message-Validation-1 failed with reason: \"Element name mismatch. Wildcard? [Line 11]\"",
    "detail": {
      "errorcode": "steps.messagevalidation.Failed"
    }
  }
}

রোগ নির্ণয়

  1. SOAPMessageValidation পলিসির নাম, ব্যর্থতার কারণ এবং যে লাইন নম্বরে SOAP পেলোডটি WSDL সংজ্ঞার সাথে মেলে না, তা শনাক্ত করুন। আপনি ফল্ট স্ট্রিং থেকে এই সমস্ত তথ্য খুঁজে পেতে পারেন। উদাহরণস্বরূপ, নিম্নলিখিত ফল্ট স্ট্রিং-এ, SOAPMessageValidation পলিসির নাম হল SOAP-Message-Validation-1 , ব্যর্থতার কারণ হল \"Element name mismatch. Wildcard? [Line 11]\"" এবং লাইন নম্বর হল 11 :

    "faultstring": "SOAP-Message-Validation-1 failed with reason: \"Element name mismatch. Wildcard? [Line 11]\""
    
  2. SOAPMessageValidation পলিসিটি পরীক্ষা করুন এবং নিশ্চিত করুন যে এটি মেসেজ ভ্যালিডেট করার জন্য একটি wsdl স্কিমা ব্যবহার করে। উদাহরণস্বরূপ, নিম্নলিখিত SOAPMessageValidation পলিসিটির <ResourceURL> এলিমেন্টে একটি wsdl রিসোর্স ফাইল রয়েছে:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <MessageValidation async="false" continueOnError="false" enabled="true" name="SOAP-Message-Validation-1">
        <DisplayName>SOAP Message Validation-1</DisplayName>
        <Properties/>
        <SOAPMessage/>
        <Source>request</Source>
     <ResourceURL>wsdl://SOAP-Message-Validation-1.wsdl</ResourceURL>
    </MessageValidation>
    
  3. ব্যর্থতার কারণ বোঝার জন্য ধাপ ১-এ চিহ্নিত লাইন নম্বরের ইনপুট পেলোড পরীক্ষা করুন।

    নমুনা ইনপুট SOAP পেলোড

    <?xml version="1.0"?>
    <soap:Envelope
    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
    soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
    <soap:Body>
    <shipOrder
    xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance">
      <shipTo>
        <name>Karl Kalckstein</name>
        <street>1020 Parkway</street>
        <address>Mountain View, CA 94043</address>
        <country>USA</country>
      </shipTo>
      <items>
        <item>
          <title>I love APIs</title>
          <quantity>1</quantity>
          <price>2.90</price>
        </item>
      </items>
    

    উপরে দেখানো উদাহরণে, ১১ নম্বর লাইনে <shipTo> এলিমেন্টের অধীনে <country> চাইল্ড এলিমেন্টটি রয়েছে।

  4. SOAPMessageValidation পলিসিতে ব্যবহৃত WSDL ডেফিনিশন ফাইল, SOAP-Message-Validation-1.wsdl , পরীক্ষা করে দেখুন <shipTo> এলিমেন্টের অধীনে থাকা <country> চাইল্ড এলিমেন্টটিতে কী ভুল থাকতে পারে:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
        <wsdl:types>
          <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="shipOrder" type="order"/>
    <xsd:complexType name="order">
    <xsd:sequence>
    <xsd:element name="shipTo" type="shipAddress"/>
    <xsd:element name="items" type="cdItems"/>
    </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="shipAddress">
    <xsd:sequence>
    <xsd:element name="name" type="xsd:string"/>
    <xsd:element name="street" type="xsd:string"/>
    <xsd:element name="address" type="xsd:string"/>
    </xsd:sequence>
    ...
    

    ভ্যালিডেশনের জন্য ব্যবহৃত WSDL সংজ্ঞা অনুসারে, <shipTo> এলিমেন্টটির কোনো <country> চাইল্ড এলিমেন্ট নেই। ফলে, আপনি এই এররটি পাচ্ছেন:

    "faultstring": "SOAP-Message-Validation-1 failed with reason: \"Element name mismatch. Wildcard? [Line 11]\""
    

সমাধান

এই ভ্যালিডেশন ত্রুটিটি সমাধান করার দুটি উপায় আছে:

সমাধান #১

যদি আপনি নির্ধারণ করেন যে ব্যবহৃত WSDL সংজ্ঞাটি ভুল, তাহলে আপনি SOAPMessageValidation পলিসিতে ব্যবহৃত SOAP-Message-Validation-1.wsdl ফাইলটি পরিবর্তন করতে পারেন। উপরের পেলোড উদাহরণটি যাচাই করার জন্য, আপনি ফাইলটি নিম্নরূপভাবে পরিবর্তন করতে পারেন:

...
<xsd:complexType name="shipAddress">`
...
<sequence>
    <element name="name" type="xsd:string"/>
    <element name="street" type="xsd:string"/>
    <element name="address" type="xsd:string"/>
    <element name="country" type="xsd:string"/>
</sequence>

সমাধান #২

যদি WSDL সংজ্ঞাটি সঠিক হয়, তাহলে ইনপুট SOAP পেলোডটি WSDL সংজ্ঞার সাথে মেলানোর জন্য পরিবর্তন করা যেতে পারে।

উদাহরণস্বরূপ, আপনি ইনপুট SOAP পেলোডটি নিম্নরূপে পরিবর্তন করতে পারেন:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Body>
<shipOrder xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance">
    <shipTo>
        <name>Karl Kalckstein</name>
        <street>1020 Parkway</street>
        <address>Mountain View, CA 94043</address>
    </shipTo>
    <items>
        <item>
            <title>I love APIs</title>
            <quantity>1</quantity>
            <price>2.90</price>
        </item>
    </items>

কারণ: ত্রুটিপূর্ণ JSON বা XML

SoapMessageValidation পলিসির <ResourceURL> এলিমেন্টে নির্দিষ্ট করা WSDL সংজ্ঞা ইনপুট SOAP পেলোডটি মেনে না চললে এই ত্রুটিটি ঘটে।

ত্রুটির বার্তার উদাহরণ

{
  "fault": {
    "faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expected <\/title> at line 15(possibly  around char 420)\"",
    "detail": {
      "errorcode": "steps.messagevalidation.Failed"
    }
  }
}

রোগ নির্ণয়

  1. SOAPMessageValidation পলিসির নাম, ব্যর্থতার কারণ এবং XML পেলোডের যে লাইন নম্বরটি WSDL সংজ্ঞার সাথে মেলে না, তা শনাক্ত করুন। আপনি এই সমস্ত তথ্য ফল্ট স্ট্রিং-এ খুঁজে পাবেন। উদাহরণস্বরূপ, নিম্নলিখিত ফল্ট স্ট্রিং-এ, SOAPMessageValidation পলিসির নাম হলো SOAP-Message-Validation-1 , ব্যর্থতার কারণ হলো Expected </title> at line 15(possibly around char 420): এবং লাইন নম্বর হলো 15.

    "faultstring": "SOAP-Message-Validation-1 failed with reason: \"Expected </title> at line 15(possibly  around char 420)\""
    
  2. ব্যর্থতার কারণ বোঝার জন্য উপরের ধাপ ১-এ চিহ্নিত লাইন নম্বরের ইনপুট পেলোড পরীক্ষা করুন।

    নমুনা ইনপুট SOAP পেলোড

    <?xml version="1.0"?>
    <soap:Envelope
    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
    soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
    <soap:Body>
    <shipOrder xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance">
      <shipTo>
        <name>Karl Kalckstein</name>
        <street>1020 Parkway</street>
        <address>Mountain View, CA 94043</address>
        <country>USA</country>
      </shipTo>
      <items>
        <item>
          <title>I love APIs</titles>
          <quantity>1</quantity>
          <price>2.90</price>
        </item>
      </items>
    </shipOrder>
    </soap:Body>
    </soap:Envelope>
    

    উপরে দেখানো উদাহরণে, ইনপুট XML-এর ১৫ নম্বর লাইনে <title> এলিমেন্টটি আছে, কিন্তু এর শেষে </title> ট্যাগটি দেওয়া নেই।

সমাধান

ত্রুটিটি সমাধান করতে, নিশ্চিত করুন যে ইনপুট পেলোডটি বৈধ এবং সঠিকভাবে গঠিত।

উদাহরণস্বরূপ, আপনি ইনপুট XML পেলোডটি নিম্নরূপে পরিবর্তন করতে পারেন:

...
</shipTo>
<items>
  <item>
    <title>I love APIs</title>
    <quantity>1</quantity>
    <price>2.90</price>
  </item>
</items>
...