Solución de problemas de errores de tiempo de ejecución de operaciones de mapas de clave-valor

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

  1. 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>
  1. 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:

    1. En la interfaz de usuario de Apigee, haga clic en Administrar en el menú de navegación de la izquierda.
    2. Haz clic en Entornos.
    3. Haga clic en Mapas de clave-valor.
    4. Busca el mapa de clave-valor que quieras usar.
    5. Haga clic en la flecha situada a la izquierda del nombre para desplegar la lista de valores.
    6. 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.
  2. 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 prefijo private. 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 variable myvar no tiene el prefijo private. 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>