פתרון בעיות שקשורות לשגיאות פריסה של מדיניות ההודעות

מוצג המסמך של Apigee Edge.
עוברים אל מסמכי תיעוד של Apigee X.
מידע

InvalidIndex

הודעת שגיאה

כשפורסים את שרת ה-proxy ל-API דרך ממשק המשתמש של Edge או Edge management API, מופיעה הודעת השגיאה הבאה:

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 או מספר שלילי, הפריסה של שרת ה-proxy ל-API תיכשל.

לדוגמה, אם מעבירים מספר פרמטרים של שאילתה בעלי שם זהה, אפשר לגשת אליהם ב-Edge בתור משתני זרימה שנוספו לאינדקס. נניח שאתם רוצים להעביר את המזהים של 3 תלמידים כפרמטרים של שאילתה, ואז אפשר לעשות זאת כך:

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

במקרה זה, הפריסה של שרת ה-proxy נכשלת כי האינדקס חייב להתחיל ב-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. מוודאים ששם המאפיין והאינדקס שנעשה בהם שימוש ב-XML של 'הקצאת הודעה' שהפעולה נכשלה בהם תואמים לשם המאפיין ולאינדקס שצוינו בהודעת השגיאה (שלב 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 או מספר שלילי, זו הסיבה לשגיאה.

    בדוגמת המדיניות 'הקצאת הודעה' המוצגת למעלה, ניסית לגשת לערך הראשון של פרמטר השאילתה "id" באמצעות האינדקס 0. לכן הפריסה של ה-Proxy ל-API נכשלה עם השגיאה:

    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

הודעת שגיאה

כשפורסים את שרת ה-proxy ל-API דרך ממשק המשתמש של Edge או Edge management API, מופיעה הודעת השגיאה הבאה:

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>, הפריסה של שרת ה-proxy ל-API נכשלת כי אין שם משתנה חוקי שאליו אפשר להקצות ערך. צריך להזין שם משתנה חוקי.

אבחון

לבדוק את כל כללי המדיניות להקצאת הודעות בשרת ה-proxy הספציפי ל-API שבו התרחש הכשל. אם יש מדיניות הקצאת הודעה כלשהי שבה רכיב הצאצא <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>

רזולוציה

צריך לוודא שרכיב הצאצא <Name> תמיד מצוין ולא ריק בתוך הרכיב <AssignVariable> של המדיניות 'הקצאת הודעה'. לדוגמה:

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