Vous consultez la documentation d'Apigee et d'Apigee hybrid.
Consultez la documentation d'Apigee Edge.
RequestVariableNotMessageType
Code d'erreur
steps.servicecallout.RequestVariableNotMessageType
Corps de la réponse d'erreur
{ "fault": { "faultstring": "ServiceCallout[POLICY_NAME]: request variable [VARIABLE_NAME] value is not of type Message", "detail": { "errorcode": "steps.servicecallout.RequestVariableNotMessageType" } } }
Cause
Cette erreur se produit si une variable spécifiée dans l'élément <Request>
de la règle ServiceCallout est de type message
. Si la variable est une chaîne ou de type autre que Message, le message d'erreur suivant s'affiche.
Les variables de type Message représentent des requêtes et des réponses HTTP entières. Les variables de flux intégrées request
, response
et message
sont de type message
.
Diagnostic
Identifiez la règle ServiceCallout où l'erreur s'est produite et le nom de la variable dont le type est incorrect. Vous pouvez trouver ces deux éléments dans l'élément
faultstring
de la réponse d'erreur. Par exemple, dans le fichierfaultstring
suivant, le nom de la règle estExecuteGeocodingRequest
et celui de la variable estPostalCode
:"faultstring": "ServiceCallout[ExecuteGeocodingRequest]: request variable PostalCode value is not of type Message"
Dans le fichier XML de la règle ServiceCallout ayant échoué, vérifiez que le nom de la variable définie dans l'élément
<Request>
correspond au nom de la variable identifiée dans la chaîne d'erreur (étape 1 ci-dessus). Par exemple, la règle suivante spécifie une variable de requête nomméePostalCode
, qui correspond au contenu defaultstring
:<?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>
Déterminez si cette variable est de type message ou non :
- Recherchez le code dans le groupe de proxys d'API, où la variable a été définie en premier.
- Dans la plupart des cas, vous constaterez que la variable posant problème est créée et insérée dans une autre règle qui s'exécute avant la règle ServiceCallout. Par exemple, la règle d'attribution des messages est couramment utilisée pour créer et insérer des variables dans un flux de proxy d'API.
- Une fois que vous avez identifié la règle où la variable est définie et renseignée en premier, vous devez déterminer le type de cette variable comme suit :
- Vérifiez la valeur de l'attribut
type
(le cas échéant). - En l'absence d'attribut
type
, la variable est considérée comme une chaîne.
- Vérifiez la valeur de l'attribut
- Si la variable n'est pas de type message (par exemple, une chaîne), il s'agit de la cause de l'erreur. Pour en savoir plus sur les variables courantes et leurs types, consultez la documentation de référence sur les variables de flux.
Supposons, par exemple, que la variable PostalCode
référencée dans la règle ServiceCallout ait été créée dans la règle AssignMessage suivante. Notez que PostalCode
se voit attribuer la valeur de la variable de flux request.queryparam.postalcode
. Cette valeur est une chaîne, car il n'y a pas d'attribut type
dans l'attribution de variable.
<?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>
Rappelez-vous que la variable PostalCode
est utilisée dans l'élément <Request>
de la règle ServiceCallout :
<?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>
Comme PostalCode
n'est pas de type message (il s'agit d'une chaîne dans cet exemple), vous obtenez le code d'erreur suivant : steps.servicecallout.RequestVariableNotMessageType
.
Solution
Assurez-vous que la variable définie dans l'élément <Request>
de la règle ServiceCallout ayant échoué est une variable de flux de type message
qui existe. Vous pouvez également créer une variable de type message directement dans la règle ServiceCallout (comme expliqué sur la page Règle ServiceCallout) et l'utiliser.
Pour corriger la règle, vous devez modifier l'élément <Request>
afin de spécifier une variable existante ou une nouvelle variable de type message. Par exemple, la variable GeocodingRequest
définie dans la règle AssignMessage est de type message, et elle fonctionnera sans problème dans la règle ServiceCallout. Exemple :
<?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
Code d'erreur
steps.servicecallout.RequestVariableNotRequestMessageType
Corps de la réponse d'erreur
{ "fault": { "faultstring": "ServiceCallout[policy_name]: request variable [variable_name] value is not of type Request Message", "detail": { "errorcode": "steps.servicecallout.RequestVariableNotRequestMessageType" } } }
Cause
Cette erreur se produit si une variable spécifiée dans l'élément <Request>
de la règle ServiceCallout est de type message
. Si la variable est de type message de réponse, une chaîne ou tout autre type, ce message d'erreur s'affiche.
La variable de type message
représente des requêtes et des réponses HTTP entières. Les variables de flux intégrées request
, response
et message
sont de type message
.
Diagnostic
Identifiez la règle ServiceCallout où l'erreur s'est produite et le nom de la variable dont le type est incorrect. Vous pouvez trouver ces deux éléments dans l'élément
faultstring
de la réponse d'erreur. Par exemple, dans le fichierfaultstring
suivant, le nom de la règle estExecuteGeocodingRequest
et celui de la variable estvar_response
:"faultstring": "ServiceCallout[ExecuteGeocodingRequest]: request variable var_response value is not of type Message"
Dans le fichier XML de la règle ServiceCallout ayant échoué, vérifiez que le nom de la variable définie dans l'élément
<Request>
correspond au nom de la variable identifiée dans la chaîne d'erreur (étape 1 ci-dessus). Par exemple, la règle suivante spécifie une variable de requête nomméevar_response
, qui correspond au contenu defaultstring
:<?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>
Déterminez si la variable est de type message de requête ou pas :
- Recherchez le code dans le groupe de proxys d'API, où la variable a été définie en premier.
- Dans la plupart des cas, vous constaterez que la variable posant problème est créée et insérée dans une autre règle qui s'exécute avant la règle ServiceCallout. Par exemple, la règle d'attribution des messages est couramment utilisée pour créer et insérer des variables dans un flux de proxy d'API.
- Une fois que vous avez identifié la règle où la variable est définie et renseignée en premier, vous devez déterminer le type de cette variable comme suit :
- Vérifiez la valeur de l'attribut
type
(le cas échéant). - En l'absence d'attribut
type
, la variable est considérée comme une chaîne.
- Vérifiez la valeur de l'attribut
- Si le type de la variable n'est pas du type message de requête, il s'agit de la cause de l'erreur. Pour en savoir plus sur les variables courantes et leurs types, consultez la documentation de référence sur les variables de flux.
Supposons, par exemple, que la variable var_response
référencée dans la règle ServiceCallout ait été créée dans la règle AssignMessage suivante. La variable response
est associée au type var_response
. Par conséquent, la variable var_response
est de type message de réponse.
<?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>
Rappelez-vous que la variable var_response
est utilisée dans l'élément <Request>
de la règle ServiceCallout.
<?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>
Comme var_response
n'est pas de type message de requête mais de type message de réponse, vous obtenez le code d'erreur suivant : steps.servicecallout.RequestVariableNotRequestMessageType
.
Solution
Assurez-vous que la variable définie dans l'élément <Request>
de la règle ServiceCallout ayant échoué est une variable de type message
qui existe. Vous pouvez également créer une variable de type message de requête directement dans la règle ServiceCallout (comme expliqué sur la page Règle ServiceCallout) et l'utiliser.
Pour corriger la règle, vous devez modifier l'élément <Request>
afin de spécifier une variable existante ou une nouvelle variable de type message de requête qui fonctionnera dans la règle ServiceCallout. Exemple :
<?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
Code d'erreur
steps.servicecallout.ExecutionFailed
Corps de la réponse d'erreur
{ "fault": { "faultstring": "Execution of ServiceCallout [policy_name] failed. Reason: Host not reachable", "detail": { "errorcode": "steps.servicecallout.ExecutionFailed" } } }
ou
{ "fault": { "faultstring": "Execution of ServiceCallout [policy_name] failed. Reason: ResponseCode [http_code] is treated as error", "detail": { "errorcode": "steps.servicecallout.ExecutionFailed" } } }
Causes possibles
Les causes possibles de cette erreur sont les suivantes :
Cause | Description |
Requête non valide ou incorrecte | L'URL cible de la règle ServiceCallout est incorrecte, ou son nom d'hôte est non valide ou inaccessible. |
Erreur du serveur backend | Le serveur backend renvoie une réponse d'erreur 4XX ou 5XX. |
Cause : URL incorrecte ou non valide
L'URL cible de la règle ServiceCallout est incorrecte, ou son nom d'hôte est non valide ou inaccessible.
Diagnostic
Identifiez la règle ServiceCallout à l'origine de l'erreur. Le nom de la règle apparaît dans l'élément
faultstring
de la réponse d'erreur. Par exemple, dans l'élémentfaultstring
suivant, le nom de la règle ServiceCallout ayant échoué estExecuteGeocodingRequest
."faultstring": "ServiceCallout[ExecuteGeocodingRequest]"
Dans la règle ServiceCallout ayant échoué, examinez l'élément
<URL>
. S'il est incorrect, ou si le nom d'hôte est non valide ou inaccessible, il s'agit de la cause de l'erreur. Par exemple, la règle ServiceCallout suivante spécifie un élément<URL>
non valide :<?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'élément
<URL>
ne possède que le protocolehttp://
, mais n'a pas de nom d'hôte valide. Par conséquent, la règle ServiceCallout échoue avec l'erreur suivante :Execution of ServiceCallout ExecuteGeocodingRequest failed. Reason: Host not reachable
.
Solution
Assurez-vous que l'élément <URL>
de la règle ServiceCallout ayant échoué possède une URL valide avec un nom d'hôte accessible.
Pour corriger la règle ServiceCallout présentée ci-dessus, vous pouvez modifier l'élément <URL>
pour spécifier une URL valide :
<?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>
Cause : erreur du serveur backend
Le serveur backend renvoie une réponse d'erreur 4XX ou 5XX.
Diagnostic
Identifiez la règle ServiceCallout à l'origine de l'erreur. Le nom de la règle apparaît dans l'élément
faultstring
de la réponse d'erreur. Par exemple, dans l'élémentfaultstring
suivant, le nom de la règle ServiceCallout ayant échoué estExecuteGeocodingRequest
."faultstring": "ServiceCallout[ExecuteGeocodingRequest]
Examinez
faultstring
dans le corps de la réponse d'erreur et vérifiez si des codes de réponse 4XX ou 5XX sont répertoriés dansReason
. Par exemple, la chaîne d'erreur suivante indique clairement qu'un code de réponse 502 a été renvoyé par le serveur backend :"faultstring": "Execution of ServiceCallout ExecuteGeocodingRequest failed. Reason: ResponseCode 502 is treated as error"
Solution
Une fois que vous avez déterminé le code de réponse d'erreur, vous pouvez résoudre ce problème comme vous le feriez pour une erreur 4XX ou 5XX.