Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee X.info
UnsupportedOperationException
Код ошибки
java.lang.UnsupportedOperationException
Тело ответа об ошибке
{
"fault":{
"faultstring":"java.lang.UnsupportedOperationException",
"detail":{
"errorcode":"Internal Server Error"
}
}
}
Причина
Эта ошибка возникает, если атрибут mapIdentifier в политике операций сопоставления ключей и значений установлен в пустую строку.
Диагноз
Проверьте все политики операций сопоставления ключей и значений в конкретном API-прокси, где произошла ошибка. Если в какой-либо политике операций сопоставления ключей и значений атрибут
mapIdentifierустановлен как пустая строка, то это и является причиной ошибки.Например, в следующей политике операций сопоставления ключей и значений значение
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>
Разрешение
Убедитесь, что атрибут mapIdentifier в политике операций с сопоставлением ключей и значений имеет допустимое значение.
Чтобы исправить приведенный выше пример политики, вы можете указать mapIdentifier , используя существующую карту ключ-значение 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
Код ошибки
steps.keyvaluemapoperations.SetVariableFailed
Тело ответа об ошибке
{
"fault":{
"faultstring":"Failed to set variable variable_name in KeyValueMapStepDefinition policy_name",
"detail":{
"errorcode":"steps.keyvaluemapoperations.SetVariableFailed"
}
}
}
Пример сообщения об ошибке
{
"fault":{
"faultstring":"Failed to set variable myvar in KeyValueMapStepDefinition EncryptedKVM",
"detail":{
"errorcode":"steps.keyvaluemapoperations.SetVariableFailed"
}
}
}
Причина
Эта ошибка возникает, если вы пытаетесь получить значение из зашифрованной карты ключ-значение и присвоить это значение переменной, имя которой не имеет префикса private. Префикс, необходимый для обеспечения базовой безопасности во время отладки, скрывает зашифрованные значения от сеансов трассировки и отладки API-прокси.
Диагноз
1. Определите политику операций сопоставления ключей и значений, в которой произошла ошибка, и имя переменной, значение которой не может быть установлено. Оба эти элемента можно найти в элементе faultstring ответа об ошибке. Например, в следующем faultstring имя политики — EncryptedKVM , а переменная — myvar :
"faultstring":"Failed to set variable myvar in KeyValueMapStepDefinition EncryptedKVM"
1. В XML-файле политики операций сопоставления ключей и значений, завершившейся ошибкой, убедитесь, что имя переменной, указанное в атрибуте assignTo элемента <Get> , совпадает с именем переменной, указанным в строке ошибки (шаг #1 выше). Например, следующая политика операций сопоставления ключей и значений указывает переменную с именем myvar в элементе <Get> , которая совпадает с именем в 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>
Проверьте, является ли указанная в атрибуте
mapIdentifierкарта ключ-значение зашифрованным KVM. Если KVM зашифрован на уровне среды, вы можете проверить это в пользовательском интерфейсе Edge. В противном случае, если он был создан на уровне организации или апипрокси, вам необходимо использовать API управления, чтобы проверить, зашифрован ли он. См. также раздел «Управление и использование KVM» .Чтобы проверить, зашифрован ли KVM-сервер с ограниченным доступом в рамках определенной среды, в пользовательском интерфейсе Edge:
- В пользовательском интерфейсе Edge нажмите «Администратор» в левом навигационном меню.
- Нажмите «Окружения» .
- Нажмите «Карты ключ-значение» .
- Найдите нужную вам карту «ключ-значение».
- Нажмите стрелку слева от имени, чтобы развернуть список значений.
- В зашифрованных картах ключ-значение значения отображаются в пользовательском интерфейсе (*****) в виде маскированных звездочек, как показано в разделе «О зашифрованных KVM» .
Чтобы проверить, зашифрован ли KVM, работающий на уровне организации, среды или API-прокси, используйте API управления . При использовании API пример ответа, отображающий как параметр шифрования, так и звездочки вместо значения, будет выглядеть следующим образом:
{ "encrypted": true, "entry": [ { "name": "foo", "value": "*****" } ], "name": "encrypted" }Если карта ключ-значение представляет собой зашифрованный KVM, и имя переменной, используемое в атрибуте
assignToэлемента<Get>, не имеет префиксаprivate, то это и является причиной ошибки.В приведенном выше примере политики операций с сопоставлением ключей и значений, сопоставление ключей и значений
testEncryptedзашифровано, а имя переменнойmyvarне имеет префиксаprivate. Поэтому вы получаете код ошибки:steps.keyvaluemapoperations.SetVariableFailed
Разрешение
Убедитесь, что имя переменной имеет префикс private. в атрибуте assignTo элемента <Get> в политике операций с сопоставлением ключей и значений, если используемое сопоставление ключей и значений зашифровано.
Чтобы исправить приведенную выше политику операций сопоставления ключей и значений, вы можете изменить значение атрибута 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>