Você está visualizando a documentação do Apigee Edge.
Acesse a
documentação da
Apigee X. info
UnsupportedOperationException
Código do erro
java.lang.UnsupportedOperationException
Corpo da resposta de erro
{
"fault":{
"faultstring":"java.lang.UnsupportedOperationException",
"detail":{
"errorcode":"Internal Server Error"
}
}
}
Causa
Esse erro ocorrerá se o atributo mapIdentifier
estiver definido como string vazia na política de operações do mapa de valor de chave.
Diagnóstico
Examine todas as políticas de operações de mapas de chave-valor no proxy de API específico em que a falha ocorreu. Se houver alguma política de operações de mapa de chave-valor em que o atributo
mapIdentifier
esteja definido como uma string vazia, essa é a causa do erro.Por exemplo, a seguinte política de operações de mapa de chave-valor tem um
mapIdentifier
vazio:<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>
Resolução
Verifique se o atributo mapIdentifier
está definido como um mapa de chave-valor válido na política de operações do Mapa de chave-valor.
Para corrigir a política de exemplo mostrada acima, especifique mapIdentifier
para um mapa de chave-valor atual 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
Código do erro
steps.keyvaluemapoperations.SetVariableFailed
Corpo da resposta de erro
{ "fault":{ "faultstring":"Failed to set variable variable_name in KeyValueMapStepDefinition policy_name", "detail":{ "errorcode":"steps.keyvaluemapoperations.SetVariableFailed" } } }
Exemplo de mensagem de erro
{
"fault":{
"faultstring":"Failed to set variable myvar in KeyValueMapStepDefinition EncryptedKVM",
"detail":{
"errorcode":"steps.keyvaluemapoperations.SetVariableFailed"
}
}
}
Causa
Este erro ocorre se você tentar recuperar um valor de um mapa de valores de chave criptografado e definir
o valor como uma variável que não tenha o prefixo private.
. O
prefixo, que é necessário para fins básicos de segurança durante a depuração, oculta os
valores criptografados das sessões de trace e depuração do proxy de API.
Diagnóstico
1.
Identifique a política de operações de mapeamento de valor-chave em que o erro ocorreu e o nome da variável para a qual o valor não pode ser definido. É possível encontrar os dois itens no elemento faultstring
da resposta de erro. Por exemplo, no faultstring
a seguir, o nome da política é EncryptedKVM
e a variável é myvar
:
"faultstring":"Failed to set variable myvar in KeyValueMapStepDefinition EncryptedKVM"
1.
Na política XML de operações do mapa de chave-valor, confirme se o nome da variável especificada no atributo assignTo
do elemento <Get>
corresponde ao nome da variável identificado na string com falha (etapa 1 acima). Por exemplo, a seguinte política de operações de mapa de chave-valor especifica uma variável chamada myvar
no elemento <Get>
, que corresponde ao que está em 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>
Verifique se o mapa de chave-valor especificado no atributo
mapIdentifier
é uma KVM criptografada. Se a KVM estiver criptografada no escopo do ambiente, será possível verificar se ela está criptografada na interface do Edge. Caso contrário, se ela foi criada no escopo da organização ou do apiproxy, use a API Management para verificar se ela está criptografada. Consulte também Como gerenciar e usar KVMs.Para verificar se uma KVM com escopo de ambiente está criptografada na interface do Edge:
- Na IU do Edge, clique em Admin no menu de navegação à esquerda.
- Clique em Ambientes.
- Clique em Mapas de chave-valor.
- Encontre o Mapa de chave-valor que você quer usar.
- Clique na seta à esquerda do nome para expandir a lista de valores.
- Os valores de exibição de chave-valor criptografados mascarados com asteriscos na IU (*****) são mostrados em Sobre as KVMs criptografadas.
Para verificar se uma KVM com escopo no nível da organização, do ambiente ou do apiproxy é criptografada, use as APIs de gerenciamento. Se você usar a API, uma resposta de exemplo que mostra a configuração criptografada e os asteriscos do valor será assim:
{ "encrypted": true, "entry": [ { "name": "foo", "value": "*****" } ], "name": "encrypted" }
Se o mapa de chave-valor for uma KVM criptografada e o nome da variável usado no atributo
assignTo
do elemento<Get>
não tiver o prefixoprivate
essa será a causa do erro.No exemplo de política de operações de mapa de chave-valor mostrado acima, o mapa de chave-valor
testEncrypted
é criptografado e o nome da variávelmyvar
não tem o prefixoprivate
. Portanto, você receberá o código do erro:steps.keyvaluemapoperations.SetVariableFailed
Resolução
Certifique-se de que o nome da variável tenha o prefixo private.
no atributo assignTo
do elemento <Get>
na política de operações de mapeamento de valor-chave se o mapa de chave-valor
usado for criptografado.
Para corrigir o exemplo de política de operações de mapeamento de valor-chave mostrado acima, você pode modificar
o valor do atributo assignTo
para 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>