Stai visualizzando la documentazione di Apigee Edge.
Vai alla documentazione di Apigee X. info
RequestVariableNotMessageType
Codice di errore
steps.servicecallout.RequestVariableNotMessageType
Corpo della risposta di 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>
del criterio di callout del servizio non è di tipo message. Se la variabile è una stringa o qualsiasi altro tipo diverso dai messaggi, viene visualizzato questo errore.
Le variabili di tipo di messaggio rappresentano intere richieste e risposte HTTP. Le variabili di flusso Edge integrate request
, response
e message
sono di tipo message. Per scoprire di più sulle variabili dei messaggi, consulta la sezione Riferimento alle variabili.
Diagnosi
Identifica le norme sui callout di servizio 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 èExecuteGeocodingRequest
e la variabile èPostalCode
:"faultstring": "ServiceCallout[ExecuteGeocodingRequest]: request variable PostalCode value is not of type Message"
Nel file XML del criterio di callout del servizio non riuscito, verifica che il nome della variabile impostata nell'elemento
<Request>
corrisponda al nome della variabile identificato nella stringa di errore (passaggio 1 sopra). Ad esempio, il seguente criterio specifica una variabile di richiesta denominataPostalCode
, che corrisponde a quella 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, dove è stata definita prima la variabile.
- Nella maggior parte dei casi, la variabile del problema viene creata e compilata in un'altra norma che viene eseguita prima della norma relativa al callout del servizio. Ad esempio, il criterio Assegna messaggio viene utilizzato di solito per creare e compilare le variabili in un flusso di proxy API.
- Una volta individuato il criterio in cui la variabile è definita e compilata per la prima volta, devi determinare il tipo di variabile come segue:
- Controlla il valore dell'attributo
type
(se presente). - Se l'attributo
type
non è presente, la variabile viene considerata una stringa.
- Controlla il valore dell'attributo
- Se il tipo della variabile non è un messaggio (ad esempio una stringa), è la causa dell'errore. Per saperne di più sulle variabili comuni e sui relativi tipi, consulta la documentazione di riferimento sulle variabili.
Ad esempio, supponiamo che la variabile PostalCode
a cui viene fatto riferimento nel criterio del callout del servizio sia stata creata nel criterio Assegna messaggio riportato di seguito. 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>
Ora ricorda che la variabile PostalCode
viene utilizzata nell'elemento <Request>
delle norme relative ai callout del 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), ricevi il codice di errore steps.servicecallout.RequestVariableNotMessageType
.
Risoluzione
Assicurati che la variabile impostata nell'elemento <Request>
nel criterio di callout del servizio non riuscito sia una variabile di flusso di tipo message esistente oppure, in alternativa, puoi creare una nuova variabile di tipo messaggio direttamente nel criterio di callout del servizio (come spiegato nella documentazione dei criteri) e utilizzarla.
Per correggere il criterio, devi modificare l'elemento <Request>
in modo da specificare una variabile esistente o nuova di tipo messaggio. Ad esempio, la variabile GeocodingRequest
impostata nel criterio Assegna messaggio è di tipo messaggio e funzionerebbe perfettamente nel criterio callout del 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 di 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>
del criterio relativo ai callout di servizio non è di tipo messaggio di richiesta. Se la variabile è un tipo di messaggio di risposta, una stringa o qualsiasi altro tipo, viene visualizzato questo errore.
Le variabili di tipo Message rappresentano intere richieste e risposte HTTP. Le variabili di flusso Edge integrate request
, response
e message
sono di tipo message. Per saperne di più sulle variabili dei messaggi, consulta Riferimento sulle variabili.
Diagnosi
Identifica il criterio di callout del servizio in cui si è verificato l'errore e il nome della variabile di cui il tipo non è corretto. Puoi trovare entrambi questi elementi nell'elemento
faultstring
della risposta all'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 del callout di servizio che non ha superato i controlli, verifica che il nome dell'insieme di variabili nell'elemento
<Request>
corrisponda al nome della variabile identificato nella stringa di errore (passaggio 1 sopra). Ad esempio, il seguente criterio specifica una variabile di richiesta denominatavar_response
, che corrisponde a quella 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 è di tipo messaggio di richiesta o meno:
- Individua il codice all'interno del bundle del proxy API, dove la variabile è stata definita per la prima volta.
- Nella maggior parte dei casi, la variabile del problema viene creata e compilata in un'altra norma che viene eseguita prima della norma relativa al callout del servizio. Ad esempio, il criterio Assegna messaggio viene utilizzato di solito per creare e compilare le variabili in un flusso di proxy API.
- Una volta individuato il criterio in cui la variabile è definita e compilata per la prima volta, devi determinare il tipo di variabile come segue:
- Controlla il valore dell'attributo
type
(se presente). - Se l'attributo
type
non è presente, la variabile è considerata una stringa.
- Controlla il valore dell'attributo
- Se il tipo di variabile non è messaggio di richiesta, ciò è la causa dell'errore. Per saperne di più sulle variabili comuni e sui relativi tipi, consulta il Riferimento sulle variabili.
Ad esempio, supponiamo che la variabile var_response
a cui si fa riferimento nel criterio di callout del servizio sia stata creata nel seguente criterio Assegna messaggio. Tieni presente che a var_response
viene assegnato il tipo response
. Di conseguenza, 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>
del criterio relativo al callout del 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 (il suo tipo è messaggio di risposta), ricevi il codice di errore: steps.servicecallout.RequestVariableNotRequestMessageType
.
Risoluzione
Assicurati che la variabile impostata nell'elemento <Request>
nel criterio relativo al callout di servizio non riuscito sia una variabile di tipo request message esistente oppure, in alternativa, puoi creare una nuova variabile di tipo di messaggio di richiesta direttamente nel criterio relativo al callout di servizio (come spiegato nella documentazione relativa alle norme) e utilizzarla.
Per correggere il criterio, devi modificare l'elemento <Request>
in modo da specificare una variabile esistente o nuova di tipo messaggio di richiesta, che funzionerà nel criterio di callout del 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 di 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 non corretto | L'URL di destinazione nel criterio relativo al callout di servizio non è nel formato corretto o ha un nome host non valido o irraggiungibile. |
Errore del server di backend | Il server di backend restituisce una risposta di errore 4XX o 5XX. |
Causa: URL non valido o con formato non corretto
L'URL di destinazione nel criterio di callout del servizio ha un formato non corretto o un nome host non valido o non raggiungibile.
Diagnosi
Identifica le norme relative al callout del servizio che hanno causato l'errore. Il nome del criterio viene visualizzato nell'elemento
faultstring
della risposta all'errore. Ad esempio, nel seguentefaultstring
, il nome della norma relativa al callout del servizio non riuscita èExecuteGeocodingRequest
."faultstring": "ServiceCallout[ExecuteGeocodingRequest]"
Nel criterio di callout del servizio non riuscito, esamina l'elemento
<URL>
. Se non è formattato correttamente o ha un nome host non valido o non raggiungibile, è la causa di questo errore. Ad esempio, le seguenti norme relative ai callout del servizio specificano un<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 di callout del servizio non va a buon fine con l'erroreExecution of ServiceCallout ExecuteGeocodingRequest failed. Reason: Host not reachable
.
Risoluzione
Assicurati che l'elemento <URL>
nei criteri relativi al callout di servizio non riuscito abbia un URL valido con un nome host raggiungibile.
Per correggere il criterio di callout del servizio mostrato sopra, puoi modificare l'elemento <URL>
per 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 4XX o 5XX.
Diagnosi
Identifica il criterio di callout del servizio che ha causato l'errore. Il nome del criterio viene visualizzato nell'elemento
faultstring
della risposta all'errore. Ad esempio, nel seguentefaultstring
, il nome della norma relativa al callout del servizio non riuscita èExecuteGeocodingRequest
."faultstring": "ServiceCallout[ExecuteGeocodingRequest]
Esamina il
faultstring
nel corpo della risposta all'errore e controlla se sono presenti codici di risposta 4XX o 5XX elencati nelReason
. Ad esempio, il seguente faultstring indica chiaramente che dal server di backend è stato restituito un codice di risposta 502:"faultstring": "Execution of ServiceCallout ExecuteGeocodingRequest failed. Reason: ResponseCode 502 is treated as error"
Risoluzione
Una volta determinato il codice di risposta dell'errore, puoi risolvere il problema come faresti con qualsiasi errore 4XX o 5XX. Consulta i playbook relativi agli errori di runtime (4XX/5XX) per istruzioni sulla risoluzione degli errori 4XX o 5XX.