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, mapIdentifier
özelliği Anahtar/Değer Eşleme İşlemleri politikasında boş bir dizeye ayarlanırsa ortaya çıkar.
Teşhis
Hatanın oluştuğu API Proxy'sinde bulunan tüm Anahtar/Değer Eşleme İş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 Anahtar/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
mapIdentifier
özelliğinin, Anahtar/Değer Eşleme İşlemleri politikasında geçerli bir anahtar/değer eşleşmesine ayarlandığından emin olun.
Yukarıda gösterilen örnek politikayı düzeltmek için mapIdentifier
politikasını mevcut bir anahtar/değer çiftiyle (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 bir değer almaya çalışır ve değeri, adında private.
öneki olmayan bir değişken olarak ayarlarsanız ortaya çıkar. Hata ayıklama sırasında temel güvenlik amacıyla gerekli olan önek, şifrelenmiş değerleri API Proxy İzleme ve hata ayıklama oturumlarından gizler.
Teşhis
1.
Hatanın oluştuğu Anahtar/Değer Eşlemesi İşlemleri politikasını ve değerin ayarlanamayacağı 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
politikasında politika adı EncryptedKVM
, değişken ise myvar
'dir:
"faultstring":"Failed to set variable myvar in KeyValueMapStepDefinition EncryptedKVM"
1.
Başarısız Anahtar/Değer Eşleme İşlemleri politikası XML'inde, <Get>
öğesinin assignTo
özelliğinde belirtilen değişken adının, hata dizesinde (yukarıdaki 1. adım) tanımlanan değişken adıyla eşleştiğini doğrulayın. Örneğin, aşağıdaki Anahtar/Değer Eşleme İşlemleri politikası, <Get>
öğesinde myvar
adlı ve faultstring
öğesinde bulunan 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şturulmuşsa şifreli olup olmadığını doğrulamak için Management API'yi kullanmanız gerekir. KVM'leri yönetme ve kullanma bölümünü de inceleyin.Ortam kapsamlı 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şlemesi'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 Haritaları, değerleri, Şifrelenmiş KVM'ler Hakkında bölümünde gösterildiği gibi kullanıcı arayüzünde yıldız işaretleriyle (*****) maskelenmiş olarak gösterir.
Kuruluş, ortam veya apiproxy düzeyinde kapsama sahip bir KVM'nin şifrelenip şifrelenmediğini kontrol etmek için Management 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 eşlemesi şifrelenmiş bir KVM'ye sahipse ve
<Get>
öğesininassignTo
özelliğinde kullanılan değişken adıprivate
önekine sahip değilse. Hatanın nedeni budur.Yukarıda gösterilen Anahtar/Değer Eşleme İşlemleri politikasında,
testEncrypted
anahtar/değer eşlemesi şifrelenmiştir vemyvar
değişken adıprivate
ön ekine sahip değildir. Bu durumda şu hata kodunu alırsınız:steps.keyvaluemapoperations.SetVariableFailed
Çözünürlük
Kullanılan anahtar/değer eşlemesi şifrelenmişse Anahtar/Değer Eşleme İşlemleri politikasındaki <Get>
öğesinin assignTo
özelliğinde değişken adının private.
ön ekine sahip olduğundan emin olun.
Yukarıda gösterilen 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>