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

כרגע מוצג התיעוד של Apigee Edge.
כניסה למסמכי התיעוד של Apigee X.
מידע

InvalidIndex

הודעת השגיאה

כשפורסים את ה-API של ה-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 או מספר שלילי, הפריסה של שרת ה-API של שרת ה-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. לכן פריסת ה-API של שרת ה-Proxy נכשלת ומוצגת השגיאה:

    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

הודעת השגיאה

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