Assegna la risoluzione degli errori di deployment dei criteri dei messaggi

Stai visualizzando la documentazione di Apigee e Apigee hybrid.
Visualizza la documentazione di Apigee Edge.

InvalidIndex

Messaggio di errore

Il deployment del proxy API tramite l'API o la UI di Apigee non va a buon fine e genera 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

Errore durante il deployment per il test dell'ambiente.

Causa

Se l'indice specificato negli elementi <Copy> e/o <Remove> del criterio di assegnazione dei messaggi è pari a 0 o è un numero negativo, il deployment del proxy API non va a buon fine.

Ad esempio, se trasmetti più parametri di ricerca con lo stesso nome, puoi accedervi come variabili di flusso indicizzate. Supponiamo che tu voglia passare gli ID di 3 studenti come parametri di ricerca. In questo caso, puoi procedere nel seguente modo:

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

Quindi, supponiamo che tu tenti di accedere a questi parametri di ricerca 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". Analogamente, per accedere al terzo parametro di query "id=3", puoi utilizzare "id.3".

Per ulteriori informazioni, consulta la documentazione relativa all'elemento di testo del criterio AssignMessage.

Diagnosi

  1. Identifica il criterio di assegnazione dei messaggi 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, nell'errore seguente, il nome del criterio è 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 utilizzato nel file XML del criterio di assegnazione dei messaggi non riuscito corrispondano al nome dell'attributo e all'indice identificato nel messaggio di errore (passaggio 1 precedente). Ad esempio, il seguente criterio specifica l'attributo id e l'indice come 0, che corrisponde al contenuto del 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, è questa la causa dell'errore.

    Nell'esempio Assegna criterio ai messaggi mostrato sopra, stai tentando di accedere al primo valore del parametro di query "id" utilizzando l'indice 0. Di conseguenza, il deployment del proxy API non riesce e restituisce l'errore:

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

Risoluzione

In Assegna messaggio, quando accedi a più intestazioni, parametri di ricerca 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 l'API o la UI di Apigee non va a buon fine e genera 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

Errore durante il salvataggio della revisione 3.

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 della variabile valido.

Diagnosi

Esamina tutti i criteri di Assegna messaggio nello specifico proxy API in cui si è verificato l'errore. Se esiste un criterio Assegna messaggio in cui l'elemento secondario <Name> è vuoto o non specificato nell'elemento <AssignVariable>, allora è questa la causa dell'errore.

Esempio 1: nel seguente criterio di Assegna messaggi non è stato definito alcun elemento <Name>.

<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: il seguente criterio Assegna messaggi contiene 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>