मैसेज नीति के डिप्लॉयमेंट से जुड़ी गड़बड़ी की समस्या हल करना

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

InvalidIndex

गड़बड़ी का मैसेज

इस गड़बड़ी के मैसेज के साथ EDGE यूज़र इंटरफ़ेस (यूआई) या Edge मैनेजमेंट एपीआई से एपीआई प्रॉक्सी को डिप्लॉय नहीं किया जा सकता:

Error in deployment for environment [environment]
The revision is deployed, but traffic cannot flow.
AssignMessage[policy_name]: index must be greater than zero in [attribute].[index]

गड़बड़ी के मैसेज का उदाहरण

Error in deployment for environment test.
The revision is deployed, but traffic cannot flow.
AssignMessage[GenerateStudentsRequest]: index must be greater than zero in id.0

स्क्रीनशॉट का उदाहरण

वजह

अगर मैसेज असाइन करने की नीति के <Copy> और/या <Remove> एलिमेंट में बताया गया इंडेक्स 0 या नेगेटिव संख्या है, तो एपीआई प्रॉक्सी को डिप्लॉय नहीं किया जा सकता.

उदाहरण के लिए, अगर एक ही नाम वाले कई क्वेरी पैरामीटर पास किए जाते हैं, तो उन्हें Edge में इंडेक्स किए गए फ़्लो वैरिएबल के तौर पर ऐक्सेस किया जा सकता है. मान लें कि आपको तीन छात्र-छात्राओं के आईडी को क्वेरी पैरामीटर के तौर पर पास करना है, तो ऐसा इस तरह किया जा सकता है:

https://myorg-test.apigee.net/v1/basepath?school_name=NPS&id=1&id=2&id=3

इसके बाद, मान लें कि आपने मैसेज असाइन करने की नीति में इंडेक्स नंबर 0, 1, और 2 से इन क्वेरी पैरामीटर को इस तरह ऐक्सेस करने की कोशिश की है:

id.0
id.1 and
id.2

इस स्थिति में, प्रॉक्सी का डिप्लॉयमेंट विफल हो जाता है, क्योंकि इंडेक्स 1 से शुरू होना चाहिए. इसका मतलब है कि पहले क्वेरी पैरामीटर "id=1" को "id.1" के तौर पर ऐक्सेस किया जा सकता है. दूसरे क्वेरी पैरामीटर "id=2" को ऐक्सेस करने के लिए, आपको इंडेक्स 2 यानी "id.2" का इस्तेमाल करना होगा. इसी तरह, तीसरे क्वेरी पैरामीटर "id=3" को ऐक्सेस करने के लिए, "id.3" का इस्तेमाल किया जा सकता है.

आपको ज़्यादा जानकारी यहां मिल सकती है.

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

  1. उस मैसेज को असाइन करने की नीति की पहचान करें जहां गड़बड़ी हुई थी. साथ ही, एट्रिब्यूट के नाम, और अमान्य इंडेक्स की पहचान करें. आपको ये सभी आइटम, गड़बड़ी के मैसेज में मिल सकते हैं. उदाहरण के लिए, इस गड़बड़ी में, नीति का नाम GeneratingGeocodingRequest है, एट्रिब्यूट का नाम id है, और इंडेक्स 0 है:

    AssignMessage[GenerateStudentsRequest]: index must be greater than zero in id.0
    
  2. पुष्टि करें कि मैसेज पॉलिसी एक्सएमएल असाइन करने में जो गड़बड़ी हुई है उसमें इस्तेमाल किया गया एट्रिब्यूट और इंडेक्स, गड़बड़ी के मैसेज (ऊपर दिया गया चरण #1) में बताए गए एट्रिब्यूट के नाम और इंडेक्स से मेल खाते हैं. उदाहरण के लिए, इस नीति में id एट्रिब्यूट और इंडेक्स को 0 के तौर पर दिखाया गया है. यह गड़बड़ी के मैसेज में मौजूद एट्रिब्यूट से मेल खाता है:

    <AssignMessage name="GenerateStudentsRequest">
      <AssignTo createNew="true" type="request">StudentsInfoRequest</AssignTo>
      <Copy source="request">
          <QueryParams>
              <QueryParam name="school_name"/>
              <QueryParam name="id.0"/>
              <QueryParam name="id.1"/>
              <QueryParam name="id.2"/>
          </QueryParams>
      </Copy>
    </AssignMessage>
    
  3. अगर इंडेक्स की वैल्यू 0 या नेगेटिव नंबर है, तो इस गड़बड़ी की वजह से ही गड़बड़ी हो रही है.

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

    AssignMessage[GenerateStudentsRequest]: index must be greater than zero in id.0
    

रिज़ॉल्यूशन

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

<AssignMessage name="GenerateStudentsRequest">
    <AssignTo createNew="true" type="request">StudentsInfoRequest</AssignTo>
    <Copy source="request">
        <QueryParams>
            <QueryParam name="school_name"/>
            <QueryParam name="id.1"/>
            <QueryParam name="id.2"/>
            <QueryParam name="id.3"/>
        </QueryParams>
    </Copy>
</AssignMessage>

InvalidVariableName

गड़बड़ी का मैसेज

इस गड़बड़ी के मैसेज के साथ EDGE यूज़र इंटरफ़ेस (यूआई) या Edge मैनेजमेंट एपीआई से एपीआई प्रॉक्सी को डिप्लॉय नहीं किया जा सकता:

Error Saving Revision [revision_number]
The revision is deployed, but traffic cannot flow. AssignMessage schema validation failed: invalid variable name - null - in assign variable.

गड़बड़ी के मैसेज का उदाहरण

Error Saving Revision 3
AssignMessage schema validation failed: invalid variable name - null - in assign variable.

स्क्रीनशॉट का उदाहरण

वजह

अगर चाइल्ड एलिमेंट <Name> खाली है या <AssignVariable> एलिमेंट में इसकी जानकारी नहीं दी गई है, तो एपीआई प्रॉक्सी का डिप्लॉयमेंट नहीं हो पाएगा. ऐसा इसलिए, क्योंकि वैल्यू असाइन करने के लिए कोई भी मान्य वैरिएबल नाम मौजूद नहीं है. वैरिएबल का मान्य नाम डालना ज़रूरी है.

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

उस एपीआई प्रॉक्सी में, मैसेज असाइन करने की सभी नीतियों की जांच करें जहां गड़बड़ी हुई है. अगर कोई ऐसी 'मैसेज असाइन करें' नीति है जिसमें चाइल्ड एलिमेंट <Name> खाली है या <AssignVariable> एलिमेंट में उसके बारे में नहीं बताया गया है, तो यही गड़बड़ी की वजह है.

उदाहरण 1: मैसेज असाइन करने की इस नीति में, कोई <Name> एलिमेंट तय नहीं किया गया है.

<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1">
    <DisplayName>Assign Message-1</DisplayName>
    <Properties/>
    <AssignVariable>
        <Value>abcd1234</Value>
    </AssignVariable>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo>
</AssignMessage>

उदाहरण 2: नीचे दी गई 'मैसेज असाइन करें' नीति में कोई खाली <Name> एलिमेंट है .

<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1">
    <DisplayName>Assign Message-1</DisplayName>
    <Properties/>
    <AssignVariable>
        <Name></Name>
        <Value>abcd1234</Value>
    </AssignVariable>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo>
</AssignMessage>

रिज़ॉल्यूशन

यह पक्का करें कि मैसेज असाइन करने की नीति के <AssignVariable> एलिमेंट में चाइल्ड एलिमेंट <Name> हमेशा बताया गया हो और वह खाली न हो. उदाहरण के लिए:

<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1">
    <DisplayName>Assign Message-1</DisplayName>
    <Properties/>
        <AssignVariable>
        <Name>appSecret</Name>
        <Value>abcd1234</Value>
    </AssignVariable>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo>
</AssignMessage>