Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. Informacje
UnsupportedOperationException
Kod błędu
java.lang.UnsupportedOperationException
Treść odpowiedzi o błędzie
{
"fault":{
"faultstring":"java.lang.UnsupportedOperationException",
"detail":{
"errorcode":"Internal Server Error"
}
}
}
Przyczyna
Ten błąd występuje, jeśli atrybut mapIdentifier
w zasadzie operacji mapowania par klucz-wartość jest ustawiony na pusty ciąg znaków.
Diagnostyka
Sprawdź wszystkie zasady operacji mapowania par klucz-wartość na konkretnym serwerze proxy interfejsu API, na którym wystąpił błąd. Jeśli istnieje jakaś zasada operacji mapowania par klucz-wartość, w której atrybut
mapIdentifier
jest ustawiony jako pusty ciąg, to jest przyczyną błędu.Na przykład ta zasada operacji mapowania par klucz-wartość ma pusty element
mapIdentifier
:<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>
Rozdzielczość
Sprawdź, czy atrybut mapIdentifier
jest ustawiony na prawidłowe mapowanie par klucz-wartość w zasadach operacji mapowania par klucz-wartość.
Aby poprawić przykładową zasadę przedstawioną powyżej, możesz określić mapIdentifier
w dotychczasowej mapie par klucz-wartość 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
Kod błędu
steps.keyvaluemapoperations.SetVariableFailed
Treść odpowiedzi o błędzie
{ "fault":{ "faultstring":"Failed to set variable variable_name in KeyValueMapStepDefinition policy_name", "detail":{ "errorcode":"steps.keyvaluemapoperations.SetVariableFailed" } } }
Przykładowy komunikat o błędzie
{
"fault":{
"faultstring":"Failed to set variable myvar in KeyValueMapStepDefinition EncryptedKVM",
"detail":{
"errorcode":"steps.keyvaluemapoperations.SetVariableFailed"
}
}
}
Przyczyna
Ten błąd występuje, gdy próbujesz pobrać wartość z zaszyfrowanej mapy par kluczy i ustawić wartość na zmienną, której nazwa nie ma prefiksu private.
. Prefiks jest wymagany do celów związanych z bezpieczeństwem podczas debugowania, więc ukrywa zaszyfrowane wartości w sesjach śledzenia serwera proxy interfejsu API i w sesjach debugowania.
Diagnostyka
1.
Wskaż zasadę operacji na mapie według par klucz-wartość, w której wystąpił błąd, oraz nazwę zmiennej, dla której nie można ustawić tej wartości. Oba te elementy znajdziesz w elemencie faultstring
odpowiedzi o błędzie. Na przykład w tagu faultstring
nazwa zasady to EncryptedKVM
, a zmienna to myvar
:
"faultstring":"Failed to set variable myvar in KeyValueMapStepDefinition EncryptedKVM"
1.
W pliku XML zasad dotyczących operacji mapowania par klucz-wartość sprawdź, czy nazwa zmiennej określonej w atrybucie assignTo
elementu <Get>
odpowiada nazwie zmiennej określonej w ciągu błędu (krok 1 powyżej). Na przykład ta zasada operacji mapowania par klucz-wartość określa w elemencie <Get>
zmienną o nazwie myvar
, która odpowiada zawartości w elemencie 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>
Sprawdź, czy mapa par klucz-wartość określona w atrybucie
mapIdentifier
jest zaszyfrowanym KVM. Jeśli kluczowa maszyna wirtualna jest szyfrowana w zakresie środowiska, możesz sprawdzić, czy jest szyfrowana w interfejsie użytkownika Edge. W przeciwnym razie, jeśli zasób został utworzony w zakresie organizacji lub apiproxy, musisz użyć interfejsu Management API, aby sprawdzić, czy jest szyfrowany. Zobacz też artykuł Zarządzanie maszynami wirtualnymi i korzystanie z nich.Aby sprawdzić, czy w interfejsie użytkownika Edge jest szyfrowana maszyna wirtualna w zakresie środowiska:
- W interfejsie użytkownika Edge kliknij Admin (Administrator) w menu nawigacyjnym po lewej stronie.
- Kliknij Środowiska.
- Kliknij Mapy klucz-wartość.
- Odszukaj mapę klucz-wartość, której chcesz użyć.
- Kliknij strzałkę po lewej stronie nazwy, aby rozwinąć listę wartości.
- Mapy zaszyfrowanych par klucz-wartość wyświetlają wartości z gwiazdkami w interfejsie użytkownika (*****), tak jak to pokazano w artykule Informacje o szyfrowanych KVM.
Aby sprawdzić, czy kluczowa maszyna wirtualna na poziomie organizacji, środowiska lub apiproxy jest szyfrowana, skorzystaj z interfejsów API do zarządzania. Jeśli używasz interfejsu API, przykładowa odpowiedź, która pokazuje zarówno zaszyfrowane ustawienie, jak i gwiazdki dla wartości, będzie wyglądać tak:
{ "encrypted": true, "entry": [ { "name": "foo", "value": "*****" } ], "name": "encrypted" }
Jeśli mapa par klucz-wartość jest zaszyfrowanym KVM, a nazwa zmiennej użyta w atrybucie
assignTo
elementu<Get>
nie ma prefiksuprivate
. To jest przyczyna błędu.W przedstawionej powyżej przykładowej zasadzie operacji mapowania par klucz-wartość mapa par klucz-wartość
testEncrypted
jest zaszyfrowana, a nazwa zmiennejmyvar
nie ma prefiksuprivate
. W związku z tym otrzymujesz kod błędu:steps.keyvaluemapoperations.SetVariableFailed
Rozdzielczość
Jeśli używana mapa par klucz jest zaszyfrowana, nazwa zmiennej musi mieć prefiks private.
w atrybucie assignTo
elementu <Get>
w zasadach operacji na mapie par klucz-wartość.
Aby poprawić przykładową zasadę operacji mapowania par klucz-wartość, którą pokazaliśmy powyżej, możesz zmienić wartość atrybutu assignTo
na 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>