Przeglądasz dokumentację Apigee Edge.
Przejdź do
Dokumentacja Apigee X. informacje.
UnsupportedOperationException
Kod błędu
java.lang.UnsupportedOperationException
Treść odpowiedzi na błąd
{
"fault":{
"faultstring":"java.lang.UnsupportedOperationException",
"detail":{
"errorcode":"Internal Server Error"
}
}
}
Przyczyna
Ten błąd występuje, jeśli w zasadzie operacji mapy klucz-wartość atrybut mapIdentifier 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 jakakolwiek zasada operacji mapy klucz-wartość, w której atrybut
mapIdentifierma ustawiony pusty ciąg tekstowy, jest to przyczyna błędu.Na przykład w tej zasadzie operacji mapy klucz-wartość brakuje pustego pola
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łową mapę par klucz-wartość w zasadach operacji mapy klucz-wartość.
Aby poprawić przykładową zasadę widoczną powyżej, możesz określić mapIdentifier na istniejącą mapę pary 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 na błąd
{
"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 wartości klucza
i ustaw wartość zmiennej, której nazwa nie ma prefiksu private..
, który jest wymagany ze względu na podstawowe bezpieczeństwo podczas debugowania, ukrywa
zaszyfrowanych wartości ze śledzenia serwera proxy interfejsów API i sesji debugowania.
Diagnostyka
1.
Wskaż zasadę operacji mapy klucz-wartość, w której wystąpił błąd, oraz nazwę zmiennej, której wartości nie można ustawić. Oba te elementy znajdziesz w elemencie faultstring odpowiedzi na błąd. Na przykład w tym tagu faultstring nazwa zasady to EncryptedKVM, a zmiennej to myvar:
"faultstring":"Failed to set variable myvar in KeyValueMapStepDefinition EncryptedKVM"
1.
W pliku XML reguły operacji mapowania kluczy wartości, która zakończyła się niepowodzeniem, sprawdź, czy nazwa zmiennej określona w atrybucie assignTo elementu <Get> jest zgodna z nazwą zmiennej wskazaną w ciągu błędów (krok 1 powyżej). Na przykład ta zasada operacji mapowania par klucz-wartość określa zmienną o nazwie myvar w elemencie <Get>, która pasuje do zawartości 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 wartości klucza określona w atrybucie
mapIdentifierjest zaszyfrowaną maszyną wirtualną. Jeśli maszyna wirtualna jest szyfrowana w zakresie środowiska, możesz sprawdzić, czy jest szyfrowana w interfejsie Edge. W przeciwnym razie, jeśli został utworzony w zakresie organizacji lub apiproxy, musisz podać za pomocą interfejsu Management API w celu sprawdzenia, czy jest on zaszyfrowany. Zobacz też Zarządzanie hostami KVM i korzystanie z nich.Aby sprawdzić, czy maszyna wirtualna o zakresie ograniczonym do środowiska jest szyfrowana w interfejsie Edge:
- W interfejsie Edge kliknij Admin (Administrator) w menu nawigacyjnym po lewej stronie.
- Kliknij Środowiska.
- Kliknij Mapy par klucz-wartość.
- Znajdź mapę klucz-wartość, której chcesz użyć.
- Kliknij strzałkę po lewej stronie nazwy, aby rozwinąć listę wartości.
- Mapy zaszyfrowanych wartości kluczy wyświetlają wartości zamaskowane gwiazdkami w interfejsie (*****), jak pokazano w sekcji Informacje o zaszyfrowanych obiektach KVM.
Aby sprawdzić, czy maszyna KVM określona na poziomie organizacji, środowiska lub apiproxy jest szyfrowana, użyj Interfejsy API do zarządzania. Jeśli korzystasz z interfejsu API, przykładowa odpowiedź, która zawiera zarówno zaszyfrowane ustawienie, jak i gwiazdki z wartością, wygląda tak:
{ "encrypted": true, "entry": [ { "name": "foo", "value": "*****" } ], "name": "encrypted" }Jeśli mapa klucz-wartość jest zaszyfrowaną mapą klucz-wartość, a nazwa zmiennej używana w atrybucie
assignToelementu<Get>nie ma prefiksuprivate. To właśnie jest przyczyną błędu.W przykładowej zasadzie operacji mapy klucz-wartość widocznej powyżej mapa pary klucz-wartość
testEncryptedjest zaszyfrowana, a nazwa zmiennejmyvarnie ma prefiksuprivate. Dlatego otrzymujesz kod błędu:steps.keyvaluemapoperations.SetVariableFailed
Rozdzielczość
Jeśli używana mapa wartości klucza jest zaszyfrowana, sprawdź, czy nazwa zmiennej ma prefiks private. w atrybucie assignTo elementu <Get> w zasadach operacji mapy wartości klucza.
Aby poprawić pokazane powyżej przykładowe zasady dotyczące map klucz-wartość, możesz zmodyfikować
wartość atrybutu assignTo–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>