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

Estás viendo 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 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>environment</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>environment</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.

    Para verificar si una KVM está encriptada en la IU de Apigee, sigue estos pasos:

    1. En la IU de Apigee, 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 los KVM encriptados.
  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
    

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>