Solución de errores durante la implementación de la política de asignación de mensajes

Estás viendo la documentación de Apigee y Apigee Hybrid.
Consulta la documentación de Apigee Edge.

InvalidIndex

Mensaje de error

Si la implementación del proxy de API a través de la IU de Apigee o la API falla, mostrará con este mensaje de error:

Error in deployment for environment [environment]
The revision is deployed, but traffic cannot flow.
AssignMessage[policy_name]: index must be greater than zero in [attribute].[index]

Ejemplo de mensaje de error

Error in deployment for environment test.
The revision is deployed, but traffic cannot flow.
AssignMessage[GenerateStudentsRequest]: index must be greater than zero in id.0

Captura de pantalla del ejemplo.

Error en la implementación de la prueba del entorno.

Causa

Si el índice especificado en los elementos <Copy> o <Remove> de la política de asignación de mensajes es 0 o un número negativo, fallará la implementación del proxy de API.

Por ejemplo, si pasas varios parámetros de búsqueda con el mismo nombre, puedes acceder a ellos como variables de flujo indexadas. Supongamos que deseas pasar los ID de 3 alumnos como parámetros de búsqueda. Puedes hacerlo de la siguiente manera:

https://$EXTERNAL_IP/$PROXY_BASEPATH?school_name=NPS&id=1&id=2&id=3

Luego, supongamos que intentas acceder a estos parámetros de búsqueda cuyos números de índice son 0, 1 y 2 en la política de asignación de mensajes de la siguiente manera:

id.0
id.1 and
id.2

En este caso, la implementación del proxy falla porque el índice debe comenzar con 1. Esto significa que puedes acceder al primer parámetro de búsqueda "id=1" como "id.1". Para acceder al segundo parámetro de búsqueda "id=2", debes usar el índice 2, es decir, "id.2". De manera similar, para acceder al tercer parámetro de consulta "id=3", puedes usar "id.3".

Para obtener más información, consulta la documentación del documento de copiado de la política de AssignMessage.

Diagnóstico

  1. Identifica la política de asignación de mensajes en la que ocurrió el error, el nombre del atributo y el índice que no es válido. Puedes encontrar todos estos elementos en el mensaje de error. Por ejemplo, en el siguiente error, el nombre de la política es GeneratingGeocodingRequest, el nombre del atributo es id y el índice es 0:

    AssignMessage[GenerateStudentsRequest]: index must be greater than zero in id.0
    
  2. Verifica que el nombre del atributo y el índice que se usaron en el archivo XML defectuoso de la política de asignación de mensajes coincidan con el nombre del atributo y el índice identificados en el mensaje de error (el paso 1 anterior). Por ejemplo, la siguiente política especifica el atributo id y el índice como 0, que coincide con el contenido del mensaje de error:

    <AssignMessage name="GenerateStudentsRequest">
      <AssignTo createNew="true" type="request">StudentsInfoRequest</AssignTo>
      <Copy source="request">
          <QueryParams>
              <QueryParam name="school_name"/>
              <QueryParam name="id.0"/>
              <QueryParam name="id.1"/>
              <QueryParam name="id.2"/>
          </QueryParams>
      </Copy>
    </AssignMessage>
    
  3. Si el índice especificado es 0 o un número negativo, esa es la causa del error.

    En la política de asignación de mensajes de ejemplo que se mostró antes, intentas acceder al primer valor del parámetro de consulta "id" mediante el índice 0. Por lo tanto, la implementación del proxy de API falla con el siguiente error:

    AssignMessage[GenerateStudentsRequest]: index must be greater than zero in id.0
    

Solución

En la asignación de mensajes, cuando accedes a varios encabezados, parámetros de búsqueda o algún otro parámetro que comparten el mismo nombre, asegúrate de que el índice siempre sea superior a cero. Por ejemplo:

<AssignMessage name="GenerateStudentsRequest">
    <AssignTo createNew="true" type="request">StudentsInfoRequest</AssignTo>
    <Copy source="request">
        <QueryParams>
            <QueryParam name="school_name"/>
            <QueryParam name="id.1"/>
            <QueryParam name="id.2"/>
            <QueryParam name="id.3"/>
        </QueryParams>
    </Copy>
</AssignMessage>

InvalidVariableName

Mensaje de error

Si la implementación del proxy de API a través de la IU de Apigee o la API falla, mostrará con este mensaje de error:

Error Saving Revision [revision_number]
The revision is deployed, but traffic cannot flow. AssignMessage schema validation failed: invalid variable name - null - in assign variable.

Ejemplo de mensaje de error

Error Saving Revision 3
AssignMessage schema validation failed: invalid variable name - null - in assign variable.

Captura de pantalla del ejemplo.

Se produjo un error al guardar la revisión 3.

Causa

Si el elemento secundario <Name> está vacío o no se especificó en el elemento <AssignVariable>, la implementación del proxy de API fallará porque no hay un nombre de variable válido al que asignarle un valor. Se requiere un nombre de variable válido.

Diagnóstico

Examina todas las políticas de asignación de mensajes en el proxy de API específico en el que se produjo el error. Si hay una política de asignación de mensajes en la que el elemento secundario <Name> está vacío o no se especificó en el elemento <AssignVariable>, esa es la causa del error.

Ejemplo 1: La siguiente política de asignación de mensajes no tiene un elemento <Name> definido.

<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1">
    <DisplayName>Assign Message-1</DisplayName>
    <Properties/>
    <AssignVariable>
        <Value>abcd1234</Value>
    </AssignVariable>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo>
</AssignMessage>

Ejemplo 2: La siguiente política de asignación de mensajes tiene un elemento <Name> vacío.

<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1">
    <DisplayName>Assign Message-1</DisplayName>
    <Properties/>
    <AssignVariable>
        <Name></Name>
        <Value>abcd1234</Value>
    </AssignVariable>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo>
</AssignMessage>

Solución

Asegúrate de que el elemento secundario <Name> siempre se especifique y que no esté vacío en el elemento <AssignVariable> de la política de asignación de mensajes. Por ejemplo:

<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1">
    <DisplayName>Assign Message-1</DisplayName>
    <Properties/>
        <AssignVariable>
        <Name>appSecret</Name>
        <Value>abcd1234</Value>
    </AssignVariable>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo>
</AssignMessage>