Menetapkan pemecahan masalah error deployment kebijakan Pesan

Anda sedang melihat dokumentasi Apigee dan Apigee Hybrid.
Lihat dokumentasi Apigee Edge.

InvalidIndex

Pesan error

Deployment proxy API melalui UI atau API Apigee gagal dengan pesan error ini:

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]

Contoh pesan error

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

Contoh screenshot

Error dalam deployment untuk pengujian lingkungan.

Penyebab

Jika indeks yang ditentukan dalam elemen <Copy> dan/atau <Remove> dari kebijakan Tetapkan Pesan adalah 0 atau angka negatif, deployment Proxy API akan gagal.

Misalnya, jika Anda meneruskan beberapa parameter kueri dengan nama yang sama, Anda dapat mengaksesnya sebagai variabel alur yang diindeks. Misalnya Anda ingin meneruskan ID 3 siswa sebagai parameter kueri, Anda dapat melakukannya sebagai berikut:

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

Kemudian, katakanlah Anda mencoba mengakses parameter kueri ini dengan nomor indeks 0, 1, dan 2 dalam kebijakan Tetapkan Pesan sebagai berikut:

id.0
id.1 and
id.2

Dalam hal ini, deployment proxy gagal karena indeks harus dimulai dengan angka 1. Ini berarti, Anda dapat mengakses parameter kueri pertama "id=1" sebagai "id.1". Untuk mengakses parameter kueri kedua "id=2", Anda harus menggunakan indeks 2 yaitu, "id.2". Demikian pula, untuk mengakses parameter kueri ketiga "id=3", Anda dapat menggunakan "id.3".

Untuk mengetahui informasi selengkapnya, lihat dokumentasi elemen Salin terkait kebijakanAssignMessage.

Diagnosis

  1. Identifikasi kebijakan Tetapkan Pesan tempat error terjadi, nama atribut, dan indeks yang tidak valid. Anda dapat menemukan semua item ini dalam pesan error. Misalnya, dalam error berikut, nama kebijakan adalah GeneratingGeocodingRequest, nama atributnya adalah id, dan indeksnya adalah 0:

    AssignMessage[GenerateStudentsRequest]: index must be greater than zero in id.0
    
  2. Pastikan nama atribut dan indeks yang digunakan dalam XML kebijakan Tetapkan Pesan yang gagal cocok dengan nama atribut dan indeks yang diidentifikasi dalam pesan error (langkah #1 di atas). Misalnya, kebijakan berikut menentukan atribut id dan indeks sebagai 0, yang cocok dengan yang ada dalam pesan error:

    <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. Jika indeks yang ditentukan adalah 0 atau angka negatif, itulah penyebab error.

    Dalam contoh kebijakan Tetapkan Pesan yang ditampilkan di atas, Anda mencoba mengakses nilai pertama parameter kueri "id" menggunakan indeks 0. Oleh karena itu, deployment Proxy API gagal dengan error:

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

Resolusi

Dalam Tetapkan Pesan, saat Anda mengakses beberapa header, parameter kueri, atau parameter lain yang memiliki nama yang sama, pastikan bahwa indeks selalu lebih besar dari nol. Contoh:

<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

Pesan error

Deployment proxy API melalui UI atau API Apigee gagal dengan pesan error ini:

Error Saving Revision [revision_number]
The revision is deployed, but traffic cannot flow. AssignMessage schema validation failed: invalid variable name - null - in assign variable.

Contoh pesan error

Error Saving Revision 3
AssignMessage schema validation failed: invalid variable name - null - in assign variable.

Contoh screenshot

Terjadi error saat menyimpan revisi 3.

Penyebab

Jika elemen turunan <Name> kosong atau tidak ditentukan dalam elemen <AssignVariable>, deployment proxy API akan gagal karena tidak ada nama variabel valid yang diberi nilai. Nama variabel yang valid wajib diisi.

Diagnosis

Periksa semua kebijakan Tetapkan Pesan di Proxy API tertentu tempat kegagalan terjadi. Jika terdapat kebijakan Tetapkan Pesan saat elemen turunan <Name> kosong atau tidak ditentukan dalam elemen <AssignVariable>, berarti itulah penyebab error.

Contoh 1: Kebijakan Tetapkan Pesan berikut tidak memiliki elemen <Name> yang ditentukan.

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

Contoh 2: Kebijakan Tetapkan Pesan berikut memiliki elemen <Name> yang kosong .

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

Resolusi

Pastikan elemen turunan <Name> selalu ditentukan dan tidak kosong dalam elemen <AssignVariable> kebijakan Tetapkan Pesan. Contoh:

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