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 è:
- al di fuori dell'ambito (non disponibile nel flusso specifico in cui viene eseguita la policy) o
- non può essere risolto (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
Identifica il criterio Assegna messaggio in cui si è verificato l'errore e il nome della variabile non disponibile. Puoi trovare entrambi questi elementi nell'elemento
faultstringdella risposta di errore.Ad esempio, nel seguente
faultstring, il nome della policy ègoogleBooke la variabile èvar:"faultstring": "AssignMessage[googleBook]: unable to resolve variable var"Nel file XML della policy di assegnazione dei messaggi non riuscita, verifica che il nome della variabile utilizzata corrisponda al nome della variabile identificata nella stringa di errore (passaggio 1 sopra). Ad esempio, la seguente policy imposta l'attributo source nell'elemento
<Copy>su una variabile denominatavar, che corrisponde a quanto presente infaultstring:<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>Determina se la variabile è definita e disponibile nel flusso in cui viene eseguita la policy Assegna messaggio.
Se la variabile è:
- al di fuori dell'ambito (non disponibile nel flusso specifico in cui viene eseguita la policy) o
- non può essere risolto (non è definito)
allora è questa la causa dell'errore.
Ad esempio, supponiamo che la norma Assign Message mostrata sopra venga eseguita nel flusso di richiesta. Controlla se la variabile
varè definita in una delle policy eseguite prima della policy Assegna messaggio nel flusso di richiesta. Se la variabile non è stata definita, riceverai il codice di errore:steps.assignmessage.UnresolvedVariable
Risoluzione
Assicurati che la variabile a cui viene fatto riferimento nella policy esista e sia disponibile nel flusso specifico in cui viene eseguita la policy Assegna messaggio.
Per correggere la policy di esempio mostrata sopra, puoi modificare l'attributo source nell'elemento <Copy> in modo che sia la variabile di richiesta o 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 che non è di tipo message.
Le variabili di 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 dei messaggi, consulta la Guida di riferimento alle variabili.
Diagnosi
Identifica il criterio Assegna messaggio in cui si è verificato l'errore e il nome della variabile il cui tipo non è corretto. Puoi trovare entrambi questi elementi nell'elemento
faultstringdella risposta di errore. Ad esempio, nel seguentefaultstring, il nome della policy èGenerateGeocodingRequeste la variabile èPostalCode:"faultstring": "AssignMessage[GenerateGeocodingRequest]: value of variable PostalCode is not of type Message"Nel file XML della policy di assegnazione dei messaggi non riuscita, 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, la seguente policy imposta un attributo di origine su una variabile denominataPostalCode, che corrisponde a quella presente infaultstring:<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>Determina se questa variabile è di tipo messaggio o meno:
- Individua il codice all'interno del bundle del proxy API in cui è stata definita per la prima volta la variabile.
- Una volta individuata la policy in cui la variabile viene definita e compilata per prima, devi determinare il tipo di variabile nel seguente modo:
- Controlla il valore dell'attributo type (se presente).
- Se l'attributo type non è presente, la variabile viene considerata una stringa.
- Se il tipo di variabile non è un messaggio (ad esempio una stringa), questo è il motivo dell'errore. Puoi scoprire di più sulle variabili comuni e sui relativi tipi nella Guida di riferimento alle variabili.
Ad esempio, esamina la variabile PostalCode nel codice XML riportato sopra. A questo attributo viene assegnato il valore della variabile di flusso
request.queryparam.postalcodenell'elemento<AssignVariable>. Questo valore è una stringa perché nell'assegnazione della variabile non è presente alcun attributo di tipo.Ora, 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 (è una stringa in questo esempio), ricevi il codice di errore:
steps.assignmessage.VariableOfNonMsgType
Risoluzione
Assicurati che l'attributo source nell'elemento <Copy> nel criterio Assegna messaggio non riuscito sia impostato su una variabile di flusso di tipo message esistente.
Per correggere la policy, 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>