Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. info
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 atrybut mapIdentifier ma w zasadzie Operacje mapowania wartości klucza pusty ciąg znaków.
Diagnostyka
Sprawdź wszystkie zasady operacji na mapie wartości klucza w konkretnym serwerze proxy interfejsu API, w którym wystąpił błąd. Jeśli istnieje zasada operacji na mapie par klucz-wartość, w której atrybut
mapIdentifierjest ustawiony jako pusty ciąg znaków, to jest to przyczyną błędu.Na przykład te zasady operacji na mapie klucz-wartość mają 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łową mapę klucz-wartość w zasadach operacji na mapie klucz-wartość.
Aby poprawić przykładowe zasady pokazane powyżej, możesz przypisać mapIdentifier do istniejącego mapowania wartości klucza 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 klucz-wartość i ustawić ją jako zmienną, której nazwa nie ma prefiksu private.. Prefiks, który jest wymagany ze względów bezpieczeństwa podczas debugowania, ukrywa zaszyfrowane wartości przed sesjami śledzenia i debugowania proxy interfejsu API.
Diagnostyka
1.
Określ zasadę operacji na mapie klucz-wartość, w której wystąpił błąd, oraz nazwę zmiennej, której nie można ustawić. Oba te elementy znajdziesz w elemencie faultstring odpowiedzi na błąd. Na przykład w tym faultstring nazwa zasady to EncryptedKVM, a zmienna to myvar:
"faultstring":"Failed to set variable myvar in KeyValueMapStepDefinition EncryptedKVM"
1.
W pliku XML zasady Key Value Map Operations, która spowodowała błąd, sprawdź, czy nazwa zmiennej podana w atrybucie assignTo elementu <Get> jest zgodna z nazwą zmiennej podaną w ciągu błędu (krok 1 powyżej). Na przykład ta zasada operacji na mapie par klucz-wartość określa zmienną o nazwie myvar w elemencie <Get>, która pasuje do elementu 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 klucz-wartość określona w atrybucie
mapIdentifierjest zaszyfrowaną mapą KVM. Jeśli mapa wartości klucza jest zaszyfrowana w zakresie środowiska, możesz sprawdzić, czy jest zaszyfrowana w interfejsie Edge. W przeciwnym razie, jeśli został utworzony w zakresie organizacji lub serwera proxy interfejsu API, musisz użyć interfejsu API zarządzania Google Analytics, aby sprawdzić, czy jest zaszyfrowany. Zobacz też Zarządzanie przełącznikami KVM i korzystanie z nich.Aby sprawdzić, czy klucz KVM o zakresie środowiska jest zaszyfrowany w interfejsie Edge:
- W interfejsie Edge kliknij Administracja w menu nawigacyjnym po lewej stronie.
- Kliknij Environments (Środowiska).
- Kliknij Mapy wartości klucza.
- Znajdź mapę klucz-wartość, której chcesz użyć.
- Kliknij strzałkę po lewej stronie nazwy, aby rozwinąć listę wartości.
- Szyfrowane mapy klucz-wartość wyświetlają w interfejsie wartości zamaskowane gwiazdkami (*****), jak pokazano w sekcji Informacje o szyfrowanych mapach klucz-wartość.
Aby sprawdzić, czy zakres KVM na poziomie organizacji, środowiska lub serwera proxy interfejsu API jest zaszyfrowany, użyj interfejsów Management API. Jeśli korzystasz z interfejsu API, przykładowa odpowiedź, która pokazuje zarówno zaszyfrowane ustawienie, jak i gwiazdki zamiast wartości, wygląda tak:
{ "encrypted": true, "entry": [ { "name": "foo", "value": "*****" } ], "name": "encrypted" }Jeśli mapa wartości klucza jest zaszyfrowaną mapą KVM, a nazwa zmiennej użyta w atrybucie
assignToelementu<Get>nie ma prefiksuprivate. W takim przypadku to jest przyczyną błędu.W pokazanej powyżej przykładowej zasadzie dotyczącej operacji na mapie klucz-wartość mapa klucz-wartość
testEncryptedjest zaszyfrowana, a nazwa zmiennejmyvarnie ma prefiksuprivate. Dlatego otrzymujesz kod błędu:steps.keyvaluemapoperations.SetVariableFailed
Rozdzielczość
Jeśli używana mapa klucz-wartość jest zaszyfrowana, upewnij się, że nazwa zmiennej ma prefiks private. w atrybucie assignTo elementu <Get> w zasadach dotyczących operacji na mapie klucz-wartość.
Aby poprawić przykładową zasadę operacji mapy klucz-wartość pokazaną powyżej, możesz zmodyfikować 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>