SOAP মেসেজ যাচাইকরণ নীতি রানটাইম সংক্রান্ত সমস্যার সমাধান করা

আপনি Apigee Edge ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন দেখুন।
তথ্য

SourceMessageNotAvailable

সমস্যার কোড

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> এলিমেন্টে নির্দিষ্ট করা message ভেরিয়েবল যদি:

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

যেমন, 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>

NonMessageVariable

সমস্যার কোড

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 হল মেসেজ ধরনের। মেসেজ ভেরিয়েবল সম্পর্কে আরও জানতে, ভেরিয়েবল রেফারেন্স দেখুন।

ডায়াগনসিস

  1. ফল্ট স্ট্রিং থেকে মেসেজ ধরনের সাথে সমাধান করা যায় না এমন ভেরিয়েবলের নাম শনাক্ত করুন। যেমন, নিম্নলিখিত ফল্ট স্ট্রিংয়ে ভেরিয়েবলের নাম হল message.content:

    "faultstring": "Variable message.content does not resolve to a Message"
    
  2. যেখানে সমস্যা হয়েছে সেই নির্দিষ্ট API Proxy-তে সব 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 মেসেজ টাইপের না হওয়ার কারণে, আপনি এই সমস্যাটি পেয়েছেন:

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

রেজোলিউশন

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

নীতিটি সংশোধন করতে, আপনি <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://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"
    }
  }
}

কারণ

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

এই সমস্যার সম্ভাব্য কারণগুলি এখানে দেওয়া হল:

কারণ বিবরণ
XML পেলোড ম্যাচ না করা ইনপুট XML পেলোড SoapMessageValidation নীতিতে উল্লেখ করা XSD স্কিমা মেনে চলে না।
SOAP পেলোড না মেলা ইনপুট SOAP পেলোড, SoapMessageValidation নীতিতে উল্লেখ করা WSDL সংজ্ঞা মেনে চলে না।
ভুল JSON বা XML ইনপুট SOAP পেলোডে ভালোভাবে ফর্ম্যাট করা XML বা JSON নেই।

কারণ: XML পেলোড ম্যাচ না করা

ইনপুট XML পেলোড SoapMessageValidation নীতির <ResourceURL> এলিমেন্টে উল্লেখ করা XSD স্কিমা মেনে না চললে এই সমস্যা হয়।

সমস্যার মেসেজের উদাহরণ

{
  "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 পেলোডের নমুনা

    <?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. SOAPMessageValidation নীতিতে ব্যবহৃত XML স্কিমা সংজ্ঞা ফাইল, Script-1.xsd, পরীক্ষা করে দেখুন যে <shipTo> এলিমেন্টটি কেমন হওয়া উচিত:

    ...
    <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 পেলোড ম্যাচ না করা

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

সমস্যার মেসেজের উদাহরণ

{
  "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 নীতিতে wsdl এলিমেন্টে<ResourceURL> রিসোর্স ফাইল আছে:

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

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

সমস্যার মেসেজের উদাহরণ

{
  "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 নীতির নাম, ব্যর্থতার কারণ এবং WSDL ডেফিনিশনের সাথে ম্যাচ না করা XML পেলোডের লাইন নম্বর শনাক্ত করুন। আপনি এই সমস্ত তথ্য ফল্ট স্ট্রিংয়ে দেখতে পাবেন। যেমন, নিচে দেওয়া ফল্ট স্ট্রিংয়ে 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>
...