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

אתם צופים במסמכי התיעוד של 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> של מדיניות Assign Message הוא 0 או מספר שלילי, פריסת ה-API Proxy תיכשל.

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

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

עכשיו נניח שאתם מנסים לגשת לפרמטרים של השאילתה באמצעות מספרי האינדקס 0, 1 ו-2 במדיניות Assign Message באופן הבא:

id.0
id.1 and
id.2

במקרה כזה, פריסת ה-proxy נכשלת כי האינדקס חייב להתחיל ב-1. כלומר, אפשר לגשת לפרמטר השאילתה הראשון id=1 בתור id.1. כדי לגשת לפרמטר השני של השאילתה id=2, צריך להשתמש באינדקס 2, כלומר id.2. באופן דומה, כדי לגשת לפרמטר השאילתה השלישי id=3, אפשר להשתמש ב-id.3.

כאן יש פרטים נוספים.

אבחון

  1. מזהים את מדיניות Assign Message שבה התרחשה השגיאה, את שם המאפיין ואת האינדקס הלא תקין. כל הפריטים האלה מופיעים בהודעת השגיאה. לדוגמה, בשגיאה הבאה, שם המדיניות הוא GeneratingGeocodingRequest, שם המאפיין הוא id והאינדקס הוא 0:

    AssignMessage[GenerateStudentsRequest]: index must be greater than zero in id.0
    
  2. מוודאים ששם המאפיין והאינדקס שמשמשים במדיניות Assign Message 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 או מספר שלילי, זו הסיבה לשגיאה.

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

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

רזולוציה

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

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

אבחון

בודקים את כל כללי המדיניות של Assign Message ב-API Proxy הספציפי שבו התרחשה השגיאה. אם יש מדיניות Assign Message שבה אלמנט הצאצא <Name> ריק או לא מצוין באלמנט <AssignVariable>, זו הסיבה לשגיאה.

דוגמה 1: במדיניות Assign Message הבאה לא מוגדר רכיב <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: למדיניות Assign Message הבאה יש רכיב <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> של מדיניות Assign Message. לדוגמה:

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