Anda sedang melihat dokumentasi Apigee Edge.
Buka
dokumentasi Apigee X. info
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 Operasi Peta Nilai Kunci.
Diagnosis
Periksa semua kebijakan Operasi Peta Nilai Kunci di Proxy API tertentu tempat kegagalan terjadi. Jika terdapat kebijakan Operasi Peta Nilai Kunci dengan atribut
mapIdentifier
ditetapkan sebagai string kosong, berarti itulah penyebab error.Misalnya, kebijakan Operasi Peta Nilai Kunci berikut memiliki
mapIdentifier
yang 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>apiproxy</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 yang ada UserLocationMap
.
<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>apiproxy</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 yang dienkripsi 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 Pelacakan proxy API.
Diagnosis
1.
Identifikasi kebijakan Operasi Peta Nilai Kunci tempat error terjadi dan nama variabel yang tidak dapat ditetapkan nilainya. 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.
Pada XML kebijakan Operasi Peta Nilai Kunci yang gagal, pastikan nama variabel yang ditentukan dalam atribut assignTo
elemen <Get>
cocok dengan nama variabel yang diidentifikasi dalam 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>
Periksa apakah peta nilai kunci yang ditentukan dalam atribut
mapIdentifier
adalah KVM terenkripsi. Jika KVM dienkripsi pada cakupan lingkungan, Anda dapat memverifikasi bahwa KVM dienkripsi di UI Edge. Atau, jika dibuat dalam cakupan organisasi atau apiproxy, Anda perlu menggunakan Management API untuk memverifikasi apakah API tersebut dienkripsi. Lihat juga Mengelola dan menggunakan KVM.Untuk memeriksa apakah KVM dengan cakupan lingkungan dienkripsi di Edge UI:
- Di UI Edge, klik Admin di menu navigasi sebelah kiri.
- Klik Lingkungan.
- Klik Key Value Maps.
- Temukan Peta Nilai Kunci yang ingin Anda gunakan.
- Klik tanda panah di sebelah kiri nama untuk meluaskan daftar nilai.
- Encrypted Key Value Maps menampilkan nilai yang disamarkan dengan tanda bintang di UI (*****) seperti yang ditunjukkan dalam Tentang KVM Terenkripsi.
Untuk memeriksa apakah KVM yang dicakupkan pada level organisasi, lingkungan, atau apiproxy dienkripsi, gunakan Management API. Jika Anda menggunakan API tersebut, contoh respons yang menampilkan setelan terenkripsi dan tanda bintang untuk nilai akan terlihat seperti ini:
{ "encrypted": true, "entry": [ { "name": "foo", "value": "*****" } ], "name": "encrypted" }
Jika peta nilai kunci adalah KVM terenkripsi dan nama variabel yang digunakan dalam atribut
assignTo
dari elemen<Get>
tidak memiliki awalanprivate
. Itulah sebabnya terjadinya error.Pada contoh kebijakan Operasi Peta Nilai Kunci yang ditampilkan di atas, peta nilai kunci
testEncrypted
dienkripsi dan nama variabelmyvar
tidak memiliki awalanprivate
. 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>