Вы просматриваете документацию Apigee Edge .
Перейдите к документации Apigee X. информация
УнподдерживаемоеОператионИсключение
Код ошибки
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, пример ответа, в котором показаны как зашифрованные настройки, так и звездочки для значений, выглядит следующим образом:
{ "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>