Tetapkan pemecahan masalah error Runtime Pesan

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

UnresolvedVariable

Kode error

steps.assignmessage.UnresolvedVariable

Isi respons error

{
    "fault": {
        "faultstring": "AssignMessage[policy_name]: unable to resolve variable [variable_name]",
        "detail": {
            "errorcode": "steps.assignmessage.UnresolvedVariable"
        }
    }
}

Penyebab

Error ini terjadi jika variabel yang ditentukan dalam kebijakan Tetapkan Pesan:

  • di luar cakupan (tidak tersedia di alur spesifik tempat kebijakan sedang dijalankan) atau
  • tidak dapat diselesaikan (tidak ditentukan)

Misalnya, error ini terjadi jika kebijakan Tetapkan Pesan dieksekusi di alur permintaan, tetapi atribut source di elemen <Copy> disetel ke variabel response atau error atau variabel kustom lainnya yang tidak ada di alur permintaan.

Diagnosis

  1. Identifikasi Tetapkan Kebijakan Pesan tempat error terjadi dan nama variabel yang tidak tersedia. Anda dapat menemukan kedua item ini dalam elemen faultstring respons error.

    Misalnya, dalam faultstring berikut, nama kebijakannya adalah googleBook dan variabelnya adalah var:

    "faultstring": "AssignMessage[googleBook]: unable to resolve variable var"
    
  2. Pada XML Menetapkan Kebijakan Pesan yang gagal, pastikan nama variabel yang digunakan cocok dengan nama variabel yang diidentifikasi dalam string kesalahan (langkah #1 di atas). Misalnya, kebijakan berikut menetapkan atribut sumber dalam elemen <Copy> ke variabel bernama var, yang cocok dengan yang ada di faultstring:

    <AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1">
       <DisplayName>googleBook</DisplayName>
       <Properties />
       <Copy source="var">
          <Headers>
             <Header name="user-agent" />
          </Headers>
       </Copy>
       <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
       <AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo>
    </AssignMessage>
    
  3. Menentukan apakah variabel telah ditetapkan dan tersedia dalam alur tempat kebijakan Tetapkan Pesan dijalankan.

  4. Jika variabelnya adalah:

    1. di luar cakupan (tidak tersedia di alur spesifik tempat kebijakan sedang dijalankan) atau
    2. tidak dapat diselesaikan (tidak ditentukan)

    maka itulah penyebab terjadinya {i>error<i}.

    Sebagai contoh, misalkan kebijakan Tetapkan Pesan yang ditampilkan di atas dijalankan dalam alur permintaan. Periksa apakah variabel var ditetapkan di salah satu kebijakan yang dijalankan sebelum kebijakan Tetapkan Pesan dalam alur permintaan. Jika variabel belum ditentukan, Anda akan menerima kode error:

    steps.assignmessage.UnresolvedVariable
    

Resolusi

Pastikan variabel yang direferensikan dalam kebijakan ada dan tersedia dalam alur tertentu, tempat kebijakan Tetapkan Pesan dijalankan.

Untuk memperbaiki contoh kebijakan yang ditampilkan di atas, Anda dapat mengubah atribut sumber di elemen <Copy> menjadi variabel permintaan atau variabel kustom lainnya dari jenis pesan yang ada di alur permintaan.

<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1">
   <DisplayName>googleBook</DisplayName>
   <Properties />
   <Copy source="request">
      <Headers>
         <Header name="user-agent" />
      </Headers>
   </Copy>
   <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
   <AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo>
</AssignMessage>

VariableOfNonMsgType

Kode error

steps.assignmessage.VariableOfNonMsgType

Isi respons error

{
    "fault": {
        "faultstring": "AssignMessage[policy_name]: value of variable [variable] is not of type Message",
        "detail": {
            "errorcode": "steps.assignmessage.VariableOfNonMsgType"
        }
    }
}

Penyebab

Error ini terjadi jika atribut source dalam elemen <Copy> disetel ke variabel yang bukan jenis message.

Variabel jenis pesan mewakili keseluruhan permintaan dan respons HTTP. Variabel flow bawaan request, response, dan message adalah jenis pesan. Untuk mempelajari variabel pesan lebih lanjut, baca artikel Referensi variabel.

Diagnosis

  1. Identifikasi Tetapkan Kebijakan Pesan saat error terjadi dan nama variabel yang jenisnya salah. Anda dapat menemukan kedua item ini dalam elemen faultstring respons error. Misalnya, dalam faultstring berikut, nama kebijakannya adalah GenerateGeocodingRequest dan variabelnya adalah PostalCode:

    "faultstring": "AssignMessage[GenerateGeocodingRequest]: value of variable PostalCode is not of type Message"
    
  2. Pada XML Menetapkan Kebijakan Pesan yang gagal, verifikasi bahwa nama variabel yang ditetapkan dalam elemen <Copy> cocok dengan nama variabel yang diidentifikasi dalam string kesalahan (langkah #1 di atas). Misalnya, kebijakan berikut menetapkan atribut sumber ke variabel bernama PostalCode, yang cocok dengan yang ada di faultstring:

    <AssignMessage name="GenerateGeocodingRequest">
       <AssignTo createNew="true" type="request">GeocodingRequest</AssignTo>
       <AssignVariable>
          <Name>PostalCode</Name>
          <Ref>request.queryparam.postalcode</Ref>
       </AssignVariable>
       <AssignVariable>
          <Name>Country</Name>
          <Ref>request.queryparam.country</Ref>
       </AssignVariable>
       <Copy source="PostalCode">
          <QueryParams>
             <QueryParam name="q" />
          </QueryParams>
       </Copy>
    </AssignMessage>
    
  3. Tentukan apakah variabel ini berjenis pesan atau bukan:

    1. Temukan kode dalam paket Proxy API, tempat variabel ditentukan terlebih dahulu.
    2. Setelah mengetahui kebijakan yang menentukan dan mengisi variabel terlebih dahulu, Anda perlu menentukan jenis variabel tersebut sebagai berikut:
      1. Periksa nilai atribut jenis (jika ada).
      2. Jika atribut jenis tidak ada, variabel akan dianggap sebagai string.
    3. Jika jenis variabel bukan pesan (seperti string), itulah penyebab error. Anda dapat mempelajari variabel umum dan jenisnya di Referensi variabel.

    Misalnya, lihat variabel PostalCode dalam XML di atas. Kolom ini diberi nilai variabel flow request.queryparam.postalcode dalam elemen <AssignVariable>. Nilai ini berupa string karena tidak ada atribut jenis dalam penetapan variabel.

    Sekarang, ingat kembali bahwa variabel PostalCode digunakan dalam elemen <Copy> dalam kebijakan Tetapkan Pesan:

    <Copy source="PostalCode">
       <QueryParams>
          <QueryParam name="PostalCode" />
       </QueryParams>
    </Copy>
    

    Karena PostalCode bukan jenis pesan (ini merupakan string dalam contoh ini), Anda menerima kode error:

    steps.assignmessage.VariableOfNonMsgType
    

Resolusi

Pastikan atribut source di elemen <Copy> pada kebijakan Tetapkan Pesan yang gagal disetel ke variabel alur jenis pesan yang ada.

Untuk memperbaiki kebijakan, Anda dapat mengubah atribut source di elemen <Copy> untuk menentukan variabel yang merupakan jenis pesan. Misalnya, jika kebijakan Tetapkan Pesan seharusnya dieksekusi dalam alur permintaan, Anda dapat menggunakan variabel jenis pesan request atau variabel kustom jenis pesan lainnya.

<AssignMessage name="GenerateGeocodingRequest">
   <AssignTo createNew="true" type="request">GeocodingRequest</AssignTo>
   <AssignVariable>
      <Name>PostalCode</Name>
      <Ref>request.queryparam.postalcode</Ref>
   </AssignVariable>
   <AssignVariable>
      <Name>Country</Name>
      <Ref>request.queryparam.country</Ref>
   </AssignVariable>
   <Copy source="request">
      <QueryParams>
         <QueryParam name="PostalCode" />
      </QueryParams>
   </Copy>
</AssignMessage>