वैरिएबल रनटाइम की गड़बड़ी की समस्या हल करना

Apigee Edge दस्तावेज़ देखा जा रहा है.
Apigee X दस्तावेज़ पर जाएं.
जानकारी

SourceMessageNotAvailable

गड़बड़ी का कोड

steps.extractvariables.SourceMessageNotAvailable

गड़बड़ी के जवाब का मुख्य हिस्सा

{
  "fault": {
      "faultstring": "[variable_name] message is not available for ExtractVariable: [policy_name]",
      "detail": {
          "errorcode": "steps.extractvariables.SourceMessageNotAvailable"
      }
  }
}

वजह

यह गड़बड़ी तब होती है, जब वैरिएबल एक्सट्रैक्ट करने की नीति के <Source> एलिमेंट में तय किया गया मैसेज वैरिएबल इनमें से कोई एक हो:

  • दायरे से बाहर है (यह उस फ़्लो में उपलब्ध नहीं होता जहां नीति का इस्तेमाल किया जा रहा है) या
  • रिज़ॉल्व नहीं किया जा सकता (तय नहीं किया गया है)

उदाहरण के लिए, यह गड़बड़ी तब होती है, जब एक्सट्रैक्ट वैरिएबल नीति, अनुरोध के दौरान लागू होती है, लेकिन <Source> एलिमेंट, response या error वैरिएबल पर सेट है, जो अनुरोध के फ़्लो में मौजूद नहीं है.

संक्रमण की जांच

  1. एक्सट्रैक्ट वैरिएबल नीति की उस जगह की पहचान करें जहां गड़बड़ी हुई थी. साथ ही, उस वैरिएबल के नाम की पहचान करें जो उपलब्ध नहीं है. आपको ये दोनों आइटम, गड़बड़ी के जवाब के faultstring एलिमेंट में मिल सकते हैं. उदाहरण के लिए, इस गड़बड़ी में नीति का नाम ExtractVariables-1 है और वैरिएबल response है:

    "faultstring": "response message is not available for ExtractVariable: ExtractVariables-1"

  2. एक्सट्रैक्ट वैरिएबल नीति के एक्सएमएल में, पुष्टि करें कि एलिमेंट में सेट वैरिएबल का नाम, गड़बड़ी वाली स्ट्रिंग में पहचाने गए वैरिएबल के नाम से मेल खाता है (ऊपर दिया गया चरण #1). उदाहरण के लिए, नीचे दी गई एक्सट्रैक्ट वैरिएबल नीति, एलिमेंट में response नाम वाले एक वैरिएबल के बारे में बताती है. यह वैरिएबल गड़बड़ी वाली स्ट्रिंग से मेल खाता है:

    <ExtractVariables name="ExtractVariables-1">
        <Source>response</Source>
        <URIPath>
            <Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
        </URIPath>
        <VariablePrefix>urirequest</VariablePrefix>
    </ExtractVariables>
    
  3. यह तय करें कि <Source> एलिमेंट में इस्तेमाल किया गया वैरिएबल तय किया गया है या नहीं. साथ ही, उस फ़्लो में भी उपलब्ध है जिसमें एक्सट्रैक्ट वैरिएबल नीति लागू की जा रही है.

  4. अगर वैरिएबल इनमें से कोई एक है:

    • दायरे से बाहर है (यह उस फ़्लो में उपलब्ध नहीं होता जहां नीति का इस्तेमाल किया जा रहा है) या
    • रिज़ॉल्व नहीं किया जा सकता (तय नहीं किया गया है)

    तो यही गड़बड़ी की वजह है.

    उदाहरण के लिए, मान लें कि ऊपर दिखाई गई 'वैरिएबल एक्सट्रैक्ट करें' नीति अनुरोध फ़्लो में लागू होती है. याद रखें कि response वैरिएबल का इस्तेमाल, एक्सट्रैक्ट वैरिएबल नीति के <Source> एलिमेंट में किया गया है. response वैरिएबल, सिर्फ़ रिस्पॉन्स फ़्लो में उपलब्ध होता है.

    response वैरिएबल, अनुरोध के फ़्लो में मौजूद नहीं है. इसलिए, आपको यह गड़बड़ी कोड मिला है: steps.extractvariables.SourceMessageNotAvailable.

रिज़ॉल्यूशन

पक्का करें कि फ़ेल एक्सट्रैक्ट वैरिएबल नीति के <Source> एलिमेंट में सेट वैरिएबल तय किया गया है और उस फ़्लो में मौजूद है जहां नीति लागू होती है.

वैरिएबल एक्सट्रैक्ट करने के लिए ऊपर दिखाई गई नीति के उदाहरण को ठीक करने के लिए, आप <Source> एलिमेंट में बदलाव करके request वैरिएबल का इस्तेमाल कर सकते हैं, जैसा कि वह अनुरोध फ़्लो में मौजूद है:

<ExtractVariables name="ExtractVariables-1">
    <Source>request</Source>
    <URIPath>
        <Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
    </URIPath>
    <VariablePrefix>urirequest</VariablePrefix>
</ExtractVariables>

SetVariableFailed

गड़बड़ी का कोड

steps.extractvariables.SetVariableFailed

गड़बड़ी के जवाब का मुख्य हिस्सा

{
    "fault": {
        "faultstring": "Failed to set variable [variable_name] value [variable_value] from ExtractVariables: [policy_name]",
        "detail": {
            "errorcode": "steps.extractvariables.SetVariableFailed"
        }
    }
}

वजह

यह गड़बड़ी तब होती है, जब वैरिएबल एक्सट्रैक्ट करने की नीति, वैल्यू को किसी वैरिएबल पर सेट नहीं कर पाती. आम तौर पर ऐसा तब होता है, जब ऐसे कई वैरिएबल को वैल्यू असाइन करने की कोशिश की जाती है जिनके नाम, नेस्ट किए गए डॉट से अलग किए गए फ़ॉर्मैट में उसी शब्दों से शुरू होते हैं.

उदाहरण के लिए, मान लें कि आपने var.color वैरिएबल के लिए कोई वैल्यू बनाई/असाइन की है. इस मामले में, color को एक ऑब्जेक्ट नोड के तौर पर बांटा जाता है. इसके बाद, अगर आपने किसी दूसरे वैरिएबल var.color.next को कोई वैल्यू असाइन करने की कोशिश की, तो यह काम नहीं करेगा, क्योंकि color पहले से असाइन किया गया है. साथ ही, इसमें कोई दूसरा वैरिएबल असाइन करने की अनुमति नहीं है.

संक्रमण की जांच

  1. वैरिएबल एक्सट्रैक्ट करने की उस नीति की पहचान करें जहां गड़बड़ी हुई थी. साथ ही, उस वैरिएबल के नाम की पहचान करें जिसके लिए वैल्यू सेट नहीं की जा सकी. आपको ये दोनों आइटम, गड़बड़ी के जवाब के faultstring एलिमेंट में मिल सकते हैं. उदाहरण के लिए, नीचे दी गई गड़बड़ी वाली स्ट्रिंग में नीति का नाम ExtractColors है और वैरिएबल var.color.next है:

    "faultstring": "Failed to set variable var.color.next value red from ExtractVariables: ExtractColors"

  2. 'वैरिएबल एक्सट्रैक्ट करना' नीति के एक्सएमएल में, पुष्टि करें कि वैरिएबल का नाम, गड़बड़ी वाली स्ट्रिंग में पहचाने गए वैरिएबल नाम (ऊपर दिया गया चरण #1) से मेल खाता है. उदाहरण के लिए, यह नीति अनुरोध क्वेरी पैरामीटर से var.color.next नाम वाले वैरिएबल (वह वैल्यू जो गड़बड़ी वाली स्ट्रिंग में दिखती है) को एक वैल्यू असाइन करने की कोशिश करती है:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables name="ExtractColors">
        <DisplayName>ExtractColors</DisplayName>
        <Source>request</Source>
        <QueryParam name="color">
            <Pattern ignoreCase="true">{color}</Pattern>
        </QueryParam>
        <QueryParam name="nextcolor">
            <Pattern ignoreCase="true">{color.next}</Pattern>
        </QueryParam>
        <VariablePrefix>var</VariablePrefix>
    </ExtractVariables>
    
  3. फ़ेल एक्सट्रैक्ट वैरिएबल नीति में इस्तेमाल किए गए सभी वैरिएबल के नामों की जांच करें. अगर आपने किसी ऐसे वैरिएबल को कोई वैल्यू असाइन की है जिसका नाम और गड़बड़ी वाली स्ट्रिंग में बताए गए वैरिएबल के नाम से शुरू होता है (ऊपर दिया गया चरण #1), तो यही गड़बड़ी की वजह है.

    वैरिएबल एक्सट्रैक्ट करने के लिए ऊपर दिखाई गई नीति के उदाहरण में देखें कि:

    • color नाम के क्वेरी पैरामीटर की वैल्यू पहले, var.color वैरिएबल को असाइन की गई है(ध्यान दें: var, <VariablePrefix> एलिमेंट में सेट किए गए सभी वैरिएबल के लिए प्रीफ़िक्स है)
    • अगले असाइनमेंट में, nextcolor क्वेरी पैरामीटर की वैल्यू किसी दूसरे वैरिएबल var.color.next को असाइन की गई है.
    • var.color का बंटवारा पहले से किया जा चुका है, इसलिए 'वैरिएबल निकालें' नीति के तहत, नेस्ट किए गए किसी अन्य वैरिएबल var.color.next को असाइन नहीं किया जा सकता. इसलिए आपको गड़बड़ी कोड मिला है: steps.extractvariables.SetVariableFailed

रिज़ॉल्यूशन

  1. पक्का करें कि आपके पास ऐसे कई वैरिएबल नाम नहीं हैं जिनके नाम उन शब्दों से शुरू होते हैं जो डॉट से अलग किए गए फ़ॉर्मैट में नेस्ट किए गए होते हैं.

    ऊपर दिखाई गई एक्सट्रैक्ट वैरिएबल नीति को ठीक करने के लिए, आप वैरिएबल नाम var.color.next में बदलाव करके वैरिएबल नाम var.nextcolor. इस्तेमाल कर सकते हैं

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables name="ExtractColors">
        <DisplayName>ExtractColors</DisplayName>
        <Source>request</Source>
        <QueryParam name="color">
            <Pattern ignoreCase="true">{color}</Pattern>
        </QueryParam>
        <QueryParam name="nextcolor">
            <Pattern ignoreCase="true">{nextcolor}</Pattern>
        </QueryParam>
        <VariablePrefix>var</VariablePrefix>
    </ExtractVariables>
    
    

ज़्यादा जानकारी

ज़्यादा जानकारी के लिए, यह कम्यूनिटी पोस्ट देखें.

InvalidJSONPath

गड़बड़ी का कोड

steps.extractvariables.InvalidJSONPath

गड़बड़ी के जवाब का मुख्य हिस्सा

{
    "fault": {
        "faultstring": "Invalid JSON path [path_name] in policy [policy_name].",
        "detail": {
            "errorcode": "steps.extractvariables.InvalidJSONPath"
        }
    }
}

वजह

यह गड़बड़ी तब होती है, जब एक्सट्रैक्ट वैरिएबल नीति के <JSONPath> एलिमेंट में अमान्य JSON पाथ का इस्तेमाल किया जाता है. उदाहरण के लिए, अगर JSON पेलोड में Name ऑब्जेक्ट नहीं है, लेकिन एक्सट्रैक्ट वैरिएबल नीति में Name को पाथ के तौर पर इस्तेमाल किया जाता है, तो यह गड़बड़ी दिखती है.

संक्रमण की जांच

  1. एक्सट्रैक्ट वैरिएबल नीति की उस जगह की पहचान करें जहां गड़बड़ी हुई थी. साथ ही, उस अमान्य JSON पाथ की भी पहचान करें. आपको ये दोनों आइटम, गड़बड़ी के रिस्पॉन्स के faultstring एलिमेंट में मिल सकते हैं. उदाहरण के लिए, इस गड़बड़ी वाली स्ट्रिंग में नीति का नाम ExtractJSONVariables है और JSON पाथ का अमान्य पाथ $.Name है:

    "faultstring": "Invalid JSON path $.Name in policy ExtractJSONVariables."

  2. 'वैरिएबल एक्सट्रैक्ट करना' नीति के एक्सएमएल में, पुष्टि करें कि <JSONPath> एलिमेंट में सेट किया गया JSON पाथ, गड़बड़ी वाली स्ट्रिंग में पहचाने गए पाथ से मेल खाता है (ऊपर दिया गया चरण #1). उदाहरण के लिए, नीचे दी गई एक्सट्रैक्ट वैरिएबल नीति से JSON पाथ $.Name के बारे में पता चलता है, जो गड़बड़ी वाली स्ट्रिंग से मेल खाता है:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables name="ExtractJSONVariables">
        <Source>response</Source>
        <JSONPayload>
            <Variable name="name" type="string">
                <JSONPath>$.Name</JSONPath>
            </Variable>
        </JSONPayload>
       <VariablePrefix>employee</VariablePrefix>
    </ExtractVariables>
    
  3. <Source> एलिमेंट की जांच करें और तय करें कि किस JSON पेलोड से वैरिएबल एक्सट्रैक्ट करने की कोशिश की जा रही है. उदाहरण के लिए, अगर <Source> एलिमेंट को request पर सेट किया गया है, तो इसका मतलब है कि नीति, अनुरोध ऑब्जेक्ट से JSON पेलोड को एक्सट्रैक्ट कर रही है. अगर इसे response पर सेट किया जाता है, तो यह रिस्पॉन्स ऑब्जेक्ट होगा.

    ऊपर दिखाई गई 'वैरिएबल एक्सट्रैक्ट करें' नीति में, <Source> एलिमेंट response पर सेट है, इसलिए वैरिएबल को रिस्पॉन्स के JSON पेलोड से निकाला जा रहा है.

    <Source>response</Source>

  4. सही JSON पेलोड की जांच करें (यह चरण #3 से तय किया गया है) और पुष्टि करें कि क्या इसमें <JSONPath> एलिमेंट में बताया गया ऑब्जेक्ट मौजूद है. अगर JSON पेलोड में वह ऑब्जेक्ट नहीं है, तो यही गड़बड़ी है.

    उदाहरण के तौर पर, मान लें कि आपने नीचे दिए गए JSON रिस्पॉन्स पेलोड से वैरिएबल एक्सट्रैक्ट करने की कोशिश की है:

    {
      "firstName":"John",
      "lastName":"Doe",
      "city":"San Jose",
      "state":"CA"
    }
    

    JSON रिस्पॉन्स पेलोड में Name ऑब्जेक्ट नहीं है, इसलिए 'वैरिएबल एक्सट्रैक्ट करें' नीति उस गड़बड़ी की वजह से फ़ेल हो जाती है, जो आपको गड़बड़ी कोड: steps.extractvariables.InvalidJSONPath मिला है.

रिज़ॉल्यूशन

  1. यह पक्का करें कि सिर्फ़ वे ऑब्जेक्ट जो JSON पेलोड का हिस्सा हैं, जिनसे वैरिएबल निकाले जा रहे हैं, वे एक्सट्रैक्ट वैरिएबल नीति के <JSONPath> एलिमेंट में बताए गए हैं.

    वैरिएबल एक्सट्रैक्ट करने के लिए ऊपर दिखाई गई नीति के उदाहरण को ठीक करने के लिए, <JSONPath> एलिमेंट में बदलाव किया जा सकता है, ताकि JSON रिस्पॉन्स पेलोड के सैंपल में उपलब्ध किसी ऑब्जेक्ट के बारे में बताया जा सके. उदाहरण के लिए, firstName और lastName ऑब्जेक्ट मान्य हैं:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables name="ExtractJSONVariables">
        <Source>response</Source>
        <JSONPayload>
            <Variable name="name" type="string">
                <JSONPath>$.firstName</JSONPath>
            </Variable>
        </JSONPayload>
       <VariablePrefix>employee</VariablePrefix>
    </ExtractVariables>
    
    

ExecutionFailed

गड़बड़ी का कोड

steps.extractvariables.ExecutionFailed

गड़बड़ी के जवाब का मुख्य हिस्सा

{
    "fault": {
        "faultstring": "Failed to execute the ExtractVariables: [policy_name]",
        "detail": {
            "errorcode": "steps.extractvariables.ExecutionFailed"
        }
    }
}

संभावित कारण

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

Cause जानकारी
इनपुट पेलोड मौजूद नहीं है इनपुट पेलोड (JSON, XML) खाली है.
अमान्य या गलत इनपुट नीति को भेजा गया इनपुट (JSON, एक्सएमएल वगैरह) अमान्य या गलत है.

वजह: इनपुट पेलोड मौजूद नहीं है

अगर एक्सट्रैक्ट वैरिएबल नीति से JSON या एक्सएमएल पेलोड से वैरिएबल एक्सट्रैक्ट किए जाने हैं, लेकिन <Source> एलिमेंट में बताए गए वैरिएबल का कॉन्टेंट (पेलोड) खाली है, तो यह गड़बड़ी होती है.

उदाहरण के लिए, अगर एक्सट्रैक्ट वैरिएबल नीति में <Source> एलिमेंट को request या response के तौर पर सेट किया गया है और उनमें JSON या एक्सएमएल पेलोड शामिल होना चाहिए, लेकिन पेलोड खाली है, तो गड़बड़ी दिखती है.

संक्रमण की जांच

  1. वैरिएबल एक्सट्रैक्ट करने की उस नीति की पहचान करें जहां गड़बड़ी हुई थी. आपको यह जानकारी गड़बड़ी के रिस्पॉन्स में गड़बड़ी वाले एलिमेंट में मिल सकती है. उदाहरण के लिए, नीचे दी गई गड़बड़ी वाली स्ट्रिंग में नीति का नाम ExtractJSONVariables है:

    "faultstring": "Failed to execute the ExtractVariables: ExtractXMLVariables"

  2. काम न करने वाले एक्सट्रैक्ट वैरिएबल एक्सएमएल में <Source> एलिमेंट की जांच करें और इनपुट का वह टाइप तय करें जिससे वैरिएबल निकाले जा रहे हैं. उदाहरण के लिए, यहां दी गई एक्सट्रैक्ट वैरिएबल नीति में response पर सेट किया गया <Source> एलिमेंट है और यह एक्सएमएल पेलोड से वैरिएबल निकाल रहा है:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <ExtractVariables name="ExtractXMLVariables" async="false" continueOnError="false" enabled="true">
        <XMLPayload>
            <Namespaces/>
            <Variable name="City" type="string">
                <XPath>/city</XPath>
            </Variable>
        </XMLPayload>
        <Source clearPayload="false">response</Source>
    </ExtractVariables>
    
    
  3. देखें कि वैरिएबल एक्सट्रैक्ट करने की नीति से, पार्स किया जा रहा इनपुट खाली है या नहीं. अगर इनपुट खाली है, तो यही गड़बड़ी की वजह है.

    ऊपर दी गई एक्सट्रैक्ट वैरिएबल नीति के उदाहरण में, बैकएंड सर्वर से भेजा गया रिस्पॉन्स पेलोड (यानी रिस्पॉन्स बॉडी) खाली था.

    एक्सएमएल रिस्पॉन्स पेलोड खाली है, इसलिए आपको गड़बड़ी का कोड मिला है:

    steps.extractvariables.ExecutionFailed

    यह गड़बड़ी तब भी आ सकती है, जब <Source> एलिमेंट को request पर सेट किया गया हो, लेकिन एपीआई प्रॉक्सी अनुरोध में कोई पेलोड नहीं भेजा गया हो. उदाहरण के लिए:

    curl -v "http://<org>-<env>.apigee.net/v1/testevexecutionfailed" -H "Content-Type: application/xml"
    

    वैरिएबल एक्सट्रैक्ट करने की नीति सिर्फ़ तब एक्सएमएल एक्सट्रैक्ट करती है, जब मैसेज का Content-Type हेडर application/xml, text/xml या application/*+xml हो. अगर आपको एक्सट्रैक्ट वैरिएबल नीति से एक्सएमएल अनुरोध पेलोड को पार्स करना है, तो आपको कॉन्टेंट-टाइप हेडर को application/xml, text/xml या application/*+xml के तौर पर पास करना होगा.

रिज़ॉल्यूशन

पक्का करें कि एक्सट्रैक्ट वैरिएबल नीति को भेजा गया इनपुट मान्य है और खाली नहीं है.

ऊपर दिखाई गई 'वैरिएबल निकालें' नीति के उदाहरण से जुड़ी समस्या को ठीक करने के लिए, एक मान्य एक्सएमएल पेलोड पास करें. उदाहरण के लिए:

  1. यहां दिए गए कॉन्टेंट के साथ city.xml नाम की फ़ाइल बनाएं:

    <city>Bengaluru</city>
    <area>Sanjaynagar</area>
    
  2. cURL निर्देश का इस्तेमाल करके, एपीआई कॉल करें:

    curl -v "http://<org>-<env>.apigee.net/v1/testevexecutionfailed" -H "Content-Type: application/xml" -X POST -d @city.xml
    
    

वजह: अमान्य या गलत इनपुट

अगर एक्सट्रैक्ट वैरिएबल की नीति, अमान्य या गलत इनपुट को पार्स करती है, तो आपको यह गड़बड़ी मिलेगी.

उदाहरण के लिए, अगर एक्सट्रैक्ट वैरिएबल नीति के लिए, इनपुट के तौर पर यह अमान्य JSON दिया गया है, तो आपको यह गड़बड़ी दिखेगी.

[
    "args": ["name" : "amar" ]
]

संक्रमण की जांच

  1. वैरिएबल एक्सट्रैक्ट करने की उस नीति की पहचान करें जहां गड़बड़ी हुई थी. यह जानकारी, गड़बड़ी के रिस्पॉन्स के faultstring एलिमेंट में देखी जा सकती है. उदाहरण के लिए, नीचे दिए गए faultstring में, नीति का नाम ExtractJSONVariables है:

    "faultstring": "Failed to execute the ExtractVariables: ExtractJSONVariables"

  2. काम न करने वाले एक्सट्रैक्ट वैरिएबल एक्सएमएल में <Source> एलिमेंट की जांच करें और इनपुट का वह टाइप तय करें जिससे वैरिएबल निकाले जा रहे हैं. उदाहरण के लिए, यहां दी गई एक्सट्रैक्ट वैरिएबल नीति में <Source> एलिमेंट request पर सेट है और यह JSON पेलोड से वैरिएबल एक्सट्रैक्ट कर रहा है:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <ExtractVariables name="ExtractJSONVariables" async="false" continueOnError="false" enabled="true">
        <JSONPayload>
            <Variable name="Name" type="string">
                <JSONPath>$.args.name</JSONPath>
            </Variable>
        </JSONPayload>
        <Source clearPayload="false">request</Source>
    </ExtractVariables>
    
    
  3. देखें कि वैरिएबल एक्सट्रैक्ट करने की नीति से, पार्स किया जा रहा इनपुट मान्य है या नहीं. अगर इनपुट अमान्य या गलत है, तो इस गड़बड़ी की वजह से ऐसा हो सकता है.

    ऊपर दिखाई गई 'वैरिएबल एक्सट्रैक्ट करें' नीति के उदाहरण में, 'वैरिएबल निकालना नीति' में नीचे दिया गया अमान्य JSON पास किया गया था

    [
        "args": ["name" : "amar" ]
    ]
    

    यहां एपीआई कॉल का सैंपल दिया गया है, जिससे पता चलता है कि अनुरोध कैसे पास किया गया था:

    curl -v "http://<org>-<env>.apigee.net/v1/testevexecutionfailed" -H "Content-Type: application/json" -X POST -d '[ "args" : ["name" : "amar" ]]'
    

    एपीआई को भेजा गया JSON पेलोड अमान्य है, क्योंकि इसमें स्क्वेयर ब्रैकेट ([ ]) वाली ऐरे मौजूद है. इसलिए, आपको गड़बड़ी का कोड मिलता है:

    steps.extractvariables.ExecutionFailed
    

    यह गड़बड़ी तब भी आ सकती है, जब <Source> एलिमेंट को response पर सेट किया गया हो, लेकिन JSON रिस्पॉन्स पेलोड अमान्य या गलत हो.

रिज़ॉल्यूशन

पक्का करें कि 'वैरिएबल निकालना' नीति को पास किया गया इनपुट मान्य है और गलत नहीं है.

वैरिएबल एक्सट्रैक्ट करने की ऊपर बताई गई नीति से जुड़ी समस्या को ठीक करने के लिए, नीचे बताए गए तरीके से एक मान्य JSON पेलोड अनुरोध पास करें:

{
   "args":{
      "name":"amar"
   }
}

UnableToCast

गड़बड़ी का कोड

steps.extractvariables.UnableToCast

गड़बड़ी के जवाब का मुख्य हिस्सा

{
    "fault": {
        "faultstring": "Unable to cast value [value] as [type].",
        "detail": {
            "errorcode": "steps.extractvariables.UnableToCast"
        }
    }
}

वजह

यह गड़बड़ी तब होती है, जब एक्सट्रैक्ट वैरिएबल नीति, एक्सट्रैक्ट की गई वैल्यू को किसी वैरिएबल पर कास्ट नहीं कर पाती. आम तौर पर ऐसा तब होता है, जब किसी डेटा टाइप की वैल्यू को दूसरे डेटा टाइप के वैरिएबल पर सेट करने की कोशिश की जाती है.

उदाहरण के लिए, अगर एक्सट्रैक्ट वैरिएबल नीति से किसी ऐसी वैल्यू को सेट करने की कोशिश की जाती है जिसे स्ट्रिंग वैरिएबल से इंटीजर वैरिएबल में एक्सट्रैक्ट किया गया है, तो आपको यह गड़बड़ी दिखेगी.

संक्रमण की जांच

  1. उस वैरिएबल के डेटा प्रकार की पहचान करें जिस पर एक्स्ट्रैक्ट वैरिएबल नीति कास्ट करने की कोशिश कर रही है और फ़ेल हो गई है. यह जानकारी, गड़बड़ी के रिस्पॉन्स के faultstring एलिमेंट में देखी जा सकती है. उदाहरण के लिए, यहां दिए गए faultstring में, ऑब्जेक्ट टाइप BOOLEAN है:

    "faultstring":"Unable to cast value 36.231 as BOOLEAN."

  2. उस 'वैरिएबल एक्सट्रैक्ट करें' नीति की पहचान करें जिसमें आप मान को चरण #1 में तय किए गए टाइप के वैरिएबल पर सेट करने की कोशिश कर रहे हैं.

    उदाहरण के लिए, नीचे दी गई एक्सट्रैक्ट वैरिएबल नीति, JSONPath $.latitude से मिले वैल्यू को boolean टाइप के वैरिएबल में एक्सट्रैक्ट करती है, जो गड़बड़ी वाली स्ट्रिंग से मेल खाती है:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <ExtractVariables name="EV-XML-Name" async="false" continueOnError="false" enabled="true">
        <JSONPayload>
          <Variable name="latitude" type="boolean">
              <JSONPath>$.latitude</JSONPath>
          </Variable>
        </JSONPayload>
        <Source clearPayload="false">response</Source>
    </ExtractVariables>
    
    
  3. निकाली जा रही वैल्यू के डेटा टाइप की जांच करें. यह डेटा, हेडर, यूआरआई, पाथ, JSON/एक्सएमएल पेलोड, फ़ॉर्म पैरामीटर, और क्वेरी पैरामीटर के रूप में हो सकता है.

  4. पुष्टि करें कि क्या चरण #3 में बताया गया डेटा टाइप और वैरिएबल का डेटा टाइप, असाइन किया जा रहा डेटा (चरण #2 में तय किया गया) एक जैसा है या नहीं.

  5. अगर सोर्स और डेस्टिनेशन वैरिएबल का डेटा टाइप एक जैसा नहीं है, तो इस गड़बड़ी की वजह यही है.

    वैरिएबल एक्सट्रैक्ट करने के लिए ऊपर दिखाई गई नीति के उदाहरण में, देखें कि JSON अनुरोध पेलोड इस तरह है:

    {
     "latitude":36.2312
    }
    

    <JSONPath>, ‘$.latitude’ से निकाली जा रही वैल्यू का डेटा टाइप, एक पूर्णांक है. इसे डेटा टाइप बूलियन के वैरिएबल को असाइन किया जाता है.

    एक्सट्रैक्ट की गई वैल्यू का डेटा टाइप और उस वैरिएबल का डेटा टाइप, जिसे वैल्यू असाइन की जा रही है, एक जैसे नहीं हैं. इसलिए, आपको गड़बड़ी कोड यह होगा: steps.extractvariables.UnableToCast.

रिज़ॉल्यूशन

पक्का करें कि एक्सट्रैक्ट की गई वैल्यू का डेटा टाइप और जिस वैरिएबल को कॉन्टेंट असाइन किया जा रहा है वह एक ही तरह के हों.

एक्सट्रैक्ट वैरिएबल नीति के उदाहरण को ठीक करने के लिए, आपको वैरिएबल के टाइप को इंटिजर में बदलना होगा:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables name="EV-XML-Name" async="false" continueOnError="false" enabled="true">
    <JSONPayload>
        <Variable name="latitude" type="integer">
            <JSONPath>$.latitude</JSONPath>
        </Variable>
    </JSONPayload>
    <Source clearPayload="false">response</Source>
</ExtractVariables>

JsonPathParsingFailure

गड़बड़ी का कोड

steps.extractvariables.JsonPathParsingFailure

गड़बड़ी के जवाब का मुख्य हिस्सा

{
    "fault": {
        "faultstring": "ExtractVariables [policy_name]: Json path parsing failed for flow variables [variable_name]",
        "detail": {
            "errorcode": "steps.extractvariables.JsonPathParsingFailure"
        }
    }
}

वजह

यह गड़बड़ी तब होती है, जब एक्सट्रैक्ट वैरिएबल नीति, JSON पाथ को पार्स नहीं कर पाती और <Source> एलिमेंट में दिए गए फ़्लो वैरिएबल से डेटा नहीं निकाल पाती. आम तौर पर, ऐसा तब होता है, जब <Source> एलिमेंट में दिया गया फ़्लो वैरिएबल, मौजूदा फ़्लो में मौजूद न हो.

उदाहरण के लिए, यह गड़बड़ी तब होती है, जब एक्सट्रैक्ट वैरिएबल नीति, रिस्पॉन्स फ़्लो में लागू होती है और इससे JSON पाथ पार्स होने की उम्मीद की जाती है, लेकिन <Source> एलिमेंट, फ़्लो वैरिएबल request.content की जानकारी देता है, जो रिस्पॉन्स फ़्लो में मौजूद नहीं है.

संक्रमण की जांच

  1. एक्सट्रैक्ट वैरिएबल नीति की उस जगह की पहचान करें जहां गड़बड़ी हुई थी. साथ ही, उस फ़्लो वैरिएबल के नाम की पहचान करें जिससे डेटा नहीं निकाला जा सका. आपको ये दोनों आइटम, गड़बड़ी के जवाब के गड़बड़ी वाले एलिमेंट में मिल सकते हैं. उदाहरण के लिए, इस गड़बड़ी में नीति का नाम ExtractVariables-1 है और वैरिएबल request.content है:

    "faultstring": "ExtractVariables ExtractJSONVariabes: Json path parsing failed for flow variables request.content"

  2. एक्सट्रैक्ट वैरिएबल नीति के एक्सएमएल में, पुष्टि करें कि <Source> एलिमेंट में सेट वैरिएबल का नाम, गलत स्ट्रिंग में बताए गए वैरिएबल नाम (ऊपर दिया गया चरण #1) से मेल खाता है. उदाहरण के लिए, नीचे दी गई 'वैरिएबल एक्सट्रैक्ट करें' नीति request.content नाम के एक वैरिएबल के बारे में बताती है, जो गड़बड़ी स्ट्रिंग में मौजूद वैरिएबल से मेल खाता है:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <ExtractVariables name="ExtractJSONVariables" async="false" continueOnError="false" enabled="true">
        <JSONPayload>
            <Variable name="Name" type="string">
                <JSONPath>$.args.name</JSONPath>
            </Variable>
        </JSONPayload>
        <Source clearPayload="false">request.content</Source>
    </ExtractVariables>
    
    
  3. पुष्टि करें कि <Source> एलिमेंट में इस्तेमाल किया गया फ़्लो वैरिएबल तय किया गया है और उस फ़्लो में उपलब्ध है जिसमें एक्सट्रैक्ट वैरिएबल नीति लागू की जा रही है.

  4. अगर वैरिएबल इनमें से कोई एक है:

    • दायरे से बाहर है (यह उस फ़्लो में उपलब्ध नहीं होता जहां नीति का इस्तेमाल किया जा रहा है) या
    • रिज़ॉल्व नहीं किया जा सकता (तय नहीं किया गया है)

    तो यही गड़बड़ी की वजह है.

    उदाहरण के तौर पर, मान लें कि ऊपर दिखाई गई ExtractVariables नीति को रिस्पॉन्स फ़्लो में लागू किया जाना चाहिए. याद रखें कि फ़्लो वैरिएबल request.content का इस्तेमाल, एक्सट्रैक्ट वैरिएबल नीति के <Source> एलिमेंट में किया गया है. फ़्लो वैरिएबल request.content, सिर्फ़ अनुरोध के फ़्लो में उपलब्ध है.

    response वैरिएबल, अनुरोध के फ़्लो में मौजूद नहीं है. इसलिए, आपको यह गड़बड़ी कोड मिला है: steps.extractvariables.JsonPathParsingFailure.

रिज़ॉल्यूशन

पक्का करें कि एक्सट्रैक्ट वैरिएबल नीति के <Source> एलिमेंट में इस्तेमाल किया गया फ़्लो वैरिएबल, उस फ़्लो में उपलब्ध है जिसमें एक्सट्रैक्ट वैरिएबल नीति लागू होती है.

उदाहरण के लिए, मान लें कि रिस्पॉन्स फ़्लो में response.content नाम का वैरिएबल मौजूद है और असल में, उसमें वह JSON शामिल है जिसे आपको एक्सट्रैक्ट करना है. ऊपर दिखाई गई एक्स्ट्रैक्ट वैरिएबल नीति को ठीक करने के लिए, <Source> एलिमेंट में इस तरह से बदलाव करें:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables name="ExtractJSONVariables" async="false" continueOnError="false" enabled="true">
    <JSONPayload>
        <Variable name="Name" type="string">
            <JSONPath>$.args.name</JSONPath>
        </Variable>
    </JSONPayload>
    <Source clearPayload="false">response.content</Source>
</ExtractVariables>