Assegna la risoluzione degli errori di runtime dei messaggi

Stai visualizzando la documentazione di Apigee Edge.
Vai alla documentazione di Apigee X.
informazioni

UnresolvedVariable

Codice di errore

steps.assignmessage.UnresolvedVariable

Corpo della risposta all'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 eseguito il criterio) oppure
  • non può essere risolto (non è definito)

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

Diagnostica

  1. Identifica la norma Assegna messaggio in cui si è verificato l'errore e il nome della variabile che non è disponibile. Puoi trovare entrambi gli elementi nell'elemento faultstring della risposta di errore.

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

    "faultstring": "AssignMessage[googleBook]: unable to resolve variable var"
    
  2. Nel file XML del tipo Assegna messaggio criterio, verifica che il nome della variabile utilizzata corrisponda a quello identificato nella stringa di errore (passaggio 1 riportato sopra). Ad esempio, il seguente criterio imposta l'attributo source nell'elemento <Copy> su una variabile denominata var, che corrisponde al contenuto 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 eseguito il criterio) oppure
    2. non può essere risolto (non è definito)

    è questa la causa dell'errore.

    Supponiamo, ad esempio, 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 Assegna messaggio nel flusso di richiesta. Se la variabile non è stata definita, verrà visualizzato il seguente 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 viene eseguito il criterio Assegna messaggio.

Per correggere il criterio di esempio mostrato sopra, puoi modificare l'attributo source nell'elemento <Copy> in modo che diventi la variabile di richiesta o qualsiasi altra variabile personalizzata di tipo messaggio esistente nel flusso della 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 all'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 Edge integrate request, response e message sono di tipo messaggio. Per scoprire di più sulle variabili messaggio, consulta la documentazione di riferimento sulle variabili.

Diagnostica

  1. Identifica il criterio Assegna messaggio in cui si è verificato l'errore e il nome della variabile di tipo errato. Puoi trovare entrambi gli elementi nell'elemento faultstring della risposta di errore. Ad esempio, nel seguente faultstring, il nome del criterio è GenerateGeocodingRequest e la variabile è PostalCode:

    "faultstring": "AssignMessage[GenerateGeocodingRequest]: value of variable PostalCode is not of type Message"
    
  2. Nel file XML del tipo Assegna messaggio criterio, verifica che il nome della variabile impostata nell'elemento <Copy> corrisponda al nome della variabile identificato nella stringa di errore (passaggio 1 riportato sopra). Ad esempio, il seguente criterio imposta un attributo di origine 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 compreso il criterio in cui la variabile viene definita e compilata, devi determinarne il tipo nel seguente modo:
      1. Verifica 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 è un messaggio (ad esempio una stringa), questo è il motivo dell'errore. Per saperne di più sulle variabili comuni e sui loro tipi, consulta Riferimento variabili.

    Ad esempio, osserva la variabile PostalCode nel codice XML riportato sopra. Gli 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 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>