Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin. info
UnsupportedOperationException
Hata kodu
java.lang.UnsupportedOperationException
Hata yanıtı gövdesi
{
"fault":{
"faultstring":"java.lang.UnsupportedOperationException",
"detail":{
"errorcode":"Internal Server Error"
}
}
}
Neden
Bu hata, mapIdentifier
özelliği Anahtar Değer Eşleme İşlemleri politikasında boş bir dize olarak ayarlanırsa ortaya çıkar.
Teşhis
Hatanın oluştuğu belirli API Proxy'sindeki tüm Anahtar Değer Haritası İşlemleri politikalarını inceleyin.
mapIdentifier
özelliğinin boş dize olarak ayarlandığı bir Anahtar Değer Eşleme İşlemleri politikası varsa hatanın nedeni budur.Örneğin, aşağıdaki Temel Değer Eşleme İşlemleri politikasında boş bir
mapIdentifier
var:<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>
Çözünürlük
Anahtar/Değer Eşlemesi İşlemleri politikasında mapIdentifier
özelliğinin geçerli bir anahtar/değer eşlemesi olarak ayarlandığından emin olun.
Yukarıda gösterilen örnek politikayı düzeltmek için mapIdentifier
değerini mevcut bir anahtar/değer eşleme UserLocationMap
ile belirtebilirsiniz.
<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
Hata kodu
steps.keyvaluemapoperations.SetVariableFailed
Hata yanıtı gövdesi
{ "fault":{ "faultstring":"Failed to set variable variable_name in KeyValueMapStepDefinition policy_name", "detail":{ "errorcode":"steps.keyvaluemapoperations.SetVariableFailed" } } }
Örnek Hata Mesajı
{
"fault":{
"faultstring":"Failed to set variable myvar in KeyValueMapStepDefinition EncryptedKVM",
"detail":{
"errorcode":"steps.keyvaluemapoperations.SetVariableFailed"
}
}
}
Neden
Bu hata, şifrelenmiş bir anahtar/değer eşlemesinden bir değer almaya çalışır ve değeri, adında private.
ön eki olmayan bir değişkene ayarlarsanız ortaya çıkar. Hata ayıklama sırasında temel güvenlik amacıyla gerekli olan ön ek, şifrelenmiş değerleri API proxy izleme ve hata ayıklama oturumlarından gizler.
Teşhis
1.
Hatanın oluştuğu Anahtar Değer Haritası İşlemleri politikasını ve değerin ayarlanamadığı değişkenin adını tanımlayın. Bu öğelerin ikisini de hata yanıtının faultstring
öğesinde bulabilirsiniz. Örneğin, aşağıdaki faultstring
'te politika adı EncryptedKVM
ve değişken myvar
'dir:
"faultstring":"Failed to set variable myvar in KeyValueMapStepDefinition EncryptedKVM"
1.
Başarısız Anahtar Değer Haritası İşlemleri politikası XML'inde, <Get>
öğesinin assignTo
özelliğinde belirtilen değişken adının, hata dizesinde tanımlanan değişken adıyla eşleştiğini doğrulayın (yukarıdaki 1. adım). Örneğin, aşağıdaki Anahtar Değer Eşleme İşlemleri politikası, <Get>
öğesinde faultstring
öğesindekiyle eşleşen myvar
adlı bir değişken belirtir:
<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>
mapIdentifier
özelliğinde belirtilen anahtar/değer eşlemesinin şifrelenmiş bir KVM olup olmadığını kontrol edin. KVM, ortam kapsamında şifrelenmişse Edge kullanıcı arayüzünde şifrelenmiş olduğunu doğrulayabilirsiniz. Aksi takdirde, kuruluş veya apiproxy kapsamında oluşturulduysa şifrelenmiş olup olmadığını doğrulamak için Management API'yi kullanmanız gerekir. KVM'leri yönetme ve kullanma başlıklı makaleyi de inceleyin.Kapsamındaki KVM'nin, Edge kullanıcı arayüzünde şifrelenip şifrelenmediğini kontrol etmek için:
- Edge kullanıcı arayüzünde, sol gezinme menüsünde Yönetici'yi tıklayın.
- Ortamlar'ı tıklayın.
- Anahtar Değer Eşlemeleri'ni tıklayın.
- Kullanmak istediğiniz Anahtar/Değer Eşlemesi'ni bulun.
- Değerler listesini genişletmek için adın solundaki oku tıklayın.
- Şifrelenmiş Anahtar/Değer Eşlemesi haritaları, Şifrelenmiş KVM'ler Hakkında bölümünde gösterildiği gibi kullanıcı arayüzünde yıldız işaretleriyle maskelenmiş değerleri (*****) gösterir.
Kuruluş, ortam veya apiproxy düzeyinde kapsamlandırılmış bir KVM'nin şifrelenmiş olup olmadığını kontrol etmek için Yönetim API'lerini kullanın. API'yi kullanırsanız değer için hem şifrelenmiş ayarı hem de yıldız işaretlerini gösteren örnek bir yanıt aşağıdaki gibi görünür:
{ "encrypted": true, "entry": [ { "name": "foo", "value": "*****" } ], "name": "encrypted" }
Anahtar/değer haritası şifrelenmiş bir KVM ise ve
<Get>
öğesininassignTo
özelliğinde kullanılan değişken adındaprivate
ön eki yoksa. Hatanın nedeni budur.Yukarıda gösterilen Anahtar/Değer Eşleme İşlemleri politikası örneğinde,
testEncrypted
anahtar/değer eşleme şifrelenir vemyvar
değişken adındaprivate
ön eki yoktur. Bu nedenle şu hata kodunu alıyorsunuz:steps.keyvaluemapoperations.SetVariableFailed
Çözünürlük
Kullanılan anahtar/değer eşleme şifrelenmişse değişken adının, Anahtar/Değer Eşleme İşlemleri politikasındaki <Get>
öğesinin assignTo
özelliğinde private.
ön ekine sahip olduğundan emin olun.
Yukarıda gösterilen örnek Anahtar/Değer Eşleme İşlemleri politikasını düzeltmek için assignTo
özelliğinin değerini private.myvar
olarak değiştirebilirsiniz:
<?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>