אתם צופים במסמכי התיעוד של Apigee ושל Apigee Hybrid.
לעיון במסמכי התיעוד של
Apigee Edge.
InvalidIndex
הודעת השגיאה
פריסת ה-proxy ל-API דרך ממשק המשתמש או ה-API של Apigee נכשלת ומוצגת הודעת השגיאה הבאה:
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 תיכשל.
לדוגמה, אם מעבירים כמה פרמטרים של שאילתה עם אותו שם, אפשר לגשת אליהם כמשתני זרימה עם אינדקס. נניח שאתם רוצים להעביר את המזהים של 3 תלמידים כפרמטרים של שאילתה. כך עושים את זה:
https://$EXTERNAL_IP/$PROXY_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.
מידע נוסף מופיע במאמרי העזרה בנושא מדיניות AssignMessage Copy element.
אבחון
מזהים את מדיניות Assign Message שבה אירעה השגיאה, את שם המאפיין ואת האינדקס הלא תקין. כל הפריטים האלה מופיעים בהודעת השגיאה. לדוגמה, בשגיאה הבאה, שם המדיניות הוא
GeneratingGeocodingRequest, שם המאפיין הואidוהאינדקס הוא0:AssignMessage[GenerateStudentsRequest]: index must be greater than zero in id.0מוודאים ששם המאפיין והאינדקס שמשמשים ב-XML של מדיניות Assign Message שנכשלה זהים לשם המאפיין ולאינדקס שצוינו בהודעת השגיאה (שלב 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>
אם האינדקס שצוין הוא 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 דרך ממשק המשתמש או ה-API של Apigee נכשלת ומוצגת הודעת השגיאה הבאה:
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 תיכשל כי אין שם משתנה תקין שאפשר להקצות לו ערך. חובה להזין שם משתנה תקין.
אבחון
בודקים את כל כללי המדיניות של 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>