Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin. bilgi
UnsupportedOperationException
Hata kodu
java.lang.UnsupportedOperationException
Hata yanıtı gövdesi
{
"fault":{
"faultstring":"java.lang.UnsupportedOperationException",
"detail":{
"errorcode":"Internal Server Error"
}
}
}
Neden
Bu hata, Anahtar Değer Haritası İşlemleri politikasında mapIdentifier özelliği boş bir dizeye ayarlanırsa oluşur.
Teşhis
Başarısızlığın meydana geldiği API proxy'sindeki tüm Key Value Map Operations politikalarını inceleyin.
mapIdentifierözelliğinin boş dize olarak ayarlandığı bir Key Value Map Operations politikası varsa hatanın nedeni budur.Örneğin, aşağıdaki Anahtar Değeri Haritası İşlemleri politikasında boş bir
mapIdentifiervar:<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
mapIdentifier özelliğinin, Anahtar/Değer Eşlemesi İşlemleri politikasında 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şlemesine UserLocationMap 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 değer almaya çalışırsanız ve değeri, adında private. öneki olmayan bir değişkene ayarlarsanız oluşur. Hata ayıklama sırasında temel güvenlik amacıyla gerekli olan önek, şifrelenmiş değerleri API proxy'si izleme ve hata ayıklama oturumlarından gizler.
Teşhis
1.
Hataya neden olan Key Value Map Operations politikasını ve değerin ayarlanamadığı değişkenin adını belirleyin. Bu öğelerin ikisini de hata yanıtının faultstring öğesinde bulabilirsiniz. Örneğin, aşağıdaki faultstring içinde politika adı EncryptedKVM, değişken ise myvar'dir:
"faultstring":"Failed to set variable myvar in KeyValueMapStepDefinition EncryptedKVM"
1.
Başarısız olan Key Value Map Operations politikası XML'sinde, <Get> öğesinin assignTo özelliğinde belirtilen değişkenin adının, hata dizesinde tanımlanan değişken adıyla (yukarıdaki 1. adım) eşleştiğini doğrulayın. Örneğin, aşağıdaki Anahtar Değer Haritası İşlemleri politikası, <Get> öğesinde myvar adlı bir değişken belirtir. Bu değişken, faultstring öğesindekiyle eşleşir:
<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 şifrelendiğini doğrulayabilirsiniz. Aksi takdirde, kuruluş veya apiproxy kapsamında oluşturulduysa şifrelenip şifrelenmediğini doğrulamak için Management API'yi kullanmanız gerekir. KVM'leri yönetme ve kullanma başlıklı makaleyi de inceleyin.Edge kullanıcı arayüzünde ortam kapsamlı bir Kernel Tabanlı Sanal Makine'nin şifrelenip şifrelenmediğini kontrol etmek için:
- Edge kullanıcı arayüzünde, sol gezinme menüsünden 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şlemesini bulun.
- Değer listesini genişletmek için adın solundaki oku tıklayın.
- Şifrelenmiş anahtar/değer eşlemeleri, Ş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ğerler (*****) gösterir.
Kuruluş, ortam veya apiproxy düzeyinde kapsamı belirlenmiş bir KVM'nin şifrelenip şifrelenmediğini kontrol etmek için Yönetim API'lerini kullanın. API'yi kullanıyorsanız hem şifrelenmiş ayarı hem de değer için yıldız işaretlerini gösteren örnek bir yanıt şu şekilde görünür:
{ "encrypted": true, "entry": [ { "name": "foo", "value": "*****" } ], "name": "encrypted" }Anahtar/değer eşlemesi şifrelenmiş bir KVM ise ve
<Get>öğesininassignToözelliğinde kullanılan değişken adındaprivateöneki yoksa. Bu durumda hatanın nedeni budur.Yukarıda gösterilen örnek Anahtar/Değer Çifti Haritası İşlemleri politikasında, anahtar/değer çifti haritası
testEncryptedşifrelenmiştir ve değişken adımyvar,privateönekine sahip değildir. Bu nedenle şu hata kodunu alırsınız:steps.keyvaluemapoperations.SetVariableFailed
Çözünürlük
Kullanılan anahtar-değer eşlemesi şifrelenmişse Key Value Map Operations (Anahtar-Değer Eşlemesi İşlemleri) politikasındaki <Get> öğesinin assignTo özelliğinde değişken adının private. önekine sahip olduğundan emin olun.
Yukarıda gösterilen örnek Anahtar/Değer Haritası İş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>