Stai visualizzando la documentazione di Apigee Edge.
Vai alla
documentazione di Apigee X. informazioni
RequestVariableNotMessageType
Codice di errore
steps.servicecallout.RequestVariableNotMessageType
Corpo della risposta all'errore
{ "fault": { "faultstring": "ServiceCallout[policy_name]: request variable [variable_name] value is not of type Message", "detail": { "errorcode": "steps.servicecallout.RequestVariableNotMessageType" } } }
Causa
Questo errore si verifica se una variabile specificata nell'elemento <Request>
delle norme sui callout di servizio non è di tipo message. Se la variabile è una stringa o qualsiasi altro tipo che non sia un messaggio, visualizzerai questo errore.
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
Identifica le norme sui callout di servizio 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 seguentefaultstring
, il nome del criterio èExecuteGeocodingRequest
e la variabile èPostalCode
:"faultstring": "ServiceCallout[ExecuteGeocodingRequest]: request variable PostalCode value is not of type Message"
Nel file XML del criterio relativo ai callout di servizio che non è stato superato, verifica che il nome della variabile impostata nell'elemento
<Request>
corrisponda al nome della variabile identificato nella stringa di errore (passaggio 1 riportato sopra). Ad esempio, il seguente criterio specifica una variabile di richiesta denominataPostalCode
, che corrisponde a quanto contenuto infaultstring
:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ServiceCallout name="ExecuteGeocodingRequest"> <Request variable="PostalCode"/> <Response>GeocodingResponse</Response> <HTTPTargetConnection> <URL>http://maps.googleapis.com/maps/api/geocode/json</URL> </HTTPTargetConnection> </ServiceCallout>
Determina se questa variabile è di tipo messaggio o meno:
- Individua il codice all'interno del bundle proxy API, in cui la variabile è stata definita per prima.
- Nella maggior parte dei casi, la variabile "Problema" viene creata e compilata in un altro criterio eseguito prima delle norme relative ai callout di servizio. Ad esempio, il criterio Assegna messaggio viene comunemente utilizzato per creare e compilare le variabili in un flusso proxy API.
- Una volta compreso il criterio in cui la variabile viene definita e compilata, devi determinarne il tipo nel seguente modo:
- Controlla il valore dell'attributo
type
(se presente). - Se l'attributo
type
non è presente, la variabile viene considerata come una stringa.
- Controlla il valore dell'attributo
- 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, supponiamo che la variabile PostalCode
a cui viene fatto riferimento nelle norme relative ai callout di servizio sia stata creata nel seguente criterio Assegna messaggio. Tieni presente che a PostalCode
viene assegnato il valore della variabile di flusso request.queryparam.postalcode
. Questo valore è una stringa perché non è presente alcun attributo type
nell'assegnazione della variabile.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage name="GenerateGeocodingRequest">
<AssignTo createNew="true" type="request">GeocodingRequest</AssignTo>
<Set>
<QueryParams>
<QueryParam name="address">{request.queryparam.postalcode}</QueryParam>
<QueryParam name="region">{request.queryparam.country}</QueryParam>
<QueryParam name="sensor">false</QueryParam>
</QueryParams>
<Verb>GET</Verb>
</Set>
<AssignVariable>
<Name>PostalCode</Name>
<Ref>request.queryparam.postalcode</Ref>
</AssignVariable>
<AssignVariable>
<Name>Country</Name>
<Ref>request.queryparam.country</Ref>
</AssignVariable>
</AssignMessage>
Ricorda che la variabile PostalCode
viene utilizzata nell'elemento <Request>
delle norme relative ai callout di servizio:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ServiceCallout name="ExecuteGeocodingRequest">
<Request variable="PostalCode"/>
<Response>GeocodingResponse</Response>
<HTTPTargetConnection>
<URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
</HTTPTargetConnection>
</ServiceCallout>
Poiché PostalCode
non è di tipo messaggio (in questo esempio è una stringa), riceverai il codice di errore: steps.servicecallout.RequestVariableNotMessageType
.
Risoluzione
Assicurati che la variabile impostata nell'elemento <Request>
nel criterio Callout di servizio che non è stato superato sia una variabile di flusso di tipo messaggio esistente oppure, in alternativa, puoi creare una nuova variabile per il tipo di messaggio direttamente nel criterio Callout di servizio (come spiegato nella documentazione relativa alle norme) e utilizzarla.
Per correggere il criterio, devi modificare l'elemento <Request>
per specificare una variabile esistente o nuova di tipo messaggio. Ad esempio, la variabile GeocodingRequest
impostata nelle norme relative all'assegnazione dei messaggi è di tipo messaggio e funziona perfettamente nelle norme relative ai callout di servizio. Ad esempio:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ServiceCallout name="ExecuteGeocodingRequest">
<Request variable="GeocodingRequest"/>
<Response>GeocodingResponse</Response>
<HTTPTargetConnection>
<URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
</HTTPTargetConnection>
</ServiceCallout>
RequestVariableNotRequestMessageType
Codice di errore
steps.servicecallout.RequestVariableNotRequestMessageType
Corpo della risposta all'errore
{ "fault": { "faultstring": "ServiceCallout[policy_name]: request variable [variable_name] value is not of type Request Message", "detail": { "errorcode": "steps.servicecallout.RequestVariableNotRequestMessageType" } } }
Causa
Questo errore si verifica se una variabile specificata nell'elemento <Request>
delle norme sui callout di servizio non è di tipo messaggio di richiesta. Se la variabile è un tipo di messaggio di risposta, una stringa o qualsiasi altro tipo, visualizzerai questo errore.
Le variabili di tipo 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
Identifica le norme sui callout di servizio 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 seguentefaultstring
, il nome del criterio èExecuteGeocodingRequest
e la variabile èvar_response
:"faultstring": "ServiceCallout[ExecuteGeocodingRequest]: request variable var_response value is not of type Message"
Nel file XML del criterio relativo ai callout di servizio che non è stato superato, verifica che il nome della variabile impostata nell'elemento
<Request>
corrisponda al nome della variabile identificato nella stringa di errore (passaggio 1 riportato sopra). Ad esempio, il seguente criterio specifica una variabile di richiesta denominatavar_response
, che corrisponde a quanto contenuto infaultstring
:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ServiceCallout name="ExecuteGeocodingRequest"> <Request variable="var_response"/> <Response>GeocodingResponse</Response> <HTTPTargetConnection> <URL>http://maps.googleapis.com/maps/api/geocode/json</URL> </HTTPTargetConnection> </ServiceCallout>
Determina se la variabile è del tipo di messaggio di richiesta o meno:
- Individua il codice all'interno del bundle proxy API, in cui la variabile è stata definita per prima.
- Nella maggior parte dei casi, la variabile "Problema" viene creata e compilata in un altro criterio eseguito prima delle norme relative ai callout di servizio. Ad esempio, il criterio Assegna messaggio viene comunemente utilizzato per creare e compilare le variabili in un flusso proxy API.
- Una volta compreso il criterio in cui la variabile viene definita e compilata, devi determinarne il tipo nel seguente modo:
- Controlla il valore dell'attributo
type
(se presente). - Se l'attributo
type
non è presente, la variabile viene considerata come una stringa.
- Controlla il valore dell'attributo
- Se il tipo di variabile non è di tipo messaggio di richiesta, l'errore è causato da questo. Per saperne di più sulle variabili comuni e sui loro tipi, consulta Riferimento variabili.
Ad esempio, supponiamo che la variabile var_response
a cui viene fatto riferimento nelle norme relative ai callout di servizio sia stata creata nel seguente criterio Assegna messaggio. Tieni presente che a var_response
viene assegnato il tipo response
. Pertanto, il tipo di variabile var_response
è un messaggio di risposta.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage name="GenerateGeocodingRequest">
<AssignTo createNew="true" type="request">GeocodingRequest</AssignTo>
<AssignTo createNew="true" type="response">var_response</AssignTo>
<Set>
<QueryParams>
<QueryParam name="address">{request.queryparam.postalcode}</QueryParam>
<QueryParam name="region">{request.queryparam.country}</QueryParam>
<QueryParam name="sensor">false</QueryParam>
</QueryParams>
<Verb>GET</Verb>
</Set>
<AssignVariable>
<Name>PostalCode</Name>
<Ref>request.queryparam.postalcode</Ref>
</AssignVariable>
<AssignVariable>
<Name>Country</Name>
<Ref>request.queryparam.country</Ref>
</AssignVariable>
</AssignMessage>
Ricorda che la variabile var_response
viene utilizzata nell'elemento <Request>
delle norme sui callout di servizio.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ServiceCallout name="ExecuteGeocodingRequest">
<Request variable="var_response"/>
<Response>GeocodingResponse</Response>
<HTTPTargetConnection>
<URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
</HTTPTargetConnection>
</ServiceCallout>
Poiché var_response
non è di tipo messaggio di richiesta (di tipo è messaggio di risposta), riceverai il codice di errore: steps.servicecallout.RequestVariableNotRequestMessageType
.
Risoluzione
Assicurati che la variabile impostata nell'elemento <Request>
nel criterio Callout di servizio non riuscito sia una variabile di tipo request message esistente oppure, in alternativa, puoi creare una nuova variabile per il tipo di messaggio di richiesta direttamente nelle norme relative al callout di servizio (come spiegato nella documentazione relativa alle norme) e utilizzarla.
Per correggere la norma, devi modificare l'elemento <Request>
in modo da specificare una variabile esistente o nuova di tipo "messaggio di richiesta" e che questa funzione si applichi alle norme relative ai callout di servizio. Ad esempio:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ServiceCallout name="ExecuteGeocodingRequest">
<Request variable="GeocodingRequest"/>
<Response>GeocodingResponse</Response>
<HTTPTargetConnection>
<URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
</HTTPTargetConnection>
</ServiceCallout>
ExecutionFailed
Codice di errore
steps.servicecallout.ExecutionFailed
Corpo della risposta all'errore
{ "fault": { "faultstring": "Execution of ServiceCallout [policy_name] failed. Reason: Host not reachable", "detail": { "errorcode": "steps.servicecallout.ExecutionFailed" } } }
o
{ "fault": { "faultstring": "Execution of ServiceCallout [policy_name] failed. Reason: ResponseCode [http_code] is treated as error", "detail": { "errorcode": "steps.servicecallout.ExecutionFailed" } } }
Possibili cause
Le possibili cause di questo errore sono:
Causa | Descrizione |
URL non valido o in formato non valido | L'URL di destinazione nelle norme relative ai callout di servizio non è valido o ha un nome host non valido o non raggiungibile. |
Errore del server di backend | Il server di backend restituisce una risposta di errore di 4XX o 5XX. |
Causa: URL non valido o in formato non valido
L'URL di destinazione nelle norme relative ai callout di servizio non è valido o ha un nome host non valido o non raggiungibile.
Diagnostica
Identifica le norme sui callout di servizio che hanno causato l'errore. Il nome del criterio viene visualizzato nell'elemento
faultstring
della risposta di errore. Ad esempio, nel seguentefaultstring
, il nome del criterio relativo ai callout di servizio non riuscito èExecuteGeocodingRequest
."faultstring": "ServiceCallout[ExecuteGeocodingRequest]"
Esamina l'elemento
<URL>
nelle norme relative ai callout di servizio che non hanno superato il test. Se il formato non è corretto o il nome host non è valido o non è raggiungibile, è questo l'errore. Ad esempio, le seguenti norme relative ai callout di servizio specificano un valore<URL>
non valido:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ServiceCallout name="ExecuteGeocodingRequest"> <Request variable="GeocodingRequest"/> <Response>GeocodingResponse</Response> <HTTPTargetConnection> <URL>http://</URL> </HTTPTargetConnection> </ServiceCallout>
L'elemento
<URL>
ha solo il protocollohttp://
, ma non ha un nome host valido, pertanto il criterio Callout di servizio non funziona e genera l'errore:Execution of ServiceCallout ExecuteGeocodingRequest failed. Reason: Host not reachable
.
Risoluzione
Assicurati che l'elemento <URL>
nelle norme relative ai callout di servizio non superate abbia un URL valido con un nome host raggiungibile.
Per correggere le norme sui callout di servizio mostrate sopra, puoi modificare l'elemento <URL>
in modo da specificare un URL valido:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ServiceCallout name="ExecuteGeocodingRequest">
<Request variable="GeocodingRequest"/>
<Response>GeocodingResponse</Response>
<HTTPTargetConnection>
<URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
</HTTPTargetConnection>
</ServiceCallout>
Causa: errore del server di backend
Il server di backend restituisce una risposta di errore di 4XX o 5XX.
Diagnostica
Identifica le norme sui callout di servizio che hanno causato l'errore. Il nome del criterio viene visualizzato nell'elemento
faultstring
della risposta di errore. Ad esempio, nel seguentefaultstring
, il nome del criterio relativo ai callout di servizio non riuscito èExecuteGeocodingRequest
."faultstring": "ServiceCallout[ExecuteGeocodingRequest]
Esamina il
faultstring
nel corpo della risposta di errore e controlla se nellaReason
sono elencati codici di risposta 4XX o 5XX. Ad esempio, la seguente stringa di errore indica chiaramente che è stato restituito un codice di risposta 502 dal server di backend:"faultstring": "Execution of ServiceCallout ExecuteGeocodingRequest failed. Reason: ResponseCode 502 is treated as error"
Risoluzione
Una volta determinato il codice di risposta di errore, puoi risolvere il problema seguendo la stessa procedura prevista per qualsiasi errore 4XX o 5XX. Consulta i playbook sugli errori di runtime (4XX/5XX) per istruzioni su come risolvere i problemi relativi agli errori 4XX o 5XX.