Vous consultez la documentation d'Apigee Edge.
Accédez à la documentation sur Apigee X. info
UnresolvedVariable
Code d'erreur
steps.assignmessage.UnresolvedVariable
Corps de la réponse d'erreur
{ "fault": { "faultstring": "AssignMessage[policy_name]: unable to resolve variable [variable_name]", "detail": { "errorcode": "steps.assignmessage.UnresolvedVariable" } } }
Cause
Cette erreur se produit si une variable spécifiée dans la règle AssignMessage est :
- hors du champ d'application (non disponible dans le flux spécifique où la règle est exécutée) ou
- impossible à résoudre (non définie),
Par exemple, cette erreur se produit si la règle d'attribution des messages s'exécute dans le flux de requête, mais que l'attribut source
de l'élément <Copy>
est défini sur la variable response
ou error
ou toute autre variable personnalisée qui n'existe pas dans le flux de demande.
Diagnostic
Identifiez la stratégie d'attribution des messages où l'erreur s'est produite et le nom de la variable non disponible. Vous pouvez trouver ces deux éléments dans l'élément
faultstring
de la réponse d'erreur.Par exemple, dans l'élément
faultstring
suivant, le nom de la règle estgoogleBook
et la variable estvar
:"faultstring": "AssignMessage[googleBook]: unable to resolve variable var"
Dans le fichier XML de la règle d'attribution de messages ayant échoué, vérifiez que le nom de la variable utilisée correspond au nom de la variable identifié dans la chaîne d'erreur (étape 1 ci-dessus). Par exemple, la stratégie suivante définit l'attribut source de l'élément
<Copy>
sur une variable nomméevar
, qui correspond à ce que contient lefaultstring
:<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>
Déterminez si la variable est définie et disponible dans le flux dans lequel la règle Assign Message est en cours d'exécution.
Si la variable est :
- hors du champ d'application (non disponible dans le flux spécifique où la règle est exécutée), ou
- impossible à résoudre (non définie),
alors il s'agit de la cause de l'erreur.
Supposons, par exemple, que la règle d'attribution de messages affichée ci-dessus s'exécute dans le flux de requête. Vérifiez si la variable
var
est définie dans l'une des stratégies exécutées avant la règle "Assign Message" dans le flux de requêtes. Si la variable n'a pas été définie, vous recevez le code d'erreur :steps.assignmessage.UnresolvedVariable
Solution
Vérifiez que la variable référencée dans la stratégie existe et qu'elle est disponible dans le flux spécifique où la règle d'attribution de message est en cours d'exécution.
Pour corriger l'exemple de règle présenté ci-dessus, vous pouvez modifier l'attribut source dans l'élément <Copy>
afin qu'il soit la variable de requête, ou toute autre variable personnalisée de type message qui existe dans le flux de la requête.
<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
Code d'erreur
steps.assignmessage.VariableOfNonMsgType
Corps de la réponse d'erreur
{ "fault": { "faultstring": "AssignMessage[policy_name]: value of variable [variable] is not of type Message", "detail": { "errorcode": "steps.assignmessage.VariableOfNonMsgType" } } }
Cause
Cette erreur se produit si l'attribut source
de l'élément <Copy>
est défini sur une variable qui n'est pas de type Message.
Les variables de type Message représentent des requêtes et des réponses HTTP entières. Les variables de flux Edge intégrées request
, response
et message
sont de type message. Pour en savoir plus sur les variables de message, consultez la documentation de référence sur les variables.
Diagnostic
Identifiez la règle d'attribution des messages où l'erreur s'est produite, ainsi que 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 estGenerateGeocodingRequest
et celui de la variable estPostalCode
:"faultstring": "AssignMessage[GenerateGeocodingRequest]: value of variable PostalCode is not of type Message"
Dans le fichier XML de la règle d'attribution de messages échoué, vérifiez que le nom de la variable définie dans l'élément
<Copy>
correspond au nom de la variable identifiée dans la chaîne d'erreur (étape 1 ci-dessus). Par exemple, la règle suivante définit un attribut source sur une variable nomméePostalCode
qui correspond au contenu defaultstring
:<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>
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.
- 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.
- 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.
Par exemple, examinez la variable PostalCode dans le fichier XML ci-dessus. Elle reçoit la valeur de la variable de flux
request.queryparam.postalcode
dans l'élément<AssignVariable>
. Cette valeur est une chaîne, car il n'y a pas de type d'attribut dans l'attribution de variable.Rappelez-vous que la variable PostalCode est utilisée dans l'élément
<Copy>
de la règle Assignment message :<Copy source="PostalCode"> <QueryParams> <QueryParam name="PostalCode" /> </QueryParams> </Copy>
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.assignmessage.VariableOfNonMsgType
Solution
Assurez-vous que l'attribut source
de l'élément <Copy>
de la règle ayant échoué l'attribution de message est défini sur une variable de flux de type message qui existe.
Pour corriger la règle, vous pouvez modifier l'attribut source
dans l'élément <Copy>
afin de spécifier une variable de type "message". Par exemple, si la règle d'attribution de message est censé s'exécuter dans le flux de requête, vous pouvez utiliser la variable de type de message request
ou toute autre variable personnalisée de type "message".
<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>