عیب یابی خطای استقرار خط مشی پیام را تعیین کنید

شما در حال مشاهده مستندات Apigee Edge هستید.
به مستندات Apigee X مراجعه کنید .
اطلاعات

ایندکس نامعتبر

پیام خطا

استقرار پروکسی API از طریق رابط کاربری Edge یا رابط مدیریت Edge با این پیام خطا مواجه می‌شود:

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 به عنوان متغیرهای جریان اندیس‌گذاری شده به آنها دسترسی داشته باشید. فرض کنید می‌خواهید شناسه‌های ۳ دانشجو را به عنوان پارامترهای کوئری ارسال کنید، می‌توانید این کار را به صورت زیر انجام دهید:

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

سپس، فرض کنید که شما سعی می‌کنید به این پارامترهای پرس‌وجو با شماره‌های شاخص ۰، ۱ و ۲ در سیاست Assign Message به صورت زیر دسترسی پیدا کنید:

id.0
id.1 and
id.2

در این حالت، استقرار پروکسی با شکست مواجه می‌شود زیرا اندیس باید با ۱ شروع شود. این بدان معناست که می‌توانید به پارامتر پرس‌وجوی اول "id=1" به صورت "id.1" دسترسی پیدا کنید. برای دسترسی به پارامتر پرس‌وجوی دوم "id=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. تأیید کنید که نام ویژگی و شاخص استفاده شده در سیاست XML مربوط به Assign Message ناموفق با نام ویژگی و شاخص شناسایی شده در پیام خطا (مرحله ۱ در بالا) مطابقت داشته باشد. به عنوان مثال، سیاست زیر 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. اگر اندیس مشخص شده ۰ یا عدد منفی باشد، علت خطا همین است.

    در مثال مربوط به سیاست Assign Message که در بالا نشان داده شده است، شما سعی دارید با استفاده از اندیس ۰ به اولین مقدار پارامتر کوئری "id" دسترسی پیدا کنید. از این رو، استقرار 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>

نام متغیر نامعتبر

پیام خطا

استقرار پروکسی API از طریق رابط کاربری Edge یا رابط مدیریت Edge با این پیام خطا مواجه می‌شود:

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> مشخص نشده باشد، پیاده‌سازی پروکسی API با شکست مواجه می‌شود زیرا هیچ نام متغیر معتبری برای اختصاص مقدار به آن وجود ندارد. یک نام متغیر معتبر مورد نیاز است.

تشخیص

تمام سیاست‌های Assign Message را در API Proxy خاصی که خطا در آن رخ داده است، بررسی کنید. اگر سیاست Assign Message وجود داشته باشد که در آن عنصر فرزند <Name> خالی باشد یا در عنصر <AssignVariable> مشخص نشده باشد، علت خطا همین است.

مثال ۱: در سیاست 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>

مثال ۲: سیاست 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>