Esta é a documentação da Apigee e da Apigee híbrida.
Confira a documentação da Apigee Edge.
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>environment</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>environment</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.Para verificar se uma KVM está criptografada na IU da Apigee:
- Na IU da Apigee, 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 mapas de chave-valor criptografados mostram valores mascarados com asteriscos na IU (*****), conforme mostrado em Sobre as KVMs criptografadas.
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>