Estás viendo la documentación de Apigee Edge.
Ve a la
documentación de Apigee X. info
UnsupportedOperationException
Código de error
java.lang.UnsupportedOperationException
Cuerpo de la respuesta del error
{
"fault":{
"faultstring":"java.lang.UnsupportedOperationException",
"detail":{
"errorcode":"Internal Server Error"
}
}
}
Causa
Este error se produce si el atributo mapIdentifier
se configuró en una string vacía en la política de operaciones de mapas de clave-valor.
Diagnóstico
Examina todas las políticas de operaciones de mapas de clave-valor en el proxy de API específico en el que se produjo el error. Si existe una política de operaciones de mapas de clave-valor en la que el atributo
mapIdentifier
se establece como una string vacía, esa es la causa del error.Por ejemplo, la siguiente política de operaciones de mapas de clave-valor tiene un
mapIdentifier
vacío:<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>
Solución
Asegúrate de que el atributo mapIdentifier
esté configurado como un mapa de clave-valor válido en la política de operaciones de mapa de clave-valor.
Para corregir la política de ejemplo que aparece arriba, puedes especificar el mapIdentifier
para un mapa de clave-valor existente 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 de error
steps.keyvaluemapoperations.SetVariableFailed
Cuerpo de la respuesta de error
{ "fault":{ "faultstring":"Failed to set variable variable_name in KeyValueMapStepDefinition policy_name", "detail":{ "errorcode":"steps.keyvaluemapoperations.SetVariableFailed" } } }
Ejemplo de mensaje de error
{
"fault":{
"faultstring":"Failed to set variable myvar in KeyValueMapStepDefinition EncryptedKVM",
"detail":{
"errorcode":"steps.keyvaluemapoperations.SetVariableFailed"
}
}
}
Causa
Este error ocurre si intentas recuperar un valor de un mapa de clave-valor encriptado y establecer el valor en una variable cuyo nombre no tiene el prefijo private.
. El prefijo, que es necesario para fines de seguridad básicos durante la depuración, oculta los valores encriptados de las sesiones de depuración y de seguimiento del proxy de API.
Diagnóstico
1.
Identifique la política de operaciones de mapa de clave-valor en la que se produjo el error y el nombre de la variable que no se puede usar para establecer el valor. Puedes encontrar ambos elementos en el elemento faultstring
de la respuesta de error. Por ejemplo, en el siguiente valor faultstring
, el nombre de la política es EncryptedKVM
y la variable es myvar
:
"faultstring":"Failed to set variable myvar in KeyValueMapStepDefinition EncryptedKVM"
1.
En el XML de la política de operaciones de mapas de clave-valor con errores, verifica que el nombre de la variable especificada en el atributo assignTo
del elemento <Get>
coincida con el nombre de la variable identificado en la string de falla (paso anterior n° 1). Por ejemplo, la siguiente política de operaciones de mapas de clave-valor especifica una variable llamada myvar
en el elemento <Get>
, que coincide con el contenido de 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>
Comprueba si el mapa de clave-valor especificado en el atributo
mapIdentifier
es una KVM encriptada. Si la KVM está encriptada en el permiso del entorno, puedes verificar que esté encriptada en la IU de Edge. De lo contrario, si se creó en el nivel de la organización o del apiproxy, debes usar la API de Management para verificar si está encriptado. Consulta también Administra y usa KVM.Para verificar si una KVM centrada en el entorno está encriptada en la IU de Edge, sigue estos pasos:
- En la IU de Edge, haz clic en Administrador en el menú de navegación de la izquierda.
- Haz clic en Entornos.
- Haga clic en Mapas clave-valor.
- Busca el mapa clave-valor que deseas usar.
- Haz clic en la flecha a la izquierda del nombre para expandir la lista de valores.
- Los mapas de clave-valor encriptados muestran valores enmascarados con asteriscos en la IU (*****) como se muestra en Acerca de las KVM encriptadas.
Para verificar si un KVM con permiso a nivel de la organización, el entorno o el proxy de API está encriptado, usa las APIs de Management. Si usas la API, una respuesta de muestra que muestra tanto la configuración encriptada como los asteriscos para el valor se ve de la siguiente manera:
{ "encrypted": true, "entry": [ { "name": "foo", "value": "*****" } ], "name": "encrypted" }
Si el mapa de clave-valor es una KVM encriptada y el nombre de la variable que se usa en el atributo
assignTo
del elemento<Get>
no tiene el prefijoprivate
, entonces esa es la causa del error.En el ejemplo de la política de operaciones de mapas de clave-valor que muestra arriba, el mapa de clave-valor
testEncrypted
está encriptado y el nombre de la variablemyvar
no tiene el prefijoprivate
. Por lo tanto, recibirás este código de error:steps.keyvaluemapoperations.SetVariableFailed
Solución
Asegúrate de que el nombre de la variable tenga el prefijo private.
en el atributo assignTo
del elemento <Get>
en la política de operaciones del mapa de clave-valor, si está encriptado.
Para corregir el ejemplo de la política de operaciones de mapas de clave-valor que se muestra arriba, puedes modificar el valor del atributo assignTo
como 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>