פתרון בעיות בפריסת מדיניות HTTPModifier

אתם צופים במסמכי התיעוד של Apigee X.
לעיון במסמכי התיעוד של 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.
HTTPModifier[GenerateStudentsRequest]: index must be greater than zero in id.0

מטרה

אם האינדקס שצוין ברכיבים <Copy> או <Remove> של מדיניות HTTPModifier הוא 0 או מספר שלילי, הפריסה של API Proxy תיכשל.

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

https://$EXTERNAL_IP/$PROXY_BASEPATH?school_name=NPS&id=1&id=2&id=3

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

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.

אבחון

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

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

רזולוציה

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

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