Pemecahan masalah error runtime Operasi Peta Nilai Kunci

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

UnsupportedOperationException

Kode error

java.lang.UnsupportedOperationException

Isi respons error

{
   "fault":{
      "faultstring":"java.lang.UnsupportedOperationException",
      "detail":{
         "errorcode":"Internal Server Error"
      }
   }
}

Penyebab

Error ini terjadi jika atribut mapIdentifier disetel ke string kosong dalam kebijakan Key Value Map Operations.

Diagnosis

  1. Periksa semua kebijakan Operasi Peta Nilai Kunci di Proxy API tertentu tempat kegagalan terjadi. Jika ada kebijakan Operasi Peta Nilai Kunci yang menetapkan atribut mapIdentifier sebagai string kosong, berarti itulah penyebab error.

    Misalnya, kebijakan Operasi Peta Nilai Kunci berikut memiliki mapIdentifier kosong:

    <KeyValueMapOperations async="false" continueOnError="false" enabled="true" name="StoreKvm" mapIdentifier="">
        <DisplayName>StoreKvm</DisplayName>
        <Properties/>
        <ExclusiveCache>false</ExclusiveCache>
        <ExpiryTimeInSecs>300</ExpiryTimeInSecs>
        <Put override="true">
            <Key>
                <Parameter ref="request.queryparam.key"/>
            </Key>
            <Value ref="request.queryparam.value"/>
        </Put>
        <Scope>environment</Scope>
    </KeyValueMapOperations>
    

Resolusi

Pastikan atribut mapIdentifier ditetapkan ke peta nilai kunci yang valid dalam kebijakan Operasi Peta Nilai Kunci.

Untuk memperbaiki contoh kebijakan yang ditampilkan di atas, Anda dapat menentukan mapIdentifier ke peta nilai kunci UserLocationMap yang ada.

<KeyValueMapOperations async="false" continueOnError="false" enabled="true" name="StoreKvm" mapIdentifier="UserLocationMap">
    <DisplayName>StoreKvm</DisplayName>
    <Properties/>
    <ExclusiveCache>false</ExclusiveCache>
    <ExpiryTimeInSecs>300</ExpiryTimeInSecs>
    <Put override="true">
        <Key>
            <Parameter ref="request.queryparam.key"/>
        </Key>
        <Value ref="request.queryparam.value"/>
    </Put>
    <Scope>environment</Scope>
</KeyValueMapOperations>

SetVariableFailed

Kode error

steps.keyvaluemapoperations.SetVariableFailed

Isi respons error

{
   "fault":{
      "faultstring":"Failed to set variable variable_name in KeyValueMapStepDefinition policy_name",
      "detail":{
         "errorcode":"steps.keyvaluemapoperations.SetVariableFailed"
      }
   }
}

Contoh Pesan Error

{
   "fault":{
      "faultstring":"Failed to set variable myvar in KeyValueMapStepDefinition EncryptedKVM",
      "detail":{
         "errorcode":"steps.keyvaluemapoperations.SetVariableFailed"
      }
   }
}

Penyebab

Error ini terjadi jika Anda mencoba mengambil nilai dari peta nilai kunci terenkripsi dan menetapkan nilai ke variabel yang namanya tidak memiliki awalan private.. Awalan yang diperlukan untuk tujuan keamanan dasar selama proses debug, menyembunyikan nilai terenkripsi dari sesi debug dan Rekaman Aktivitas proxy API.

Diagnosis

1. Identifikasi kebijakan Operasi Peta Nilai Kunci tempat kesalahan terjadi dan nama variabel yang tidak dapat ditetapkan nilai. Anda dapat menemukan kedua item ini dalam elemen faultstring respons error. Misalnya, dalam faultstring berikut, nama kebijakannya adalah EncryptedKVM dan variabelnya adalah myvar:

  "faultstring":"Failed to set variable myvar in KeyValueMapStepDefinition EncryptedKVM"

1. Dalam XML kebijakan Operasi Peta Nilai Kunci yang gagal, pastikan nama variabel yang ditentukan dalam atribut assignTo elemen <Get> cocok dengan nama variabel yang diidentifikasi di string kesalahan (langkah #1 di atas). Misalnya, kebijakan Operasi Peta Nilai Kunci berikut menentukan variabel bernama myvar dalam elemen <Get>, yang cocok dengan yang ada di faultstring:

  <KeyValueMapOperations async="false" continueOnError="false" enabled="true" name="Key-Value-Map-Operations-1" mapIdentifier="testEncrypted">
      <DisplayName>KeyValueMapOperations-1</DisplayName>
      <Properties/>
      <ExclusiveCache>false</ExclusiveCache>
      <ExpiryTimeInSecs>300</ExpiryTimeInSecs>
      <Get assignTo="myvar" index="1">
          <Key>
              <Parameter>foo</Parameter>
          </Key>
      </Get>
      <Scope>environment</Scope>
  </KeyValueMapOperations>
  1. Periksa apakah peta nilai kunci yang ditentukan dalam atribut mapIdentifier adalah KVM terenkripsi.

    Untuk memeriksa apakah KVM dienkripsi di UI Apigee:

    1. Di UI Apigee, klik Admin di menu navigasi sebelah kiri.
    2. Klik Lingkungan.
    3. Klik Key Value Maps.
    4. Temukan Peta Nilai Kunci yang ingin Anda gunakan.
    5. Klik panah di sebelah kiri nama untuk meluaskan daftar nilai.
    6. Nilai tampilan Maps Nilai Kunci terenkripsi yang disamarkan dengan tanda bintang di UI (*****) seperti yang ditunjukkan di Tentang KVM terenkripsi.
  2. Jika peta nilai kunci adalah KVM terenkripsi dan nama variabel yang digunakan dalam atribut assignTo elemen <Get> tidak memiliki awalan private. Itulah penyebab error.

    Pada contoh kebijakan Operasi Peta Nilai Kunci yang ditampilkan di atas, peta nilai kunci testEncrypted dienkripsi dan nama variabel myvar tidak memiliki awalan private. Oleh karena itu, Anda akan menerima kode error:

    steps.keyvaluemapoperations.SetVariableFailed
    

Resolusi

Pastikan nama variabel memiliki awalan private. di atribut assignTo elemen <Get> dalam kebijakan Operasi Peta Nilai Kunci jika peta nilai kunci yang digunakan dienkripsi.

Untuk memperbaiki contoh kebijakan Operasi Peta Nilai Kunci yang ditampilkan di atas, Anda dapat mengubah nilai atribut assignTo menjadi private.myvar:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<KeyValueMapOperations async="false" continueOnError="false" enabled="true" name="Key-Value-Map-Operations-1" mapIdentifier="testEncrypted">
    <DisplayName>KeyValueMapOperations-1</DisplayName>
    <Properties/>
    <ExclusiveCache>false</ExclusiveCache>
    <ExpiryTimeInSecs>300</ExpiryTimeInSecs>
    <Get assignTo="private.myvar" index="1">
        <Key>
            <Parameter>foo</Parameter>
        </Key>
    </Get>
    <Scope>environment</Scope>
</KeyValueMapOperations>