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 नीति के एक्सएमएल में, पुष्टि करें कि <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 टाइप का नहीं है.

मैसेज टाइप वैरिएबल, पूरे एचटीटीपी अनुरोध और रिस्पॉन्स दिखाते हैं. Apigee Edge के बिल्ट-इन फ़्लो वैरिएबल request, response, और 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> एलिमेंट को मैसेज टाइप के वैरिएबल पर सेट किया गया हो. यह वैरिएबल, उस फ़्लो में मौजूद होता है जहां नीति लागू होती है.

नीति को ठीक करने के लिए, <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"
    }
  }
}

वजह

यह गड़बड़ी तब होती है, जब SOAPMessageValidation नीति, XSD स्कीमा या WSDL डेफ़िनिशन के हिसाब से इनपुट मैसेज के पेलोड की पुष्टि नहीं कर पाती. यह तब भी होगा, जब पेलोड मैसेज में गलत तरीके से लिखा गया JSON या एक्सएमएल हो.

इस गड़बड़ी की ये वजहें हो सकती हैं:

वजह ब्यौरा
एक्सएमएल पेलोड से मैच नहीं होता इनपुट एक्सएमएल पेलोड, SoapMessageValidation नीति में बताए गए XSD स्कीमा का पालन नहीं करता.
एसओएपी पेलोड मेल नहीं खा रहा है इनपुट एसओएपी पेलोड, SoapMessageValidation नीति में दी गई WSDL की परिभाषा के मुताबिक नहीं है.
गलत JSON या एक्सएमएल इनपुट SOAP पेलोड में सही फ़ॉर्मैट वाला एक्सएमएल या JSON नहीं है.

वजह: एक्सएमएल पेलोड मेल नहीं खा रहा है

यह गड़बड़ी तब होती है, जब इनपुट एक्सएमएल पेलोड, 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 नीति के नाम, गड़बड़ी की वजह, और उस लाइन नंबर की पहचान करें जिस पर एक्सएमएल पेलोड, 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>
    

    ऊपर दिखाए गए उदाहरण में, लाइन 9 में </shipTo> एंड टैग है.

  4. <shipTo> एलिमेंट कैसा दिखना चाहिए, यह जानने के लिए SOAPMessageValidation नीति में इस्तेमाल की गई एक्सएमएल स्कीमा डेफ़िनिशन फ़ाइल, 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> होने चाहिए. हालांकि, इनपुट एक्सएमएल पेलोड में सिर्फ़ एक चाइल्ड एलिमेंट, <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 से मिलान करने के लिए बदला जा सकता है. उदाहरण के लिए, 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>

वजह: एसओएपी पेलोड मेल नहीं खा रहा

यह गड़बड़ी तब होती है, जब इनपुट एसओएपी पेलोड, 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 नीति में, <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>
    

    ऊपर दिए गए उदाहरण में, लाइन 11 में <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 डेफ़िनिशन सही है, तो 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 परिभाषा से मेल न खाने वाले एक्सएमएल पेलोड की लाइन नंबर की पहचान करें. आपको यह पूरी जानकारी गड़बड़ी वाली स्ट्रिंग में मिलेगी. उदाहरण के लिए, गड़बड़ी की इस स्ट्रिंग में, 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>
    

    ऊपर दिखाए गए उदाहरण में, इनपुट एक्सएमएल की लाइन 15 में <title> एलिमेंट है, लेकिन इसे </title> एंड टैग से बंद नहीं किया गया है.

रिज़ॉल्यूशन

गड़बड़ी को ठीक करने के लिए, पक्का करें कि इनपुट पेलोड मान्य है और उसे सही तरीके से बनाया गया है.

उदाहरण के लिए, इनपुट एक्सएमएल पेलोड में इस तरह बदलाव किया जा सकता है:

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