您正在查看 Apigee Edge 文档。
前往 Apigee X 文档。信息
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 中,验证 <Get>
元素的 assignTo
特性中指定的变量名称与故障字符串中指定的变量名称(上述第 1 步)匹配。例如,以下键值对映射操作政策会在 <Get>
元素中指定一个名为 myvar
的变量,该变量与 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 界面中验证它是否已加密。否则,如果它是在组织级别或 apiproxy 级别创建的,您需要使用 Management API 来验证它是否已加密。另请参阅管理和使用 KVM。如需在 Edge 界面中检查环境级范围的 KVM 是否已加密,请执行以下操作:
- 在 Edge 界面中,点击左侧导航菜单中的管理。
- 点击环境。
- 点击键值对映射。
- 找到要使用的键值对映射。
- 点击名称左侧的箭头,展开值列表。
- 已加密的键值对映射会在界面中显示使用星号 (***) 遮蔽的值,如关于加密的 KVM 中所示。
如需检查范围限定在组织、环境或 apiproxy 级别的 KVM 是否已加密,请使用管理 API。如果您使用 API,则同时显示加密设置和值的星号的示例响应如下所示:
{ "encrypted": true, "entry": [ { "name": "foo", "value": "*****" } ], "name": "encrypted" }
如果键值对映射是加密的 KVM,
<Get>
元素的assignTo
特性中使用的变量名称不包含前缀private
。那么就会导致错误。在上面显示的键值对映射操作政策中,键值对映射
testEncrypted
已加密,变量名称myvar
没有前缀private
。因此,您会收到错误代码:steps.keyvaluemapoperations.SetVariableFailed
解决方法
如果使用的键值对映射已加密,确保变量名称在键值对映射操作政策 <Get>
元素的 assignTo
属性中具有前缀 private.
。
如需更正上面显示的键值对映射操作政策示例,您可以将 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>