Estás consultando la documentación de Apigee y Apigee Hybrid.
Consulta la documentación de
Apigee Edge.
UnsupportedOperationException
Código de error
java.lang.UnsupportedOperationException
Cuerpo de respuesta de error
{
"fault":{
"faultstring":"java.lang.UnsupportedOperationException",
"detail":{
"errorcode":"Internal Server Error"
}
}
}
Causa
Este error se produce si el atributo mapIdentifier
se define como una cadena vacía en la política Key Value Map Operations.
Diagnóstico
Examina todas las políticas de operaciones de mapa de valores clave del proxy de API específico en el que se ha producido el error. Si hay alguna política de operaciones de mapa de valores de clave en la que el atributo
mapIdentifier
se haya definido como una cadena vacía, esa es la causa del error.Por ejemplo, la siguiente política Key Value Map Operations 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>environment</Scope> </KeyValueMapOperations>
Resolución
Asegúrate de que el atributo mapIdentifier
esté definido en un mapa de clave-valor válido en la política Key Value Map Operations.
Para corregir la política de ejemplo que se muestra arriba, puede especificar el mapIdentifier
en un mapa de valores clave 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 de error
steps.keyvaluemapoperations.SetVariableFailed
Cuerpo de 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 se produce si intentas recuperar un valor de un mapa de valores de clave cifrado y asignarlo a una variable cuyo nombre no tenga el prefijo private.
. El prefijo, que es obligatorio por motivos de seguridad básicos durante la depuración, oculta los valores cifrados de las sesiones de depuración y de seguimiento del proxy de API.
Diagnóstico
1.
Identifica la política Key Value Map Operations en la que se ha producido el error y el nombre de la variable a la que no se puede asignar el valor. Puedes encontrar ambos elementos en el elemento faultstring
de la respuesta de error. Por ejemplo, en el siguiente 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 Key Value Map Operations fallida, comprueba que el nombre de la variable especificada en el atributo assignTo
del elemento <Get>
coincida con el nombre de la variable identificada en la cadena de error (paso 1 anterior). Por ejemplo, la siguiente política de operaciones de mapa de clave-valor especifica una variable llamada myvar
en el elemento <Get>
, que coincide con lo que hay en 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 un KVM cifrado.Para comprobar si un KVM está cifrado en la interfaz de usuario de Apigee, haz lo siguiente:
- En la interfaz de usuario de Apigee, haga clic en Administrar en el menú de navegación de la izquierda.
- Haz clic en Entornos.
- Haga clic en Mapas de clave-valor.
- Busca el mapa de clave-valor que quieras usar.
- Haga clic en la flecha situada a la izquierda del nombre para desplegar la lista de valores.
- Los mapas de pares clave-valor cifrados muestran valores enmascarados con asteriscos en la interfaz de usuario (*****) tal como se indica en el artículo Acerca de los mapas de pares clave-valor cifrados.
Si el mapa de valores de clave es un KVM cifrado 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 la política de operaciones de mapa de valores clave de ejemplo que se muestra arriba, el mapa de valores clave
testEncrypted
está cifrado y el nombre de la variablemyvar
no tiene el prefijoprivate
. Por lo tanto, recibes el código de error:steps.keyvaluemapoperations.SetVariableFailed
Resolución
Asegúrate de que el nombre de la variable tenga el prefijo private.
en el atributo assignTo
del elemento <Get>
de la política Key Value Map Operations si el mapa de valores clave que se usa está cifrado.
Para corregir la política Key Value Map Operations de ejemplo que se muestra arriba, puede modificar el valor del atributo assignTo
a 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>