Résoudre les erreurs de déploiement de la règle AssignMessage

Vous consultez la documentation d'Apigee et d'Apigee hybrid.
Consultez la documentation d'Apigee Edge.

InvalidIndex

Message d'erreur

Le déploiement du proxy d'API par le biais de l'interface utilisateur ou l'API Apigee échoue avec le message d'erreur suivant :

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]

Exemple de message d'erreur

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

Exemple de capture d'écran

Erreur lors du déploiement pour le test de l'environnement.

Cause

Si l'index spécifié dans les éléments <Copy> et/ou <Remove> de la règle Assign Message est 0 ou un nombre négatif, le déploiement du proxy d'API échoue.

Par exemple, si vous transmettez plusieurs paramètres de requête portant le même nom, vous pouvez y accéder en tant que variables de flux indexées. Si vous souhaitez transmettre les ID de trois élèves en tant que paramètres de requête, vous pouvez le faire comme suit :

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

Supposons ensuite que vous essayiez d'accéder à ces paramètres de requête avec les numéros d'index 0, 1 et 2 dans la règle AssignMessage comme suit :

id.0
id.1 and
id.2

Dans ce cas, le déploiement du proxy échoue, car l'index doit commencer par 1. Cela signifie que vous pouvez accéder au premier paramètre de requête "id=1" en tant que "id.1". Pour accéder au deuxième paramètre de requête "id=2", vous devez utiliser l'index 2 i.e, "id.2". De même, pour accéder au troisième paramètre de requête "id=3", vous pouvez utiliser "id.3".

Pour en savoir plus, consultez la documentation de l'élément Copy de la règle AssignMessage.

Diagnostic

  1. Identifiez la règle AssignMessage où l'erreur s'est produite, le nom de l'attribut et l'index non valide. Vous trouverez tous ces éléments dans le message d'erreur. Par exemple, dans l'erreur suivante, le nom de la règle est GeneratingGeocodingRequest, le nom de l'attribut est id et l'index est 0 :

    AssignMessage[GenerateStudentsRequest]: index must be greater than zero in id.0
    
  2. Vérifiez que le nom de l'attribut et l'index utilisés dans la fichier XML de la règle AssignMessage défaillante correspondent au nom de l'attribut et à l'index identifiés dans le message d'erreur (étape 1 ci-dessus). Par exemple, la règle suivante spécifie l'attribut id et l'index en tant que 0, qui correspond au contenu du message d'erreur :

    <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 la valeur de l'index est de 0 ou est négatif, il s'agit de la cause de l'erreur.

    Dans l'exemple de règle AssigneMessage présenté ci-dessus, vous essayez d'accéder à la première valeur du paramètre de requête "id" à l'aide de l'index 0. Par conséquent, le déploiement du proxy d'API échoue avec l'erreur suivante :

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

Solution

Dans la règle AssignMessage, lorsque vous accédez à plusieurs en-têtes, paramètres de requête ou autres paramètres partageant le même nom, assurez-vous que l'index est toujours supérieur à zéro. Exemple :

<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

Message d'erreur

Le déploiement du proxy d'API par le biais de l'interface utilisateur ou l'API Apigee échoue avec le message d'erreur suivant :

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

Exemple de message d'erreur

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

Exemple de capture d'écran

Erreur lors de l&#39;enregistrement de la révision 3.

Cause

Si l'élément enfant <Name> est vide ou non spécifié dans l'élément <AssignVariable>, le déploiement du proxy d'API échoue, car il n'existe aucun nom de variable valide auquel attribuer une valeur. Vous devez indiquer un nom de variable valide.

Diagnostic

Examinez toutes les règles AssignMessage dans le proxy d'API spécifique où l'échec s'est produit. S'il existe une règle AssignMessage dans laquelle l'élément enfant <Name> est vide ou n'est pas spécifiée dans l'élément <AssignVariable>, il s'agit de la cause de l'erreur.

Exemple 1 : la règle Assign Message suivante n'a pas d'élément <Name> défini.

<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>

Exemple 2 : la règle AssignMessage suivante comporte un élément <Name> vide.

<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>

Solution

Assurez-vous que l'élément enfant <Name> est toujours spécifié et non vide dans l'élément <AssignVariable> de la règle AssignMessage. Exemple :

<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>