Assegna la risoluzione degli errori di runtime dei messaggi

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

UnresolvedVariable

Codice di errore

steps.assignmessage.UnresolvedVariable

Corpo della risposta di errore

{
    "fault": {
        "faultstring": "AssignMessage[policy_name]: unable to resolve variable [variable_name]",
        "detail": {
            "errorcode": "steps.assignmessage.UnresolvedVariable"
        }
    }
}

Causa

Questo errore si verifica se una variabile specificata nel criterio Assegna messaggio è:

  • fuori ambito (non disponibile nel flusso specifico in cui viene eseguita la norma) oppure
  • non possono essere risolti (non è definito)

Ad esempio, questo errore si verifica se il criterio Assegna messaggio viene eseguito nel flusso di richiesta, ma l'attributo source nell'elemento <Copy> è impostato sulla variabile response o error o su qualsiasi altra variabile personalizzata che non esiste nel flusso di richiesta.

Diagnosi

  1. Identifica il criterio di assegnazione dei messaggi in cui si è verificato l'errore e il nome della variabile che non è disponibile. Puoi trovare entrambi questi elementi nell'elemento faultstring della risposta di errore.

    Ad esempio, nell'faultstring seguente, il nome del criterio è googleBook e la variabile è var:

    "faultstring": "AssignMessage[googleBook]: unable to resolve variable var"
    
  2. Nel file XML del criterio Assegna messaggi, verifica che il nome della variabile utilizzata corrisponda al nome della variabile identificato nella stringa di errore (passaggio 1 sopra). Ad esempio, il seguente criterio imposta l'attributo source nell'elemento <Copy> su una variabile denominata var, che corrisponde a quanto contenuto in faultstring:

    <AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1">
       <DisplayName>googleBook</DisplayName>
       <Properties />
       <Copy source="var">
          <Headers>
             <Header name="user-agent" />
          </Headers>
       </Copy>
       <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
       <AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo>
    </AssignMessage>
    
  3. Determina se la variabile è definita e disponibile nel flusso in cui viene eseguito il criterio Assegna messaggio.

  4. Se la variabile è:

    1. fuori ambito (non disponibile nel flusso specifico in cui viene eseguita la norma) oppure
    2. non possono essere risolti (non è definito)

    questa è la causa dell'errore.

    Ad esempio, supponiamo che il criterio Assegna messaggio mostrato sopra venga eseguito nel flusso di richiesta. Verifica se la variabile var è definita in uno dei criteri eseguiti prima del criterio di assegnazione dei messaggi nel flusso di richiesta. Se la variabile non è stata definita, verrà visualizzato il codice di errore:

    steps.assignmessage.UnresolvedVariable
    

Risoluzione

Assicurati che la variabile a cui viene fatto riferimento nel criterio esista e sia disponibile nel flusso specifico in cui è in esecuzione il criterio di Assegna messaggio.

Per correggere il criterio di esempio mostrato sopra, puoi modificare l'attributo source nell'elemento <Copy> in modo che corrisponda alla variabile di richiesta o a qualsiasi altra variabile personalizzata di tipo messaggio esistente nel flusso di richiesta.

<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1">
   <DisplayName>googleBook</DisplayName>
   <Properties />
   <Copy source="request">
      <Headers>
         <Header name="user-agent" />
      </Headers>
   </Copy>
   <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
   <AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo>
</AssignMessage>

VariableOfNonMsgType

Codice di errore

steps.assignmessage.VariableOfNonMsgType

Corpo della risposta di errore

{
    "fault": {
        "faultstring": "AssignMessage[policy_name]: value of variable [variable] is not of type Message",
        "detail": {
            "errorcode": "steps.assignmessage.VariableOfNonMsgType"
        }
    }
}

Causa

Questo errore si verifica se l'attributo source nell'elemento <Copy> è impostato su una variabile non di tipo message.

Le variabili del tipo di messaggio rappresentano intere richieste e risposte HTTP. Le variabili di flusso integrate request, response e message sono di tipo messaggio. Per saperne di più sulle variabili messaggio, consulta l'articolo Riferimento alle variabili.

Diagnosi

  1. Identifica il criterio di assegnazione dei messaggi in cui si è verificato l'errore e il nome della variabile il cui tipo non è corretto. Puoi trovare entrambi questi elementi nell'elemento faultstring della risposta di errore. Ad esempio, nell'faultstring seguente, il nome del criterio è GenerateGeocodingRequest e la variabile è PostalCode:

    "faultstring": "AssignMessage[GenerateGeocodingRequest]: value of variable PostalCode is not of type Message"
    
  2. Nel codice XML del criterio Assegna messaggi non riuscito, verifica che il nome della variabile impostata nell'elemento <Copy> corrisponda al nome della variabile identificato nella stringa di errore (passaggio 1 sopra). Ad esempio, il seguente criterio imposta un attributo sorgente su una variabile denominata PostalCode, che corrisponde a quanto contenuto in faultstring:

    <AssignMessage name="GenerateGeocodingRequest">
       <AssignTo createNew="true" type="request">GeocodingRequest</AssignTo>
       <AssignVariable>
          <Name>PostalCode</Name>
          <Ref>request.queryparam.postalcode</Ref>
       </AssignVariable>
       <AssignVariable>
          <Name>Country</Name>
          <Ref>request.queryparam.country</Ref>
       </AssignVariable>
       <Copy source="PostalCode">
          <QueryParams>
             <QueryParam name="q" />
          </QueryParams>
       </Copy>
    </AssignMessage>
    
  3. Determina se questa variabile è di tipo messaggio o meno:

    1. Individua il codice all'interno del bundle proxy API, in cui la variabile è stata definita per prima.
    2. Una volta individuato il criterio in cui la variabile viene definita e compilata, devi determinarne il tipo nel seguente modo:
      1. Controlla il valore dell'attributo tipo (se presente).
      2. Se l'attributo type non è presente, la variabile viene considerata come una stringa.
    3. Se il tipo di variabile non è messaggio (ad esempio una stringa), è questa la causa dell'errore. Per conoscere le variabili comuni e i relativi tipi, consulta Riferimento variabili.

    Ad esempio, osserva la variabile PostalCode nel codice XML riportato sopra. Viene assegnato il valore della variabile di flusso request.queryparam.postalcode nell'elemento <AssignVariable>. Questo valore è una stringa, perché non è presente alcun attributo di tipo nell'assegnazione della variabile.

    Ricorda che la variabile PostalCode viene utilizzata nell'elemento <Copy> del criterio Assegna messaggio:

    <Copy source="PostalCode">
       <QueryParams>
          <QueryParam name="PostalCode" />
       </QueryParams>
    </Copy>
    

    Poiché PostalCode non è di tipo messaggio (in questo esempio è una stringa), riceverai il seguente codice di errore:

    steps.assignmessage.VariableOfNonMsgType
    

Risoluzione

Assicurati che l'attributo source nell'elemento <Copy> nel criterio di assegnazione dei messaggi non riuscito sia impostato su una variabile di flusso di tipo messaggio esistente.

Per correggere il criterio, puoi modificare l'attributo source nell'elemento <Copy> per specificare una variabile di tipo messaggio. Ad esempio, se il criterio Assegna messaggio deve essere eseguito nel flusso di richiesta, puoi utilizzare la variabile del tipo di messaggio request o qualsiasi altra variabile personalizzata di tipo messaggio.

<AssignMessage name="GenerateGeocodingRequest">
   <AssignTo createNew="true" type="request">GeocodingRequest</AssignTo>
   <AssignVariable>
      <Name>PostalCode</Name>
      <Ref>request.queryparam.postalcode</Ref>
   </AssignVariable>
   <AssignVariable>
      <Name>Country</Name>
      <Ref>request.queryparam.country</Ref>
   </AssignVariable>
   <Copy source="request">
      <QueryParams>
         <QueryParam name="PostalCode" />
      </QueryParams>
   </Copy>
</AssignMessage>