Stai visualizzando la documentazione di Apigee Edge.
Vai alla sezione
Documentazione di Apigee X. Informazioni
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 eseguito il criterio) 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
oppure su qualsiasi altra variabile personalizzata che non esiste nel flusso di richiesta.
Diagnosi
Identifica il criterio di assegnazione dei messaggi 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"
Nel codice XML dell'assegnazione dei criteri dei messaggi non riuscito, 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 consente di impostare l'attributo di origine nell'elemento
<Copy>
su una variabile denominatavar
, che corrisponde a quanto contenuto 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 eseguito il criterio Assegna messaggio.
Se la variabile è:
- fuori ambito (non disponibile nel flusso specifico in cui viene eseguito il criterio) o
- non può essere risolto (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 Assegna messaggio nel flusso di richiesta. Se la variabile non è stata definita, viene 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 viene eseguito il criterio Assegna messaggio.
Per correggere la norma di esempio mostrata 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 che non è di tipo message.
Le variabili del tipo di messaggio rappresentano intere richieste e risposte HTTP. Le variabili di flusso perimetrale integrate request
, response
e message
sono di tipo "messaggio". Per saperne di più sulle variabili dei messaggi, consulta Riferimento sulle variabili.
Diagnosi
Identifica il criterio Assegna messaggi in cui si è verificato l'errore e il nome della variabile il cui tipo non è corretto. Puoi trovare entrambi gli elementi nell'elemento
faultstring
della risposta di errore. Ad esempio, nel seguentefaultstring
, il nome del criterio èGenerateGeocodingRequest
e la variabile èPostalCode
:"faultstring": "AssignMessage[GenerateGeocodingRequest]: value of variable PostalCode is not of type Message"
Nel codice XML dell'assegnazione dei criteri dei messaggi con errore, 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 consente di impostare un attributo di origine su una variabile denominataPostalCode
, che corrisponde a quanto contenuto 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 proxy API, dove è stata definita prima la variabile.
- Una volta stabilito il criterio in cui la variabile viene definita e compilata per primo, devi stabilire il tipo di variabile come segue:
- Controlla il valore dell'attributo type (se presente).
- Se l'attributo type non è presente, la variabile viene considerata come una stringa.
- Se il tipo di variabile non è un messaggio (ad esempio una stringa), ciò è la causa dell'errore. Per saperne di più sulle variabili comuni e sui relativi tipi, consulta il Riferimento sulle variabili.
Ad esempio, osserva la variabile PostalCode nel codice XML 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.A questo punto, 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), viene visualizzato il codice di errore:
steps.assignmessage.VariableOfNonMsgType
Risoluzione
Assicurati che l'attributo source
nell'elemento <Copy>
del criterio di assegnazione del messaggio non riuscito sia impostato su una variabile di flusso di tipo message 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 della 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>