Solución de problemas de entorno de ejecución de operaciones de mapas de clave-valor

Estás consultando la documentación de Apigee Edge.
Consulta la documentación de Apigee X.
Información

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

  1. 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>
  1. Comprueba si el mapa de clave-valor especificado en el atributo mapIdentifier es una KVM encriptada. Si el KVM está encriptado en el alcance del entorno, puedes verificar que esté encriptado en la IU de Edge. De lo contrario, si se creó en el alcance de la organización o de apiproxy, debes usar la API de Management para verificar si está encriptado. Consulta también Cómo administrar y usar KVM.

    Para verificar si un KVM con permiso de entorno está encriptado en la IU de Edge, haz lo siguiente:

    1. En la IU de Edge, haz clic en Administrador en el menú de navegación de la izquierda.
    2. Haz clic en Entornos.
    3. Haga clic en Mapas clave-valor.
    4. Busca el mapa clave-valor que deseas usar.
    5. Haz clic en la flecha a la izquierda del nombre para expandir la lista de valores.
    6. 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 alcance a nivel de organización, entorno o apiproxy está encriptado, usa las APIs de Management. Si usas la API, una respuesta de ejemplo que muestra la configuración encriptada y los asteriscos para el valor se ve de la siguiente manera:

    {
      "encrypted": true,
      "entry": [
        {
          "name": "foo",
          "value": "*****"
        }
      ],
      "name": "encrypted"
    }
    
  2. 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 prefijo private, 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 variable myvar no tiene el prefijo private. Por lo tanto, recibirás este 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> 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>