Risoluzione dei problemi relativi agli errori di deployment dei criteri di messaggio

Stai visualizzando la documentazione di Apigee Edge.
Consulta la documentazione di Apigee X.
info

InvalidIndex

Messaggio di errore

Il deployment del proxy API tramite la UI Edge o l'API di gestione Edge non riesce e viene visualizzato questo messaggio di errore:

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]

Esempio di messaggio di errore

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

Screenshot di esempio

Causa

Se l'indice specificato negli elementi <Copy> e/o <Remove> del criterio Assegna messaggio è 0 o un numero negativo, il deployment del proxy API non riesce.

Ad esempio, se passi più parametri di query con lo stesso nome, puoi accedervi in Edge come variabili di flusso indicizzate. Supponiamo di voler trasmettere gli ID di tre studenti come parametri di query. Puoi farlo nel seguente modo:

https://myorg-test.apigee.net/v1/basepath?school_name=NPS&id=1&id=2&id=3

Supponiamo quindi di tentare di accedere a questi parametri di query con i numeri di indice 0, 1 e 2 nel criterio Assegna messaggio nel seguente modo:

id.0
id.1 and
id.2

In questo caso, il deployment del proxy non riesce perché l'indice deve iniziare con 1. Ciò significa che puoi accedere al primo parametro di query "id=1" come "id.1". Per accedere al secondo parametro di query "id=2", devi utilizzare l'indice 2, ovvero "id.2". Allo stesso modo, per accedere al terzo parametro di query "id=3", puoi utilizzare "id.3".

Puoi trovare ulteriori informazioni qui.

Diagnosi

  1. Identifica la policy Assegna messaggio in cui si è verificato l'errore, il nome dell'attributo e l'indice non valido. Puoi trovare tutti questi elementi nel messaggio di errore. Ad esempio, nel seguente errore, il nome della policy è GeneratingGeocodingRequest, il nome dell'attributo è id e l'indice è 0:

    AssignMessage[GenerateStudentsRequest]: index must be greater than zero in id.0
    
  2. Verifica che il nome dell'attributo e l'indice utilizzati nel file XML del criterio Assegna messaggio non riuscito corrispondano al nome dell'attributo e all'indice identificati nel messaggio di errore (passaggio 1 sopra). Ad esempio, la seguente policy specifica l'attributo id e l'indice come 0, che corrisponde a quanto riportato nel messaggio di errore:

    <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. Se l'indice specificato è 0 o un numero negativo, questo è il motivo dell'errore.

    Nell'esempio del criterio Assegna messaggio mostrato sopra, stai tentando di accedere al primo valore del parametro di query "id" utilizzando l'indice 0. Pertanto, il deployment del proxy API non riesce e viene visualizzato il seguente errore:

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

Risoluzione

In Assegna messaggio, quando accedi a più intestazioni, parametri di query o altri parametri che condividono lo stesso nome, assicurati che l'indice sia sempre maggiore di zero. Ad esempio:

<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

Messaggio di errore

Il deployment del proxy API tramite la UI Edge o l'API di gestione Edge non riesce e viene visualizzato questo messaggio di errore:

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

Esempio di messaggio di errore

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

Screenshot di esempio

Causa

Se l'elemento secondario <Name> è vuoto o non specificato nell'elemento <AssignVariable>, il deployment del proxy API non va a buon fine perché non esiste un nome di variabile valido a cui assegnare un valore. È necessario un nome di variabile valido.

Diagnosi

Esamina tutti i criteri Assign Message nel proxy API specifico in cui si è verificato l'errore. Se esiste una norma Assegna messaggio in cui l'elemento secondario <Name> è vuoto o non specificato nell'elemento <AssignVariable>, questo è il motivo dell'errore.

Esempio 1: la seguente policy Assegna messaggio non ha alcun elemento <Name> definito.

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

Esempio 2: la seguente policy Assegna messaggio ha un elemento <Name> vuoto .

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

Risoluzione

Assicurati che l'elemento secondario <Name> sia sempre specificato e non vuoto all'interno dell'elemento <AssignVariable> del criterio Assegna messaggio. Ad esempio:

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