Memecahkan masalah error runtime Message Assign

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

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

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

Diagnosis

  1. Identifikasi kebijakan Assign Message Policy tempat terjadinya error dan nama variabel yang tidak tersedia. Anda dapat menemukan kedua item ini di elemen faultstring dalam respons error.

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

    "faultstring": "AssignMessage[googleBook]: unable to resolve variable var"
    
  2. Dalam XML Kebijakan Pesan yang gagal ditetapkan, 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. Tentukan apakah variabel ditentukan dan tersedia dalam alur tempat kebijakan Tetapkan Pesan sedang dijalankan.

  4. Jika variabelnya adalah:

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

    maka itulah penyebab error.

    Sebagai contoh, misalkan kebijakan Assign Message yang ditampilkan di atas dijalankan dalam alur permintaan. Periksa apakah variabel var ditentukan dalam kebijakan apa pun 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 dirujuk dalam kebijakan ada dan tersedia dalam alur tertentu, tempat kebijakan Assign Message sedang dieksekusi.

Untuk memperbaiki contoh kebijakan yang ditampilkan di atas, Anda dapat mengubah atribut sumber dalam elemen <Copy> menjadi variabel permintaan atau variabel kustom jenis pesan lainnya yang ada dalam 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> ditetapkan ke variabel yang bukan berjenis message.

Variabel jenis pesan merepresentasikan seluruh permintaan dan respons HTTP. Variabel alur bawaan request, response, dan message berjenis pesan. Untuk mempelajari lebih lanjut variabel pesan, lihat Referensi variabel.

Diagnosis

  1. Identifikasi Kebijakan Pesan Penugasan tempat terjadinya error dan nama variabel yang jenisnya salah. Anda dapat menemukan kedua item ini di elemen faultstring dalam respons error. Misalnya, dalam faultstring berikut, nama kebijakan adalah GenerateGeocodingRequest dan variabelnya adalah PostalCode:

    "faultstring": "AssignMessage[GenerateGeocodingRequest]: value of variable PostalCode is not of type Message"
    
  2. Dalam XML Kebijakan Pesan yang Gagal Ditetapkan, pastikan 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 tidak:

    1. Cari kode dalam paket Proxy API, tempat variabel ditentukan pertama kali.
    2. Setelah mengetahui kebijakan tempat variabel ditentukan dan diisi terlebih dahulu, Anda perlu menentukan jenis variabel tersebut sebagai berikut:
      1. Periksa nilai atribut jenis (jika ada).
      2. Jika atribut jenis tidak ada, variabel dianggap sebagai string.
    3. Jika jenis variabel adalah non-pesan (seperti string), maka itulah penyebab error. Anda dapat mempelajari variabel umum dan jenisnya di Referensi variabel.

    Misalnya, lihat variabel PostalCode dalam XML di atas. Nilai variabel alur request.queryparam.postalcode ditetapkan dalam elemen <AssignVariable>. Nilai ini adalah string, karena tidak ada atribut jenis dalam penetapan variabel.

    Sekarang, ingat bahwa variabel PostalCode digunakan dalam elemen <Copy> kebijakan Assign Message:

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

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

    steps.assignmessage.VariableOfNonMsgType
    

Resolusi

Pastikan atribut source dalam elemen <Copy> di kebijakan Assign Message yang gagal disetel ke variabel alur jenis message yang ada.

Untuk memperbaiki kebijakan, Anda dapat mengubah atribut source dalam elemen <Copy> untuk menentukan variabel yang berjenis pesan. Misalnya, jika kebijakan Tetapkan Pesan seharusnya dijalankan 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>